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

 
 
 
Reply to this topicStart new topic
> iar CODE DATA "string", Надо экономить RAM
D!m@
сообщение Jan 15 2010, 09:45
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Здравствуйте.

Пишу в IAR Assembler for AVR 5.20.1 (5.20.1.50092) под ATmega128

В программе очень много работы со строками;
Например

Код
printf ("HRNOFF:   %3d  Hours",hmi->hrnoff);
printf ("HRNON:    %3d  Hours",hmi->hrnon);
printf ("UEID:\n%s",hmi->ueid);
strcpy((char *)modem_resiver,"AT+CGDCONT=1,\"IP\",\"");
strcmp((char *)modem_resiver,"\r\n+CPIN: SIM PIN\r\n\r\nOK\r\n")


Так компилятор все эти строки
Код
"HRNOFF:   %3d  Hours","HRNON:    %3d  Hours"….

кидает в RAM при чем со всего кода. Которой (RAM) потом нехватает.

Можно ли сделать, чтоб :
Код
"string"
– не загоняло в RAM эту строку и возвращало
Код
const char *
а возвращало просто адрес флеша
Код
__flesh const char *
Go to the top of the page
 
+Quote Post
KRS
сообщение Jan 15 2010, 09:49
Сообщение #2


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

Группа: Модераторы
Сообщений: 1 951
Регистрация: 27-08-04
Из: Санкт-Петербург
Пользователь №: 555



Надо printf_P использовать
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jan 15 2010, 10:22
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Цитата(KRS @ Jan 15 2010, 12:49) *
Надо printf_P использовать

да но проблема не в этом.
Код
printf_P("string");
Error[Pe167]: argument of type "char const *" is incompatible with parameter of type "char const __farflash *"

надо чтобы запись типа
Код
"string"
не инициализировало перемену в RAM типа
Код
char const []="string"
" а инициализировало как указатель на флеш память
Код
char const __farflash *
где хранится строчка.
Go to the top of the page
 
+Quote Post
Палыч
сообщение Jan 15 2010, 11:23
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 2 399
Регистрация: 10-05-06
Из: г. Новочеркасск
Пользователь №: 16 954



Галка "Place string literals and constats in initialized RAM" ?
Go to the top of the page
 
+Quote Post
D!m@
сообщение Jan 15 2010, 12:05
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 74
Регистрация: 10-04-07
Пользователь №: 26 901



Цитата(Палыч @ Jan 15 2010, 14:23) *
Галка "Place string literals and constats in initialized RAM" ?

с ней и без галки - одинаковой результат

как можно по умолчанию сделать атрибут __flash, и вернуть назад. Должно быть примерно так
Код
#pragma type_attribute=__flash
printf_P("string");
#pragma type_default=__flash


Цитата(Палыч @ Jan 15 2010, 14:23) *
Галка "Place string literals and constats in initialized RAM" ?

галка помогла ! Сначала неверно указал сегмент NEAR_C
bb-offtopic.gif
Go to the top of the page
 
+Quote Post
_Bill
сообщение Jan 27 2010, 06:03
Сообщение #6


Местный
***

Группа: Участник
Сообщений: 416
Регистрация: 18-04-06
Из: Челябинск
Пользователь №: 16 219



Цитата(D!m@ @ Jan 15 2010, 12:45) *
...

Используйте опцию --_string_literals_in_flash

Сообщение отредактировал IgorKossak - Jan 27 2010, 07:30
Причина редактирования: Бездумное цитирование
Go to the top of the page
 
+Quote Post

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

 


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


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