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

 
 
> Как заставить помещать строки во флэш?
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
Ответов
klop
сообщение Nov 2 2006, 20:32
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Я что то не понял. По моему есть два пути
1. Строки хранятся во FLASH, перед употребление копируются в DM, и оттуда используются.
2. Строки хранятся во FLASH и прямо оттуда используются

А какие еще варианты?
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 2 2006, 20:47
Сообщение #3


Гуру
******

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



Цитата(klop @ Nov 3 2006, 03:32) *
Я что то не понял. По моему есть два пути
1. Строки хранятся во FLASH, перед употребление копируются в DM, и оттуда используются.
2. Строки хранятся во FLASH и прямо оттуда используются
А какие еще варианты?
Вы все правильно поняли, я задал вопрос - почему с моей функцией не работает " 1. Строки хранятся во FLASH, перед употребление копируются в DM, и оттуда используются.". Они у меня все в DM получаются...


--------------------
Go to the top of the page
 
+Quote Post
klop
сообщение Nov 2 2006, 21:02
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 433
Регистрация: 28-02-06
Пользователь №: 14 788



Цитата(prottoss @ Nov 2 2006, 23:47) *
Цитата(klop @ Nov 3 2006, 03:32) *
Я что то не понял. По моему есть два пути
1. Строки хранятся во FLASH, перед употребление копируются в DM, и оттуда используются.
2. Строки хранятся во FLASH и прямо оттуда используются
А какие еще варианты?
Вы все правильно поняли, я задал вопрос - почему с моей функцией не работает " 1. Строки хранятся во FLASH, перед употребление копируются в DM, и оттуда используются.". Они у меня все в DM получаются...


Хе. Так енто вопросы к компилятору(и языку C). Чтобы не забивать память объявляйте строки во flash, а перед употреблением копируйте их в DM(сами). Не очень красиво конечно но должно работать. Или напишите всетаки функцию которая будет ваши строки прямо из flash выгребать.

Сообщение отредактировал klop - Nov 2 2006, 21:10
Go to the top of the page
 
+Quote Post
prottoss
сообщение Nov 2 2006, 21:26
Сообщение #5


Гуру
******

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



Цитата(klop @ Nov 3 2006, 04:02) *
Хе. Так енто вопросы к компилятору(и языку C). Чтобы не забивать память объявляйте строки во flash, а перед употреблением копируйте их в DM(сами). Не очень красиво конечно но должно работать. Или напишите всетаки функцию которая будет ваши строки прямо из flash выгребать.
Хе, дак я про то и вопрашаю, есть ли способ заставить компилятор самому создавать константные строки-сообщения во флэш, и забивать их в мою функцию, когда она встречается в тексте программы. Вот такая конструкция, например это делает:
Код
UCHAR msg1[] = "start time at:";

usart_print((msg1)
Строка компилируется во флэш. Но когда встречается объявление msg1, компилятор генерит код, забивающий в msg1 строку из флэш... Хотелось бы чтобы это работало и без объявления msg1...


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



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

 


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


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