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

 
 
> инициализация строковых констант в PROGMEM, WinAVR
ARV
сообщение Jul 22 2010, 05:04
Сообщение #1


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

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



известен способ:
Код
typedef void (*cmd_handler)(char*);
typedef struct {
    char *cmd;
    cmd_handler handler;
} handler_t;

PROGMEM char cmd1[] = "item 1";
PROGMEM char cmd1[] = "item 2";

PROGMEM handler_t handler[] = {
    {cmd1, cmd_run},
    {cmd2, cmd_stop}
}
который выглядит громоздко и как-то некрасиво по сравнению с вариантом, когда массив размещается в ОЗУ:
Код
PROGMEM handler_t handler[] = {
    {"item 1", cmd_run},
    {"item 2", cmd_stop}
}

неужели нет такого же или почти такого же элегантного способа описания изначального значения массива во flash? ну что-то типа
Код
PROGMEM handler_t handler[] = {
    {some_macros("item 1"), cmd_run},
    {some_macros("item 2"), cmd_stop}
}
чтобы не надо было отдельно определять строки в виде константных массивов? может, я в трех соснах заблудился?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Непомнящий Евген...
сообщение Jul 22 2010, 07:18
Сообщение #2


Знающий
****

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



Ну как минимум можно извернуться так:

Код
файл menu.inc.h

#ifdef ARRAY
#define CMD(str, cmd) {menu_str_ ## __LINE__, cmd},
#else
#define CMD(str, cmd) PROGMEM char menu_str_ ## __LINE__ = str;
#endif

CMD("item 1", cmd_run)
CMD("item 2", cmd_stop)
...

#undef CMD

Далее файл menu.c

#include "menu.inc.h"

PROGMEM handler_t handler[] = {
#define ARRAY
#include "menu.inc.h"
#undef ARRAY
};


Если меню большое, то так красивее, чем в вашем способе №1. Если маленькое, то проще не заморачиваться.

Может конечно есть какой-то более простой GCC-AVR путь, но я не в теме smile.gif Для IAR есть флажок - размещать строковые константы во флеш
Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 23rd July 2025 - 12:07
Рейтинг@Mail.ru


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