реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> как поместить константу в память программ?, в IAR
Karl
сообщение Sep 6 2005, 10:57
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Как сделать так, чтобы при инициализации константа не переписывалась в ОЗУ, а когда надо, сразу читалась из флэшь?
В 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"
Go to the top of the page
 
+Quote Post
MALLOY2
сообщение Sep 6 2005, 11:26
Сообщение #2


Знающий
****

Группа: Validating
Сообщений: 838
Регистрация: 31-01-05
Пользователь №: 2 317



Никак. Но можно это обмануть и зделать такую вот запись

__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
Go to the top of the page
 
+Quote Post
Karl
сообщение Sep 6 2005, 11:29
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Ясно.
Go to the top of the page
 
+Quote Post
BVU
сообщение Sep 6 2005, 13:53
Сообщение #4


Профессионал
*****

Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264



Цитата(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 отреагирует на такой подход?


--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
Go to the top of the page
 
+Quote Post
Ljubitel
сообщение Sep 6 2005, 16:03
Сообщение #5


Участник
*

Группа: Свой
Сообщений: 41
Регистрация: 12-01-05
Из: St. Petersburg
Пользователь №: 1 917



Цитата(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 ("Моя любимая строка,которая располагается во флэш");
Go to the top of the page
 
+Quote Post
Karl
сообщение Sep 7 2005, 03:39
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 179
Регистрация: 4-02-05
Пользователь №: 2 429



Цитата(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
Go to the top of the page
 
+Quote Post
NickB
сообщение Sep 7 2005, 07:15
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 114
Регистрация: 22-06-04
Пользователь №: 102



Что-то у вас больно мудро все.
Используйте то что находится в библиотеках
См. заголовок pgmspace.h Все там имеется
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 19th July 2025 - 14:20
Рейтинг@Mail.ru


Страница сгенерированна за 0.03299 секунд с 7
ELECTRONIX ©2004-2016