Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как поместить константу в память программ?
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Karl
Как сделать так, чтобы при инициализации константа не переписывалась в ОЗУ, а когда надо, сразу читалась из флэшь?
В Options/ C/C++ compiler / Code убрал гарочку "Place stringliterals and cjnstants in initialized RAM" - компилятор стал выдавать ошибку

Error[e16]: Segment NEAR_C (size: 0x4 align: 0) is too long for segment definition. At least 0x4 more bytes needed. The
problem occurred while processing the segment placement command
"-Z(DATA)NEAR_C=_..X_EXT_ROM_BASE:+_..X_EXT_ROM_SIZE", where at the moment of placement the available
memory ranges were "DATA:10ff--1"
MALLOY2
Никак. Но можно это обмануть и зделать такую вот запись

__flash static unsigned char strLOGO[] = "Hello Word"

а скажем PutChar обьявить :

unsigned int PutChar (__flash unsigned char * data , unsigned int len );

а вызывать

PutChar (strLOGO,sizeof(strLOGO));

далее можно немного упростить создав такой вот макрос

#define MPutChar(data) PutChar (data,sizeof(data));

и в итоге имеем в программе

MputChar(strLOGO);

Одyим словом нельзя в ИАРе зделать так PutChar("Hell word") строки ВСЕГДА распологаются в RAM
Karl
Ясно.
BVU
Цитата(MALLOY2 @ Sep 6 2005, 15:26)
Никак. Но можно это обмануть и зделать такую вот запись

__flash static unsigned char strLOGO[]  = "Hello Word"

а скажем PutChar  обьявить :

unsigned int PutChar (__flash unsigned char * data , unsigned int len );

а вызывать

PutChar (strLOGO,sizeof(strLOGO));

далее можно немного упростить создав такой вот макрос

#define MPutChar(data)  PutChar (data,sizeof(data));

и в итоге имеем в программе

MputChar(strLOGO);

Одyим словом нельзя в ИАРе зделать так PutChar("Hell word") строки ВСЕГДА распологаются в RAM
*


Вопрос к MALLOY2 :
а если написать модуль вывода строки на ASM и объявить строку, тоже на ASM, как IAR отреагирует на такой подход?
Ljubitel
Цитата(MALLOY2 @ Sep 6 2005, 14:26)
Одyим словом нельзя в ИАРе зделать так PutChar("Hell word") строки ВСЕГДА распологаются в RAM
*


Однако в опциях проекта в закладке "C compiler" -> "Extra Options"
Ставим галочку "Use command line options"
Набираем строчку
--string_literals_in_flash
И спокойно используем
или библиотечную puts(const char *);
или свою PutString (unsigned char __flash* string);
в виде PutString ("Моя любимая строка,которая располагается во флэш");
Karl
Цитата(Ljubitel @ Sep 6 2005, 21:03)
Цитата(MALLOY2 @ Sep 6 2005, 14:26)
Одyим словом нельзя в ИАРе зделать так PutChar("Hell word") строки ВСЕГДА распологаются в RAM
*


Однако в опциях проекта в закладке "C compiler" -> "Extra Options"
Ставим галочку "Use command line options"
Набираем строчку
--string_literals_in_flash
И спокойно используем
или библиотечную puts(const char *);
или свою PutString (unsigned char __flash* string);
в виде PutString ("Моя любимая строка,которая располагается во флэш");
*


Это уже лучше smile.gif
NickB
Что-то у вас больно мудро все.
Используйте то что находится в библиотеках
См. заголовок pgmspace.h Все там имеется
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2024 Invision Power Services, Inc.