Непонятности с IAR EW2.28

Сегодня решил все-таки перейти на более современный софт для программирования AVR, а именно, с IAR EW 1.40C на 2.28A. Взял простенький работающий проект из трех файлов (процессор 4414), подправил описания обработчиков прерываний, и... Фокус заключается в том, что в 1.40 все компилируется, а в 2.28 линковщик выдает: Error[e46]: Undefined external "NEXTCRC(unsigned int, unsigned char)" referred in uart ( D:\Projects\motor\out\uart.r90 )

Файл motor.c - там функция main() В файле uart.c содержится следующая строчка: extern unsigned int NEXTCRC(unsigned int CRC, unsigned char D); Далее по тексту эта функция несколько раз вызывается.

Файл CRC16.s90:

NAME CRC16 RSEG CODE PUBLIC NEXTCRC ; unsigned int NextCRC(unsigned int CRC, unsigned char D) ; r16,r17 - privious CRC ; r20 - data byte D ; return: r16:r17 - new CRC NEXTCRC: eor r16,r20 ldi r22,0x01 ldi r23,0xA0 ldi r21,9 Loop: dec r21 breq Stop lsr r17 ror r16 brcc Loop eor r16,r22 eor r17,r23 rjmp Loop Stop: ret END

Помогите, кто-нибудь, а? Перепробовал всевозможные настройки, все бестолку, объектники генерятся, в мапе функция присутствует. Какой то этот EC++ неприветливый. Благодарю всех кто правильно ткнет носом.

Reply to
Arcady Korotkevitch
Loading thread data ...

Mon, 20 Oct 2003 17:27:12 +0000 (UTC) Arcady Korotkevitch wrote

AK> Файл motor.c - там функция main() AK> В файле uart.c содержится следующая строчка: AK> extern unsigned int NEXTCRC(unsigned int CRC, unsigned char D); AK> Далее по тексту эта функция несколько раз вызывается.

AK> Файл CRC16.s90:

AK> NAME CRC16 AK> RSEG CODE AK> PUBLIC NEXTCRC AK> ; unsigned int NextCRC(unsigned int CRC, unsigned char D) AK> ; r16,r17 - privious CRC AK> ; r20 - data byte D AK> ; return: r16:r17 - new CRC AK> NEXTCRC: AK> eor r16,r20 AK> ldi r22,0x01 AK> ldi r23,0xA0 AK> ldi r21,9 AK> Loop: AK> dec r21 AK> breq Stop AK> lsr r17 AK> ror r16 AK> brcc Loop AK> eor r16,r22 AK> eor r17,r23 AK> rjmp Loop AK> Stop: AK> ret AK> END

У тебя, по ходу, режим С++ включен. А значит и кодирование имен в объектных файлах (для типобезопасного связывания, перегрузки). Чтобы избежать проблем, нужно либо выключить С++ режим, либо объявить функцию явно с С-связыванием:

extern "С" unsigned int NEXTCRC(unsigned int CRC, unsigned char D);

...so long!

### Варфоломеевская ночь, утро стрелецкой казни... Что-то будет днем!..

Reply to
Harry Zhurov

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.