Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пару вопросов по IAR AVR
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Cредства разработки для МК > IAR
SZ0
Компилятор 5.11

1.
В файле var.h

Код
typedef union
{
unsigned char f4_b;
struct
{
  unsigned char start1:1;           //0 - клавиша отжата, 1 - нажата
  unsigned char stop1:1;
  unsigned char block1:1;
  unsigned char start2:1;
  unsigned char stop2:1;
  unsigned char block2:1;
  unsigned char start3:1;
  unsigned char stop3:1;
};
}flag4;

extern flag4 f4;


В файле var.c

Код
flag4 f4;


При обращении к флагам f4.start1 = 1 компилятор пишет Error[Pe134]: expected a field name
Если убрать 1 в конце названия флага в описании типа (start:1) и обращаться в программе f4.start = 1 то всё нормально. Ещё оказалось если так же в названии типа написать start_1 и в программе обращаться f4.start_1 = 1 то тоже всё замечательно. Чем же компилятору не понравилось название start1? Переменные с цифрами в конце не создают проблем.

2.
После компиляции проекта компилятор выдал: 736 bytes of DATA memory (+ 22 absolute )
При этом все переменные у меня просто не занимают столько памяти! Полез копаться в листингах, там я не шибко силён. Нашёл в файле map следующее:

Код
                ****************************************
                *                                      *
                *            MODULE SUMMARY            *
                *                                      *
                ****************************************

Module               CODE      DATA         XDATA
------               ----      ----         -----
                    (Rel)  (Rel)  (Abs)  (Rel)  (Abs)
?C_STARTUP             36
?EEPROM_16             26
?EPILOGUE_B_L09        18
?FILLER_BYTES           8
  + common            220
?PROLOGUE_L09          10
?RESET
  + common              4
?__exit                 6
?low_level_init         4
?segment_init         128
?xV_SWITCH_L06        192
lcd                   836
  + shared                                          1
main                  617      6      9
  + shared              7             3
tcnt1                 144     11      4
  + common             72
uart                  382      6      6
  + common            220
var                          137           135
N/A (command line)           576
N/A (alignment)
----------          -----    ---     --    ---      -
Total:              2 414    736     22    135      1
  + common            220


Что это за строка - N/A (command line) 576? Откуда эти 576 байт данных могли взяться? cranky.gif
SergeyTT
Я не гуру в программировании,но вот такой код не ругается на номера флагов:

Код
typedef union {
  unsigned char f4_byte;
  struct {
    unsigned char start1: 1;           //0 - клавиша отжата, 1 - нажата
    unsigned char stop1:  1;
    unsigned char block1: 1;
    unsigned char start2: 1;
    unsigned char stop2:  1;
    unsigned char block2: 1;
    unsigned char start3: 1;
    unsigned char stop3:  1;
  }f4_struct;
}flag4;

__C_task void main(void)
{
flag4 f4union;

f4union.f4_byte = 0;
f4union.f4_struct.start1 = 1;
f4union.f4_struct.start1 = 0;
if(f4union.f4_struct.start1 == 0)
  f4union.f4_struct.stop1  = 1;
}//of main()
Непомнящий Евгений
Цитата(SZ0 @ Mar 14 2009, 22:44) *
Что это за строка - N/A (command line) 576? Откуда эти 576 байт данных могли взяться? cranky.gif


Это стек данных и стек возвратов
SZ0
Цитата(SergeyTT @ Mar 15 2009, 03:40) *
Я не гуру в программировании,но вот такой код не ругается на номера флагов:


Оставил f4.start_1. А то f4union.f4_struct.start1 = 1 слишком длинно писать smile.gif
IgorKossak
Цитата(SZ0 @ Mar 16 2009, 09:31) *
Оставил f4.start_1. А то f4union.f4_struct.start1 = 1 слишком длинно писать smile.gif

У меня работает без ошибок и с f4.start1. Версия компилятора та же, но с апдейтом iccavr5.12C3. В настройках компилятора указан язык Extended Embedded C++ (в нём допускаются анонимные структуры).
SZ0
Цитата(IgorKossak @ Mar 16 2009, 14:00) *
Версия компилятора та же, но с апдейтом iccavr5.12C3.


А где скачать апдейт? К местному ресурсу у меня нет доступа.
IgorKossak
Цитата(SZ0 @ Mar 16 2009, 12:21) *
А где скачать апдейт? К местному ресурсу у меня нет доступа.

