|
Пару вопросов по IAR AVR |
|
|
|
Mar 14 2009, 19:44
|
Местный
  
Группа: Участник
Сообщений: 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 байт данных могли взяться?
Сообщение отредактировал SZ0 - Mar 14 2009, 19:48
|
|
|
|
|
Mar 14 2009, 22:40
|
Участник

Группа: Участник
Сообщений: 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()
|
|
|
|
|
Mar 16 2009, 10:21
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата(IgorKossak @ Mar 16 2009, 14:00)  Версия компилятора та же, но с апдейтом iccavr5.12C3. А где скачать апдейт? К местному ресурсу у меня нет доступа.
|
|
|
|
|
Mar 17 2009, 05:03
|
Частый гость
 
Группа: Свой
Сообщений: 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
|
|
|
|
|
Mar 17 2009, 09:19
|
Местный
  
Группа: Участник
Сообщений: 326
Регистрация: 14-02-06
Пользователь №: 14 331

|
Цитата(IgorKossak @ Mar 17 2009, 12:49)  Присоединить патч так и не получается. Может на рапиду или сахару закините? В сети я его так и не нашёл.
|
|
|
|
|
Mar 24 2009, 11: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.
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|