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

 
 
> Как заставить помещать строки во флэш?
prottoss
сообщение Nov 2 2006, 19:49
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Всем доброго времени суток!

Столкнулся с такой проблемой: для отладки пользую USART и посылаю собственной функцией usart_print(uchar *str) сообщения вида:

Код
usart_print(("start time at:")
и т.п.

Все бы хорошо, функция отлаженна давно и работает безукоризненно. Но, когда у меня накопилось, в отлаживаемом в данный момент проекте, много сообщений у меня начались глюки в программе выражающиеся, в основном, в том, что программа стала вылетать на reset. После отладки в AVRStudio, оказалось, что добрая часть SRAM заполненна именно моими сообщениями. Установка галки в опциях компилера "Place aggregate initializers in flash memory" ничего не дает. Строки просто дублируются в памяти программ и все. В SRAM они так же присутствуют (((. Конечно, можно все сообщения поместить в отдельные массивы с префиксом __flash, создать еще одну функцию типа usart_print_flash(uchar __flash * str) и делать записи типа
Код
usart_print_flash(msg1)
но это не очень удобно и не очень наглядно. Может быть есть какая то возможность указать компилятору, чтобы динамически создаваемые строки он помещал во флэш, или создавал буфер на лету? ИАР версии 4.10В. Надеюсь, я понятно все объяснил. Спасибо


--------------------
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
IgorKossak
сообщение Nov 3 2006, 07:48
Сообщение #2


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Вобщем то ключевые слова signed и unsigned обычно применяются к обьектам, содержащим по смыслу числовые значения.
Что же касается символьных обьектов и строк на их основе, то общепринятым типом в этом случае является просто char.
Поэтому и обьявления в pgmspace.h вполне оправданные и корректные.
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 3 2006, 07:53
Сообщение #3


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(IgorKossak @ Nov 3 2006, 14:48) *
Вобщем то ключевые слова signed и unsigned обычно применяются к обьектам, содержащим по смыслу числовые значения.
Что же касается символьных обьектов и строк на их основе, то общепринятым типом в этом случае является просто char.
Поэтому и обьявления в pgmspace.h вполне оправданные и корректные.
Ну а по поводу первого моего поста что можете сказать? Есть какие нибудь пути решения, кроме pgmspace?


--------------------
Go to the top of the page
 
+Quote Post
IgorKossak
сообщение Nov 3 2006, 07:57
Сообщение #4


Шаман
******

Группа: Модераторы
Сообщений: 3 064
Регистрация: 30-06-04
Из: Киев, Украина
Пользователь №: 221



Цитата(prottoss @ Nov 3 2006, 09:53) *
Ну а по поводу первого моего поста что можете сказать? Есть какие нибудь пути решения, кроме pgmspace?

pgmspace на мой взгляд - очень приемлемое решение.
Я сам довольно часто (чуть не сказал "всегда") им пользуюсь. Да и зачем писать самому если кто-то уже написал?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 3 2006, 08:30
Сообщение #5


Гуру
******

Группа: Свой
Сообщений: 2 720
Регистрация: 24-03-05
Пользователь №: 3 659



Цитата(IgorKossak @ Nov 3 2006, 14:57) *
Цитата(prottoss @ Nov 3 2006, 09:53) *

Ну а по поводу первого моего поста что можете сказать? Есть какие нибудь пути решения, кроме pgmspace?

pgmspace на мой взгляд - очень приемлемое решение.
Я сам довольно часто (чуть не сказал "всегда") им пользуюсь. Да и зачем писать самому если кто-то уже написал?
Дело еще вот в чем, на самом деле некторые строки кмпилятор все таки помещает во флэш а некоторые нет... Например все строки, которые в майн и еще в одном модуле он поместил в память данных, а в другом модуле этого же проекта он их засунул в память программ, хотя между первым, вторым и майн ни какой разницы в подключаемых хедерах или еще каком шаманстве нет. По этому то я и обескуражен логикой компилятора! Как он решает, ЧТО поместить во флэш а что в память данных? Естественно, что все строки разные - это сервисные сообщения.

...Полные непонятки (((


--------------------
Go to the top of the page
 
+Quote Post



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

 


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


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