|
Массив ссылок на строки., Всё должно лежать во flash. |
|
|
|
Sep 26 2010, 20:51
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Есть конструкция: Код __flash uint8 *str[]= { “str1”, “str1”, “str1”, } Надо что бы создавался массив ссылок *str[] который лежал бы во flash, который указывал на строки, которые лежали бы тоже во flash. Конструкция выше создаёт строки в RAM. Компилятор IAR AVR.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 26 2010, 21:14
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Код char __flash const str1[] = "str1"; char __flash const str2[] = "str2";
char __flash const * __flash const test[] = { str1, str2, }; Идентичный пример есть в документации: Цитата Putting strings in flash This can be done on individual strings or for the whole application/file using the option --string_literals_in_flash. Examples on how to put individual strings into flash: __flash char str1[] = "abcdef"; __flash char str2[] = "ghi"; __flash char __flash * pVar[] = { str1, str2 }; Вот только они const забыли
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 27 2010, 08:12
|

тут может быть ваша реклама
    
Группа: Свой
Сообщений: 1 164
Регистрация: 15-03-06
Из: Санкт-Петербург/CA
Пользователь №: 15 280

|
А если эти указатели объявить как указатели на const? Боюсь наврать с синтаксисом, но что то типа Код __flash uint8* const str[]= { “str1”, “str1”, “str1”, } Не проверял сам.
|
|
|
|
|
Sep 27 2010, 08:21
|

Знающий
   
Группа: Свой
Сообщений: 511
Регистрация: 24-08-07
Из: БРЕСТ
Пользователь №: 30 053

|
Цитата __flash uint8* const str[]= Вроде как не создаёт массив ссылок, вроде надо так: __flash uint8 const *str[]= В обед проверю правильность. P.S. Эксперементировал с вставкой __flash везде где только можно не пракотило. Попробую комбинацию с const.
--------------------
Если хочешь вбить гвоздь, не ищи обходных путей, просто бери молоток и бей по этому чёртовому гвоздю!
|
|
|
|
|
Sep 27 2010, 09:24
|

Гуру
     
Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095

|
Цитата(IgorKossak @ Sep 27 2010, 11:33)  Код __flash const uint8* __flash const str[]= Это напрашивалось с самого начала. Однако Цитата Warning[Pa024]: duplicate type qualifier main.c 15 Warning[Pa011]: memory attribute duplicated main.c 15 Казалось бы идентичное с точки зрения синтаксиса определение Код char __flash const * __flash const str[]= дает Цитата Error[Pe144]: a value of type "char const *" cannot be used to initialize an entity of type "char const __flash *" main.c 17 Наверное они не зря именно этот пример в документацию включили.
--------------------
На любой вопрос даю любой ответ"Write code that is guaranteed to work, not code that doesn’t seem to break" ( C++ FAQ)
|
|
|
|
|
Sep 28 2010, 08:13
|
Местный
  
Группа: Свой
Сообщений: 426
Регистрация: 5-04-07
Из: Санкт-Петербург
Пользователь №: 26 782

|
Цитата(YAM @ Sep 28 2010, 11:51)  Ну так а чем
char __flash * __flash pMSG[] = { "String1", "String2", "String3" };
не устраивает? Выдает ошибку Error[Be009]: memory attributes not allowed on auto variables or parameters
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|