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

 
 
 
Reply to this topicStart new topic
> Компилятор WinAVR
makwen
сообщение Mar 16 2007, 19:53
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 3-09-06
Из: Украина
Пользователь №: 20 043



Кто-то знает, как компилятору WinAVR указать, что переменную нужно разместить в flash-память?!
Например, в компиляторе Keil (для МК51) это:
code int A;
А в IAR кажись это:
__flash int A;

А вот у WinAVR не понятно…..
Go to the top of the page
 
+Quote Post
beer_warrior
сообщение Mar 16 2007, 20:12
Сообщение #2


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

Группа: Свой
Сообщений: 1 065
Регистрация: 8-10-05
Из: Kiev, UA
Пользователь №: 9 380



Смотреть в главе Program Space String Utilities в описании. Там много всякого....
А принципе есть такой финт:
__attribute__ ((section ("имя_секции"))) например .text или .eeprom.
можно применить к любому типу данных.


--------------------
Вони шукають те, чого нема,
Щоб довести, що його не існує.
Go to the top of the page
 
+Quote Post
Tcom
сообщение Mar 21 2007, 17:53
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 360
Регистрация: 3-01-06
Из: Украина Запорожская обл.
Пользователь №: 12 792



const char a;
навсегда вписывает переменную во флеш)).
Go to the top of the page
 
+Quote Post
aesok
сообщение Mar 22 2007, 14:39
Сообщение #4


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Tcom @ Mar 21 2007, 17:53) *
const char a;
навсегда вписывает переменную во флеш)).

Наивный..... ив RAM тоже.

Анатолий.
Go to the top of the page
 
+Quote Post
neonix
сообщение Mar 22 2007, 16:29
Сообщение #5


Участник
*

Группа: Новичок
Сообщений: 27
Регистрация: 24-02-07
Пользователь №: 25 639



Почему же ? в документации четко сказано о том что const автоматом заносится в флеш.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Mar 22 2007, 16:57
Сообщение #6


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(neonix @ Mar 22 2007, 15:29) *
Почему же ? в документации четко сказано о том что const автоматом заносится в флеш.
int puts(char const* string). Откуда будет браться содержимое строки? Судя по вашей документации - из флеш, а я уверждаю, что из RAM и модификатор const лишь запрещает внутри функции изменять данные на которые указывает string.
Приведите цитату из документации и полное название документации.
P.S. речь идет об AVR(!)


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Mar 22 2007, 16:59
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 neonix - в винавре оно и во флеш и в рам(гдето прочитал, не вспомню, но точно)..
А на счёт секшенов - пробовал, на 2006-м+студия+житаг+мега16 - всё красиво, но почему то, после всех загрузок и выхода на ресет, я этой константы не наблюдал, потому решил закинуть это гиблое дело (в иаре всё просто) , и хранить в еепроме что надо...
Хотя может у меня руки кривые....но в общем получил такой резалт...
Go to the top of the page
 
+Quote Post
boez
сообщение Mar 23 2007, 15:59
Сообщение #8


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

Группа: Новичок
Сообщений: 79
Регистрация: 1-11-06
Пользователь №: 21 868



Да, не путайте народ. const хорошо работает на армах, там действительно кладется во флеш и все. На авр инициализированные константы кладутся в специальную секцию флеши, потом по старту/ресету переписываются в рам и оттуда уже юзаются. Это связано с гарвардской архитектурой аврки и неприспособленностью gcc к такого рода архитектуре. Чтобы положить константу только во флеш, в gcc применяется атрибут progmem:

const char msg[]="Hello!" __attribute__((__progmem__));

Но следует помнить что это отдельное адресное пространство! Потом для обращения к этим константам нужно обязательно применять функции из <pgmspace.h> и строковые типа printf_P ! Например c=pgm_read_byte(msg+2) или printf_P(msg). Прямые обращения не сработают.
Go to the top of the page
 
+Quote Post

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

 


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


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