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

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

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

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

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

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

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

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

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

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

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

Подскажите - где я туплю? Или желаемое невозможно?
__________________
[ жизнь приятна и красива, если выпить литр пива ]
nml вне форума  
Сказали "Спасибо" nml
warel (28.06.2019)
Непрочитано 22.11.2011, 18:45  
alberio
Гражданин KAZUS.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 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,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
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.RU
 
Аватар для alberio
 
Регистрация: 08.07.2006
Сообщений: 583
Сказал спасибо: 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,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
nml на пути к лучшему
По умолчанию Re: Как в IAR C разместить "text" в флеш памяти?

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

Сообщение от nml Посмотреть сообщение
Код:
char __flash info02[]="(c)nml@tut.by\0";
А может...
Код:
 __flash const char info02[]="(c)nml@tut.by\0";
???
st_1 вне форума  
Сказали "Спасибо" st_1
warel (28.06.2019)
Непрочитано 22.11.2011, 19:31  
nml
Супер-модератор
 
Аватар для nml
 
Регистрация: 13.03.2004
Адрес: Minsk
Сообщений: 2,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
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,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
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,392
Сказал спасибо: 1,975
Сказали Спасибо 1,332 раз(а) в 580 сообщении(ях)
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, время: 11:06.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot