Реклама на сайте DatasheetsDatasheets

KAZUS.RUN - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Книги и журналы
FAQ по электронике

  Datasheets
Поиск SMD
Онлайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Схемы и проекты
Принципиальные схемы
  Программы
Каталог сайтов
Калькуляторы
  Форумы по электронике
Помощь проекту

Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств.

 
Опции темы

Как в IAR C разместить "text" в флеш памяти?

Непрочитано 22.11.2011, 18:23  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Как в IAR C разместить "text" в флеш памяти?

Имеется процедура вывода строки на LCD, хотелось бы обращаться к ней как - ну скажем - out2lcd("строка"). В этом случае компилятор располагает "строка" в ОЗУ, что (IMHO) нехорошо - ведь в любом случае эта же строка есть и в ПЗУ. Хотелось бы брать ее именно оттуда - таких строк много, ОЗУ жалко, а время доступа в этом случае несущественно.

Можно, конечно, строки все объявлять как
Цитата:
char __flash info02[]="(c)[email protected]\0";
и обращаться как к строке __flash. Но это нечитабельно и неудобно - вместо строки есть имя переменной.

Вроде есть такая штука как --initializers_in_flash - но судя по отладчику это ни на что не влияет.

Подскажите - где я туплю? Или желаемое невозможно?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.11.2011, 18:45  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

В опциях компилятора есть вкладка "Code", там есть пунктик про размещение констант и строк в инициализированной РАМ. Если галочку снять, для них потом надо выделить сегмент (указать). Но вот что дальше - не пробовал, и сейчас к сожалению не могу. Может оно...
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Сказали "Спасибо" alberio
warel (28.06.2019)
Непрочитано 22.11.2011, 18:53  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

Сообщение от alberio Посмотреть сообщение
В опциях компилятора есть вкладка "Code", там есть пунктик про размещение констант и строк в инициализированной РАМ.
Я там вижу - вот на рисунке. И вроде как вместе с "-y" ключом - должно делать нужное мне, если я правильно прочел документацию.
Код:
Use this option to place aggregate initializers in flash memory. These initializers are
otherwise placed in the external segments _C or in the flash segments _F if the compiler
option -y was also specified.
An aggregate initializer—an array or a struct—is constant data that is copied to the stack
dynamically at runtime, in this case every time a function is entered.
The drawback of placing data in flash memory is that it takes more time to copy it; the
advantage is that it does not occupy memory in the data space.
Но, увы, в любых комбинациях - вижу что все строки лежат в конце флеша, и при запуске опять же ВСЕ РАЗОМ копируются в ОЗУ. Вот и не пойму - где я дурак.
Миниатюры:
Нажмите на изображение для увеличения
Название: initializer.jpg
Просмотров: 64
Размер:	20.8 Кб
ID:	28665  
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.11.2011, 18:57  
alberio
Гражданин KAZUS.RUN
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 582
Сказал спасибо: 76
Сказали Спасибо 90 раз(а) в 66 сообщении(ях)
alberio на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

у вас на скриншоте галочка, про которую я говорил, затемнена, и снять ее низзя - а странно...
__________________
Sex, Druggs, Rock&Roll
alberio вне форума  
Сказали "Спасибо" alberio
warel (28.06.2019)
Непрочитано 22.11.2011, 19:08  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

Сообщение от alberio Посмотреть сообщение
у вас на скриншоте галочка, про которую я говорил, затемнена, и снять ее низзя - а странно...
Блин, а вот на нее я внимания ине обратил - серая - значит и не надо... Спасибо... Копаем тут
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.11.2011, 19:24  
st_1
Заблокирован
 
Регистрация: 26.12.2009
Сообщений: 3,102
Сказал спасибо: 113
Сказали Спасибо 860 раз(а) в 610 сообщении(ях)
st_1 на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

Сообщение от nml Посмотреть сообщение
Код:
char __flash info02[]="(c)[email protected]\0";
А может...
Код:
 __flash const char info02[]="(c)[email protected]\0";
