Spider 0 31 октября, 2010 Опубликовано 31 октября, 2010 · Жалоба Всем привет! Вот что-то не получается объявить массив строк констант. Сейчас эт осделано так: const char PROGMEM StrLoadingEng[]="Loading..."; const char PROGMEM StrAnyKeyEng[]="Press any key"; const char PROGMEM StrLangEng[]="English"; const char PROGMEM StrLoadingRus[]="Загрузка..."; const char PROGMEM StrAnyKeyRus[]="Жми любую кнопку"; const char PROGMEM StrLangRus[]="Русский"; static uint8_t CurLang = 0; const char *LangStrings[2][3] = { { //English StrLoadingEng, StrAnyKeyEng, StrLangEng, }, { //Russian StrLoadingRus, StrAnyKeyRus, StrLangRus, } }; А как всё тоже самое, только не создавая для каждой строки отдельную константу? Как бы всё внести под скобки? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 122 31 октября, 2010 Опубликовано 31 октября, 2010 · Жалоба Как бы всё внести под скобки?Увы, никак. И в ИАРе тоже. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
injen-d 0 31 октября, 2010 Опубликовано 31 октября, 2010 · Жалоба А как-то так: const char* aaa[2][3] ={{"qqqq", "ggggg", "v56"}, {"wwwwwwwwwwwww", "jj", "gg23"}}; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
alexeyv 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 (изменено) · Жалоба Или так: prog_int8_t string_prog[][9] ={ "--PrOG--", "t on ", "t of ", "Cur ", "St ", "CL ", "YEAr20 ", "1-12 ", "1-31 ", "0-23 ", "0-59 " }; Одно НО : строки должны быть одного размера Изменено 1 ноября, 2010 пользователем alexeyv Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
plombir 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А как всё тоже самое, только не создавая для каждой строки отдельную константу? Как бы всё внести под скобки? С избыточностью кода не устраивает? const char PROGMEM LangStrings[2][3][ 30 ] = { { //English "Loading...", "Press any key", "English", }, { //Russian "Загрузка...", "Жми любую кнопку", "Русский", } }; Где 30 - максимальная длина строки + '\0' PROGMEM в GCC, как я понял, эквивалентен __flash в IAR. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Spider 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба в моём случае каждая строка хранится во влеш конкретной длиной. А в вашем по 30 байт, не экнономно :( Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
rushack 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А если во внешней памяти хранить? Запихать всё в какую нибудь 24C1024 и подгружать когда нужно (не забывая выгружать...) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А как всё тоже самое, только не создавая для каждой строки отдельную константу? Как бы всё внести под скобки?В avr-gcc никак. Читайте первоисточник: http://www.nongnu.org/avr-libc/user-manual...l#faq_rom_array А если во внешней памяти хранить? Запихать всё в какую нибудь 24C1024 и подгружать когда нужно (не забывая выгружать...) Напомнило:-) - Алло! Можно Свету? - Здесь всех можно! Это женское общежитие... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MSprut 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба Почему в ИАР никак? А так: __flash char *Cmnd[] = { "PHV", "PHC", "PHF", "BATV", "FUEL", "COOL", "OIL", "TACHO", "PHCTRL", "PWRSRC", "IGNIT", "START", "CHARGE", "EXCIT", "CLUTCH", "ASHUTT", "SETCFG", "GETCFG", "SETMODE", "GETMODE", "GENOFF", "SMSTEP", "GETSTAT", "SETSTAT", "SETSPEED", "GETSPEED", "PAUSE", "LAUNCH", "ASTART", "ARPM", "DVSSTAT", "LOADSTAT", "GASTAT", "SASTAT" }; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 122 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А так:А так массив указателей на строки будет расположен в ОЗУ. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А так? __flash char * __flash Cmnd[] = {... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Сергей Борщ 122 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба А так?Дежа-вю ;) http://electronix.ru/forum/index.php?showtopic=80852 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
IgorKossak 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба Дежа-вю ;) http://electronix.ru/forum/index.php?showtopic=80852 Вопрос по ссылке вроде бы решился указанием опции компилятору. Но это относилось к IAR, а с GCC как быть? Создать секции и размещать строки и массивы указателей в секциях? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
demiurg_spb 0 1 ноября, 2010 Опубликовано 1 ноября, 2010 · Жалоба Но это относилось к IAR, а с GCC как быть? Создать секции и размещать строки и массивы указателей в секциях?Так я же дал ссылку, там всё внятно написано, полнее чем там нет:-) Зачем секцию создавать, она и так есть - PROGMEM. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
_Pasha 0 2 ноября, 2010 Опубликовано 2 ноября, 2010 · Жалоба #define MSG_DEF(id,cont) case id: do{static PROGMEM char s[]=cont; return s;}while(0); char *msg(const uint16_t id) { switch(id) { MSG_DEF(1,"This is a string 1"); MSG_DEF(2,"This is a string 2"); } return NULL; } Оверхед есть, на формировании возврата функции, но! Обратите внимание, что при -Os и достаточном кол-ве строк (у меня - больше 10) у оптимизатора лопнет терпение, и он перейдет от сравнения к косвенным переходам. Это если id будет покрывать множество без разрывов. Зато удобно. Если у нас будет enum для msg-ключей - компилер будет кричать, если пропущены элементы множества в конструкции switch-case. Эту байду можно нарастить многоязыковой поддержкой, добавив второй switch А вообще для текстов - *.csv - самописная утилитка - и вперед. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться