реклама на сайте
подробности

 
 
> Проблема c IAR
cyb
сообщение Sep 15 2011, 17:09
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 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)

Ума не приложу что это за собака в коде и что она значит? cranky.gif

П.С. Если что представлю код подробнее, когда буду на работе.

Сообщение отредактировал cyb - Sep 15 2011, 17:10
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
KRS
сообщение Sep 16 2011, 09:47
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 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
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- 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   Код__io union { struct { .. } _PORTA; } @ 0x21...   Sep 16 2011, 10:50
|- - KRS   Цитата(cyb @ Sep 16 2011, 14:50) Это тоес...   Sep 16 2011, 11:33
|- - cyb   Цитата(KRS @ Sep 16 2011, 14:33) Нет, я и...   Sep 16 2011, 12:08
- - cyb   Хм, в общем переопределил все имена в новом иаре, ...   Sep 23 2011, 11:15
- - KRS   Цитата(cyb @ Sep 23 2011, 15:15) _A_PORTE...   Sep 23 2011, 13:50


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 28th July 2025 - 06:46
Рейтинг@Mail.ru


Страница сгенерированна за 0.01386 секунд с 7
ELECTRONIX ©2004-2016