???
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 22.11.2011, 19:31  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

Сообщение от st_1 Посмотреть сообщение
А может...
Не. Я хочу не объявлять где-то эту строку, а написать ее прямо в параметрах вызова процедуры.

Тут дело - как правильно указал alberio - в том, что нужную мне галочку я не могу убрать. И похоже что никак - в доках скриншот экрана тоже с затемненной. Засада, однако.

PS Лопатим инет и находим на сахаре:
Цитата:
Это если Processor configuration стоит --cpu=m8, а если выберу -v1, 64K data, 8K code, опция становится доступной. Интересно какая ему разница? Ну да ладно, не это важно.
Я так понял, если поставить эту галку, то стартап скопирует все константы и литералы в ОЗУ. Что еще уменьшит его свободный размер. А про "лишний" байт я чего-то не понял. В tini адреса переменных 1 байт, в small 2 байта, но это не влияет на длину переменных.
Вот те на...
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 22.11.2011 в 19:38.
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.11.2011, 21:48  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

Сообщение от nml Посмотреть сообщение
Вот те на...
Как в том анекдоте - вот те раз! -вот те два...

Посмотрел в симуляторе - на первый взгляд - строк в ОЗУ нету. Глянул код - берутся из ОЗУ! Но адрес не привычный 0x60 (программа-минимальная, чисто для проверки) - а 0x1160!

Не думаю, что у АВРок флеш ремаппится на область ОЗУ - нигде не читал о таком. Следовательно, это просто какой-то глюк. Продолжаю поиск, хотя и без особой уже надежды.
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 23.11.2011, 00:44  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,394
Сказал спасибо: 2,016
Сказали Спасибо 1,356 раз(а) в 591 сообщении(ях)
nml на пути к лучшему
Хорошо Re: Как в IAR C разместить "text" в флеш памяти?

Ну вот, сам вопрос задал, сам и ответил. Дальнейшее штудирование инета принесло - в компилере есть недокументированный ключ командной строки,
Код:
--string_literals_in_flash
Его надо вставить в Options -› C/C++ compiler -› Extra options

***** мать, как все просто. Как я понимаю, это и есть та "затемненная" галочка... Одно радует- это не я такой дурак, это глюк (или фича?) IARа.

На первый взгляд код строится правильный, завтра проверю на реальном железе.

PS Да, все работает. О, сколько нам отрытий чудных отроется, коль поискать....
__________________
[ жизнь приятна и красива, если выпить литр пива ]

Последний раз редактировалось nml; 23.11.2011 в 11:25.
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.08.2017, 18:35  
RingQ
Частый гость
 
Регистрация: 09.04.2007
Сообщений: 35
Сказал спасибо: 0
Сказали Спасибо 1 раз в 1 сообщении
RingQ на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

--string_literals_in_flash кто знает как применить что-то вроде этого только к определенному куску кода?
RingQ вне форума  
Сказали "Спасибо" RingQ
warel (28.06.2019)
 
Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу схему на "кухонная машина "АЛТАЙ-ЭЛЕКТРОН" " VictorSib Поиск схем. Делимся схемами 2 12.09.2012 23:52
[Решено] "Лорта"-"Амфитон"75У-202С сгорел выходник ДенIS Аудиотехника 10 10.12.2010 18:39
[Решено] Прошу объяснить, как работает "Блок коммутации" ВЕГА 50У-122С и "черный ящик" КУЕ012 Electric75 Аудиотехника 3 16.09.2010 20:24
Прибор, реагирующий на приближение человека ("Емкостное реле": журн. "Радио" 2010/5) С.В.П. Автоматика и аппаратура связи 24 12.07.2010 13:24
Где бы найти "IAR visualSTATE" wm_destroy Proteus, KiCAD и другие ECAD 1 30.07.2007 09:01


Часовой пояс GMT +4, время: 19:02.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.