|
|
  |
Вопрос по синтаксису, AVRStudio+WinAVR |
|
|
|
Jul 5 2007, 09:26
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(swisst @ Jul 5 2007, 13:13)  Среда разработки и компилятор AVRStudio+WinAVR, процессор ATMega88
...
Такой массив будет размещаться в ОЗУ, а мне необходимо разместить его во FLASH. Подскажите, как это сделать ? Прочтите в avr-libc-user-manual 'avr/pgmspace.h>: Program Space String Utilities' и FAQ#14. Потом отвечу на оставшиеся вопросы. Анатолий.
|
|
|
|
|
Jul 5 2007, 09:34
|
Знающий
   
Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484

|
Цитата(Dimmy @ Jul 5 2007, 13:27)  К сожалением WinAVR не пользую, но общий синтаксис примерно такой:
//--------------------------------------------- const struct Menu_Item AVT_Menu_Item[14]={...заполняю константами...}; Не вводите людей в заблуждение, масив AVT_Menu_Item будет расположен в RAM. Анатолий.
|
|
|
|
|
Jul 5 2007, 09:52
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
typedef struct Menu_Item{ ... }Menu_Item_t; #define AVT_Menu_Item_Default0 {...заполняю константами...} #define AVT_Menu_Item_Default1 {...заполняю константами...} const Menu_Item_t AVT_Menu_Item[]={AVT_Menu_Item_Default0,AVT_Menu_Item_Default1}; Только как во FLASH положить, пока не знаю
--------------------
aka Vit
|
|
|
|
|
Jul 5 2007, 11:38
|
Профессионал
    
Группа: Свой
Сообщений: 1 266
Регистрация: 22-04-05
Из: Киев
Пользователь №: 4 387

|
Цитата }Menu_Item; уже создает экземпляр структуры Menu_Item с выделением под него памяти. Ткните, плз, где такое написано. Для плюсов - понимаю - экземпляр должен быть (хоть по-правильному автоматом потом, кажись линкером, лишнее и вычищается). А для С - мне кажется такое утверждение слишком категорично. То, что компилеры зачастую уже не C, а C++ и есть свои нюансы - тоже понятно и как в этом смысле себя ведёт GCC для AVR не знаю. Но всё-таки ткните, плз. http://en.wikipedia.org/wiki/Typedef уже смотрел ЗЫ. насчёт PROGMEM спасибо, буду знать
--------------------
aka Vit
|
|
|
|
|
Jul 5 2007, 12:09
|
Частый гость
 
Группа: Участник
Сообщений: 106
Регистрация: 12-09-05
Пользователь №: 8 503

|
To sensor_ua. Тыкаю по структурам. Керниган и ричи, гл.6: "... Точно так же, как в случае любого другого базисного типа, за правой фигурной скобкой, закрывающей список членов, может следовать список переменных. Оператор
struct { ...} x,y,z;
синтаксически аналогичен
int x,y,z;
в том смысле, что каждый из операторов описывает x, y и z в качестве переменных соотвествующих типов и приводит к выделению для них памяти. Описание структуры, за которым не следует списка переменных, не приводит к выделению какой-либо памяти; оно только определяет шаблон или форму структуры. Однако, если такое описание снабжено ярлыком, то этот ярлык может быть использован позднее при определении фактических экземпляров структур. Например, если дано приведенное выше описание date, то struct date d; ... "
|
|
|
|
|
Jul 5 2007, 13:38
|
Частый гость
 
Группа: Участник
Сообщений: 106
Регистрация: 12-09-05
Пользователь №: 8 503

|
Согласен... "...И опыт - сын ошибок трудных, И гений - парадоксов друг... " (А.С.Пушкин)
|
|
|
|
|
Jul 6 2007, 13:11
|
Участник

Группа: Новичок
Сообщений: 17
Регистрация: 31-10-05
Пользователь №: 10 350

|
Цитата(swisst @ Jul 5 2007, 12:13)  Среда разработки и компилятор AVRStudio+WinAVR, процессор ATMega88 ... const Menu_Item_t AVT_Menu_Item[]... Подскажите, как это сделать ? #include <avr/eeprom.h> ... const Menu_Item_t AVT_Menu_Item[] EEMEM ={ ... для детальной информации читай доку по avr-libc - Идет в комплекте с WinAVR :о)
Сообщение отредактировал Tracer - Jul 6 2007, 13:22
|
|
|
|
|
Jul 8 2007, 19:14
|

кекс
     
Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326

|
Цитата(Dimmy @ Jul 5 2007, 13:22)  Просто там явные проблемы с синтаксисом. Вот это:
typedef struct { ... }Menu_Item; уже создает экземпляр структуры Menu_Item с выделением под него памяти. Нет тут никаках проблем с синтаксисом, и не создается никакого экземпляра Menu_Item. Menu_Item - это имя нового типа - структуры без тэга. Цитата А это (можно даже без typedef): ... struct MENU_ITEM MyMenu; //это переменная наврятли это будет чем-то удобнее чем Menu_Item MyMenu; // это переменная Цитата To sensor_ua. Тыкаю по структурам. Керниган и ричи, гл.6: вы бы сами разобрались что к чему, прежде чем тыкать пальцем в небо. Цитата(Tracer @ Jul 6 2007, 16:11)  const Menu_Item_t AVT_Menu_Item[] EEMEM ={ Автору вопроса структуру надо было во флеш разместить, а не в eeprom..
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|