|
Проблема c IAR |
|
|
|
Sep 15 2011, 17:09
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 29-08-11
Из: Киев
Пользователь №: 66 910

|
Здравствуйте. В общем сразу к делу. Перехожу на IAR под AVR и задача доработать программу, которая написана на IDE IAR 4.20. Открываю проект в IAR 5.51 пробую компилировать, но линковщик выдает ошибку [e46]. Причём проект компилируется в старом IAR 4.20 без ошибок. Так вот, как нужно изменить код чтобы он линковался без ошибок в новом IARe? Код:... static __io struct { .. } _PORTA @ 0x21; Ругается так: Error [e46]: Undefined external reference _PORTA (../../../xxx.d90) Ума не приложу что это за собака в коде и что она значит? П.С. Если что представлю код подробнее, когда буду на работе.
Сообщение отредактировал cyb - Sep 15 2011, 17:10
|
|
|
|
|
 |
Ответов
|
Sep 16 2011, 09:47
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(cyb @ Sep 15 2011, 21:09)  static __io struct { .. } _PORTA @ 0x21;
Ругается так: Error [e46]: Undefined external reference _PORTA (../../../xxx.d90) Посмотрел я новый iomacro, там тоже самое! попробуйте static убрать! должно работать. либо добавить обертку Код __io union { struct { .. } _PORTA; } @ 0x21; Код #define SYNC_O _PORTA._P6 можно и эти #define заменить. Цитата(cyb @ Sep 16 2011, 13:37)  В общем идёт так:
В заголовке определяется:
static volatile __io struct { BYTE _P0:1, _P1:1, _P2:1, _P3:1, _P4:1, _P5:1, _P6:1, _P7:1; } _PING @ 0x63;
Далее переопределяется в другом заголовке так:
#define ADCDOUT2_O _PORTG.P2 #define ADCDOUT2_I _PING.P2 #define ADCDOUT2_C _DDRG.P2 #define ADCDOUT2_M (1 << P2)
а где подчеркивания? должно быть #define ADCDOUT2_O _PORTG._P2 Цитата(cyb @ Sep 16 2011, 13:37)  Ну вот я и попробовал сделать так: #define ADCDOUT2_O PORTG.P2 #define ADCDOUT2_I PING.P2 #define ADCDOUT2_C DDRG.P2 #define ADCDOUT2_M (1 << P2)
Но компилятор засыпал ошибками на таких условиях if(ADCDOUT2_I) _Bytes[2] |= 0x80; Error[Pe133]: expected a member name D:\WORK\PROJECTS\KP01\CybVe_newIAR\TAD7714.cpp 28 нужно PORTG_PORTG2 и т.п. и не понятно что значит (1 << P2)
Сообщение отредактировал KRS - Sep 16 2011, 09:52
|
|
|
|
|
Sep 16 2011, 10:50
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 29-08-11
Из: Киев
Пользователь №: 66 910

|
Код __io union { struct { .. } _PORTA; } @ 0x21; Да такая конструкция сработала, только дело в том что там у меня все структуры определенные в классах, поэтому в классы такую конструкцию включать нельзя, а вот если вынести то всё работает. Цитата а где подчеркивания? должно быть #define ADCDOUT2_O _PORTG._P2 Да правильно это просто я здесь опечатался. Цитата и не понятно что значит (1 << P2) Что это понятно, а вот как тут используется непонятно. Цитата нужно PORTG_PORTG2 и т.п. Это тоесть? Странная какая-то запись. Может вы имели в виду PORTG.2?
Сообщение отредактировал cyb - Sep 16 2011, 10:50
|
|
|
|
|
Sep 16 2011, 11:33
|

Профессионал
    
Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555

|
Цитата(cyb @ Sep 16 2011, 14:50)  Это тоесть? Странная какая-то запись. Может вы имели в виду PORTG.2? Нет, я имел ввиду PORTG_PORTG2 так раскрывается макрос, пример можете посмотреть в файле iomacro.h Код /* SFR_B_N(0x3F,SREG,I,T,H,S,V,N,Z,C) Expands to: __io union { unsigned char SREG; // The sfrb as 1 byte struct { // The sfrb as 8 bits unsigned char SREG_Bit0:1, SREG_Bit1:1, SREG_Bit2:1, SREG_Bit3:1, SREG_Bit4:1, SREG_Bit5:1, SREG_Bit6:1, SREG_Bit7:1; }; struct { // The sfrb as 8 bits unsigned char SREG_C:1, SREG_Z:1, SREG_N:1, SREG_V:1, SREG_S:1, SREG_H:1, SREG_T:1, SREG_I:1; }; } @ 0x3F; */
|
|
|
|
|
Sep 16 2011, 12:08
|

Участник

Группа: Участник
Сообщений: 39
Регистрация: 29-08-11
Из: Киев
Пользователь №: 66 910

|
Цитата(KRS @ Sep 16 2011, 14:33)  Нет, я имел ввиду PORTG_PORTG2 так раскрывается макрос, пример можете посмотреть в файле iomacro.h А понятно, в принципе структура с union работает, так что остановлюсь на этом, а то такие многоэтажные макросы как в iomacro.h пока слишком для меня. Спасибо за помощь.
Сообщение отредактировал cyb - Sep 16 2011, 12:09
|
|
|
|
Сообщений в этой теме
cyb Проблема c IAR Sep 15 2011, 17:09 KRS А зачем _PORTA определять? в ioXXX.h для вашего ко... Sep 15 2011, 20:09 cyb Цитата(KRS @ Sep 15 2011, 23:09) А зачем ... Sep 16 2011, 06:45 KRS 1. есть препроцессор
2. посмотрите как в родных i... Sep 16 2011, 07:05 cyb Цитата1. есть препроцессор
2. посмотрите как в род... Sep 16 2011, 07:42 KRS Цитата(cyb @ Sep 16 2011, 11:42) Ну да по... Sep 16 2011, 08:40 demiurg_spb Цитата(cyb @ Sep 16 2011, 11:42) Ну да по... Sep 16 2011, 08:41  cyb Цитата(demiurg_spb @ Sep 16 2011, 11:41) ... Sep 16 2011, 09:12   demiurg_spb Тогда проще по тексту программы убрать все эти убо... Sep 16 2011, 09:35 demiurg_spb Цитата(cyb @ Sep 15 2011, 21:09) Ума не п... Sep 16 2011, 08:39 cyb В общем идёт так:
В заголовке определяется:
stat... Sep 16 2011, 09:37 cyb Хм, в общем переопределил все имена в новом иаре, ... Sep 23 2011, 11:15 KRS Цитата(cyb @ Sep 23 2011, 15:15) _A_PORTE... Sep 23 2011, 13:50
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|