ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Вторник
9 июля
306101 Топик полностью
Cepгeй Бopщ (08.02.2012 11:29 - 11:38, просмотров: 106) ответил Toчкa oпopы на Этот гадёныш (avr-gcc 3.4.6) таки считает себя умнее (исправил форматирование).
Этот RCALL PC+0001 - больше похоже на быстрое резервирование пары байтов на стеке. Далее: extern voidIAP_UART_init(void);Тут пробел после void утерян. Вероятно опечатка, компилятор не должен был такое скушать. А может быть скушал, но воспринял не как прототип функции и, соответственно, IAP_UART_init(); не как вызов функции (а оптимизатор выкинул). LDFLAGS += -Ttext 0x0140 - это gcc должен или проигнорировать, или выругаться. Потому что у gcc нет опции -Ttext, это опция линкера, у gcc есть опция -T script_file и 0x140 через пробел тут как отдельный ключ должен трактоваться. Попробуйте заменить ее на LDFLAGS += -Wl,-Ttext,0x0140 Ну и адрес IAP_UART_init никак не может быть нечетным. Попробовал на тестовом проекте: main.c: extern void IAP_UART_init(void); __attribute__((OS_main)) int main() { IAP_UART_init(); for(;;) ; } Флаги:
LDFLAGS += -Wl,--gc-sections
LDFLAGS += -Wl,--relax
LDFLAGS += -Wl,--defsym,IAP_UART_init=0x6A
LDFLAGS += -Wl,-Ttext=0x140
листинг:
Disassembly of section .text:

00000140 <__vectors>:

    ........

0000019e <main>:
extern void IAP_UART_init(void);

__attribute__((OS_main))
int main()
{
    IAP_UART_init();
 19e:	65 df       	rcall	.-310    	; 0x6a <IAP_UART_init>
 1a0:	ff cf       	rjmp	.-2      	; 0x1a0 <main+0x2>

Добавлено: проверил, действительно gcc кушает LDFLAGS += -Ttext 0x0140, так что дело у вас не в этом.