ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
9 июля
306018 Топик полностью
Точкa oпopы из дому (08.02.2012 00:21, просмотров: 1) ответил Cepгeй Бopщ на GCC позволяет это сделать очень красиво и эффективно. Он позволяет объяснить компилятору, что функция принимает параметры в конкретных регистрах и в конкретных отдает, и компилятор строит код с учетом этого.
Этот гадёныш (avr-gcc 3.4.6) таки считает себя умнее. А, ну и если функция не требует параметров или параметры передаются в соответствии с принятым в gcc соглашнеии о вызовах, то тогда в заголовочном файле пишем extern void Bootloader(); а в командной строке линкера LDFLAGS += -Wl,--defsym,BootLoader=0x1800Пишу в .h:extern voidIAP_UART_init(void);// настройка программного УАПППишу в .c:intmain(){IAP_UART_init();while (1){for (ADC_data=0;1;ADC_data++){Добавляю в makefile (приложение начинается с адреса 0x140, вход в IAP_UART_init - по адресу 0x0037):LDFLAGS += -Ttext 0x0140LDFLAGS += -Wl,--defsym,IAP_UART_init=0x0037В ответ получаю предупреждение на первую строку main с вызовом функции:warning: internal error: out of range errorИ в .hex файле получаю такой вот финт ушами:71: intmain(){+00000103: D000 RCALL PC+0x0001 Relative call subroutine77: for (ADC_data=0;1;ADC_data++){+00000104: 92100064 STS 0x0064,R1 Store direct to data space+00000106: 92100063 STS 0x0063,R1 Store direct to data spaceи так далее, нет ret'а там нигде нет.Читал избранные места из имеющихся справок по GCC и линкеру - ошибок, вроде, нет. Ох№;%:ю... 8-( Какой раздел манов ещё покурить? Или я опять синтаксис попутал?