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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Пару вопросов по IAR AVR
SZ0
сообщение Mar 14 2009, 19:44
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Компилятор 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

Сообщение отредактировал SZ0 - Mar 14 2009, 19:48
Go to the top of the page
 
+Quote Post
SergeyTT
сообщение Mar 14 2009, 22:40
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 3-07-06
Из: Харьков
Пользователь №: 18 533



Я не гуру в программировании,но вот такой код не ругается на номера флагов:

Код
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()
Go to the top of the page
 
+Quote Post
Непомнящий Евген...
сообщение Mar 16 2009, 05:20
Сообщение #3


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(SZ0 @ Mar 14 2009, 22:44) *
Что это за строка - N/A (command line) 576? Откуда эти 576 байт данных могли взяться? cranky.gif


Это стек данных и стек возвратов
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 16 2009, 07:31
Сообщение #4


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



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


Оставил f4.start_1. А то f4union.f4_struct.start1 = 1 слишком длинно писать smile.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 16 2009, 09:00
Сообщение #5


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

У меня работает без ошибок и с f4.start1. Версия компилятора та же, но с апдейтом iccavr5.12C3. В настройках компилятора указан язык Extended Embedded C++ (в нём допускаются анонимные структуры).
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 16 2009, 10:21
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(IgorKossak @ Mar 16 2009, 14:00) *
Версия компилятора та же, но с апдейтом iccavr5.12C3.


А где скачать апдейт? К местному ресурсу у меня нет доступа.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 16 2009, 13:01
Сообщение #7


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

Я скачивал с ИАРовского сайта после формальной регистрации. Похоже, что уже выкладывался кем-то здесь.
Хотел выложить сюда, не получается, вечером из дому попробую.
Попробуйте также с настройками повозиться.
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 16 2009, 15:24
Сообщение #8


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(IgorKossak @ Mar 16 2009, 18:01) *
Я скачивал с ИАРовского сайта после формальной регистрации.


На сайте мне не удалось скачать. Т.к. я понял им надо чтобы лицензия была официальная cool.gif . А где копаться в настройках по данной проблеме, я даже на знаю, кроме разве что в MISRA. Но я там... unsure.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 16 2009, 15:27
Сообщение #9


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

У меня триальная лицензия.
По поводу настроек (компилятора) я имел в виду установить язык Extended Embedded C++.
Go to the top of the page
 
+Quote Post
Димитрий
сообщение Mar 17 2009, 05:03
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 184
Регистрация: 21-03-06
Из: Нижний Новгород
Пользователь №: 15 435



Цитата(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В

Сообщение отредактировал Димитрий - Mar 17 2009, 05:04
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 17 2009, 05:15
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



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


Забавный компилятор rolleyes.gif
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 17 2009, 07:49
Сообщение #12


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



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

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

Присоединить патч так и не получается.
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 17 2009, 09:19
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



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


Может на рапиду или сахару закините? В сети я его так и не нашёл.
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Mar 19 2009, 18:24
Сообщение #14


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Выкладываю патч, если ещё нужен.
Прикрепленные файлы
Прикрепленный файл  iccavr5.12C3.zip ( 3.29 мегабайт ) Кол-во скачиваний: 62
 
Go to the top of the page
 
+Quote Post
SZ0
сообщение Mar 24 2009, 11:15
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331



Цитата(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.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 10:04
Рейтинг@Mail.ru


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