Я скачивал с ИАРовского сайта после формальной регистрации. Похоже, что уже выкладывался кем-то здесь.
Хотел выложить сюда, не получается, вечером из дому попробую.
Попробуйте также с настройками повозиться.
SZ0
Цитата(IgorKossak @ Mar 16 2009, 18:01) *
Я скачивал с ИАРовского сайта после формальной регистрации.


На сайте мне не удалось скачать. Т.к. я понял им надо чтобы лицензия была официальная cool.gif . А где копаться в настройках по данной проблеме, я даже на знаю, кроме разве что в MISRA. Но я там... unsure.gif
IgorKossak
Цитата(SZ0 @ Mar 16 2009, 17:24) *
На сайте мне не удалось скачать. Т.к. я понял им надо чтобы лицензия была официальная cool.gif . А где копаться в настройках по данной проблеме, я даже на знаю, кроме разве что в MISRA. Но я там... unsure.gif

У меня триальная лицензия.
По поводу настроек (компилятора) я имел в виду установить язык Extended Embedded C++.
Димитрий
Цитата(SZ0 @ Mar 14 2009, 22:44) *
При обращении к флагам f4.start1 = 1 компилятор пишет Error[Pe134]: expected a field name


Сдела все тоже самое (единственно файлы называются test.c(h)) ни каких проблем. А вто если писать
f4.start = 1;
или
f4.start_1 = 1;
как раз выдает ошибку на отсутствие field.
У меня IAR AVR 5.11В
SZ0
Цитата(Димитрий @ Mar 17 2009, 10:03) *
А вто если писать
f4.start = 1;
или
f4.start_1 = 1;
как раз выдает ошибку на отсутствие field.
У меня IAR AVR 5.11В


Забавный компилятор rolleyes.gif
IgorKossak
Цитата(Димитрий @ Mar 17 2009, 07:03) *
Сдела все тоже самое (единственно файлы называются test.c(h)) ни каких проблем. А вто если писать
f4.start = 1;
или
f4.start_1 = 1;
как раз выдает ошибку на отсутствие field.
У меня IAR AVR 5.11В

У меня работает в любом случае, с любыми настройками и без ошибок (если я правильно понял написанное Вами).
Во втором случае Вы, очевидно, не изменили start1 на start или на start_1 в определении.

Присоединить патч так и не получается.
SZ0
Цитата(IgorKossak @ Mar 17 2009, 12:49) *
Присоединить патч так и не получается.


Может на рапиду или сахару закините? В сети я его так и не нашёл.
IgorKossak
Выкладываю патч, если ещё нужен.
SZ0
Цитата(IgorKossak @ Mar 19 2009, 23:24) *
Выкладываю патч, если ещё нужен.


За патч спасибо. Поставил нормально.

Вот что оказалось с флагами типа name1 и name_1.

Если флаг находится в I/O регистрах, я использую GPIOX регистры, то флаг можно назвать хоть name1, хоть name_1. Проблем при обращении нет.

Код
__io union
{
unsigned char f3_b;
struct
{
  unsigned char time1:1;
  unsigned char admin:1;
  unsigned char rx_st:1;
  unsigned char ed_time:1;
  unsigned char reld:1;
  unsigned char sync:1;
  unsigned char :1;
  unsigned char :1;
}f3;
}@ 0x2b;


А вот если флаг находится в SRAM (как в 1м сообщении), то компилятор позволяет к нему обращаться только когда он назван name_1.
IgorKossak
Цитата(SZ0 @ Mar 24 2009, 13:15) *
А вот если флаг находится в SRAM (как в 1м сообщении), то компилятор позволяет к нему обращаться только когда он назван name_1.

Очень странно. Я проверял именно на SRAM и всё получалось. Попробуйте выложить здесь минимально возможный неработающий проект, разберёмся.
SZ0
Цитата(IgorKossak @ Mar 24 2009, 18:04) *
Очень странно. Я проверял именно на SRAM и всё получалось. Попробуйте выложить здесь минимально возможный неработающий проект, разберёмся.


Странности продолжаются cranky.gif "Толи лыжи не едут, то ли я..." Выкинул из проекта почти всё, оставил только пару строк работы с флагами. Стал подставлять и описывать флаги, при которых были проблемы. Проблем нет (компилятор работу с флагами не выкинул - всё проверял в асме)! Всё работает. Снова загрузил полный проект, там поменял - компилятор ругается. Весь проект выложить не могу. Попробую привести проект к "нерабочему" виду и выложить попозже.
IgorKossak
Скорее всего в Вашем большом проекте имеется конфликт в именах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.