|
Как заставить помещать строки во флэш? |
|
|
|
Nov 2 2006, 19:49
|

Гуру
     
Группа: Свой
Сообщений: 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В. Надеюсь, я понятно все объяснил. Спасибо
--------------------
|
|
|
|
|
 |
Ответов
|
Nov 2 2006, 21:02
|
Местный
  
Группа: Свой
Сообщений: 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
|
|
|
|
|
Nov 2 2006, 21:26
|

Гуру
     
Группа: Свой
Сообщений: 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...
--------------------
|
|
|
|
Сообщений в этой теме
prottoss Как заставить помещать строки во флэш? Nov 2 2006, 19:49    klop Цитата(prottoss @ Nov 3 2006, 00:26) Хе, ... Nov 2 2006, 21:43     prottoss Цитата(klop @ Nov 3 2006, 04:43) Нет в ло... Nov 2 2006, 21:55 Andy_F Может быть, поможет подключение pgmspace ? Т.е., п... Nov 2 2006, 22:07 prottoss Цитата(Andy_F @ Nov 3 2006, 05:07) Может ... Nov 2 2006, 22:16 IgorKossak Вобщем то ключевые слова signed и unsigned обычно ... Nov 3 2006, 07:48 prottoss Цитата(IgorKossak @ Nov 3 2006, 14:48) Во... Nov 3 2006, 07:53  IgorKossak Цитата(prottoss @ Nov 3 2006, 09:53) Ну а... Nov 3 2006, 07:57   prottoss Цитата(IgorKossak @ Nov 3 2006, 14:57) Ци... Nov 3 2006, 08:30 IgorKossak Определяете строки везде одинаково?
Есть разница м... Nov 3 2006, 08:55 prottoss Цитата(IgorKossak @ Nov 3 2006, 15:49) Оп... Nov 3 2006, 08:59
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|