Точка опоры (28.10.2013 23:16, просмотров: 40) ответил fk0 на Как в gcc положить код в определённую секцию? Оптом и желательно без модификации исходников (дописывания __attribute__("section")).
Для непрофессиональных контроллеров семейства AVR сделал через makefile: # Загрузчик - в начале памяти сидит и "отражает" таблицу прерываний
# начиная с адреса (словного) 0x160. Также - имеется пять точек входа:
# в автомат загрузчика - waitcmd;
# в настройку программного УАПП - u_init;
# в функцию ожидания готовности передатчика (дублируется битом и прерыванием
# OCF0A) - TXcomplete;
# в функции приёма и инициации передачи байта - putc и getc.
# Оригинальная конструкция вместо 0x0160 такова (значение boot_end и пр.
# также см. в h-файле): boot_end+PAGESIZE-(boot_end%PAGESIZE)
LDFLAGS += -Ttext 0x02C0
LDFLAGS += -Wl,--defsym=IAP_call=....
LDFLAGS += -Wl,--defsym,IAP_UART_init=....
LDFLAGS += -Wl,--defsym=IAP_UART_TXcomplete=....
LDFLAGS += -Wl,--defsym=IAP_UART_put_byte=....
LDFLAGS += -Wl,--defsym=IAP_UART_get_byte=....
К началу памяти ATtiny "гвоздями прибит" загрузчик на ассемблере. Написанный на Си код размещается сразу после него (выровнен кратно PAGESIZE).
Заказать импортные ЭК - https://shop.fulcrum.ru/buy