Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: AT91SAM7S64
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
Timofey
Здраствуйте.

Подскажите пожалуйста, как у него работать спамятью? Как допустим определенный участок заблокировать на запись, сделать доступным только для чтения? Как память вобще распределена? Как сделать так, что допустим у меня есть массив и мне нужно, чтобы он хранился на флэш, дабы при отключении питания все данные в нем сохранялись? Вобщем все что связано с работой с памятью.
Насколько я понял, если не указывать специально, то программа работает во флэш-памяти. а как сделать чтобы она работала в ОЗУ?

Зарание благодарен.
Edmundo
Цитата(Timofey @ Jul 7 2006, 09:42) *
Насколько я понял, если не указывать специально, то программа работает во флэш-памяти. а как сделать чтобы она работала в ОЗУ?

Зарание благодарен.

Можно отдельные функции грузить в RAM, для этого в IAR'е есть ключевое слово __ramfunc:

Код
The __ramfunc keyword makes a function execute in RAM. Two code segments will be created: one for the RAM execution, and one for the ROM initialization.
Timofey
Цитата(Edmundo @ Jul 7 2006, 12:57) *
Можно отдельные функции грузить в RAM, для этого в IAR'е есть ключевое слово __ramfunc:


Спасибо.
Но вот как сделать чтобы у меня при отключении питания и его последующем включении массив свои элементы не сбрасывал в нули?
vet
__no_init char massiv[1024];
Timofey
Цитата(vet @ Jul 7 2006, 13:03) *
__no_init char massiv[1024];



Спасибо огромное!!
Timofey
Цитата(vet @ Jul 7 2006, 13:03) *
__no_init char massiv[1024];


Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?
VladislavS
Цитата(Timofey @ Jul 7 2006, 12:41) *
Цитата(vet @ Jul 7 2006, 13:03) *

__no_init char massiv[1024];


Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?



Интересно, а как давно RAM при выключеном питании стал сохраняться?
Timofey
Цитата(VladislavS @ Jul 7 2006, 15:46) *
Интересно, а как давно RAM при выключеном питании стал сохраняться?


так я и не объявлял чтобы функции работали в рам, а по умолчанию они вроде бы как во флэш? или я чего то не понимаю?
vet
"не сбрасывал в нули при отключении и включении питания" и "сохранял данные при отключении питания" - две разные задачи.
В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи.

Eсли же нужно всего лишь хранить константы в FLASH - ставим ключевое слово const перед переменной.
Timofey
Цитата(vet @ Jul 7 2006, 15:57) *
В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи.


Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко.
Timofey
Я нашел в xcl файле вот такую запись:
//*************************************************************************
// Read-only segments mapped to Flash 64 K.
//*************************************************************************
-DROMSTART=00000000
-DROMEND=0000FFFF

Как я понимаю, это значит, что с флэш памятью можно работать только на чттение? Так?
В выходном файле *.map я заметил, что мой массив помещался в гораздо больший адрес (в рам). Раз больше советов я тут не услышал, то я решил сделать так:
уменьшил в файле xcl объем только читаемой флэш-памяти -

-DROMSTART=00000000
-DROMEND=0000F000


Добавил строчки:
-DDATSTART=0000F001
-DDATEND=0000FFFF

и

-Z(DATA)EXTRAM=DATSTART-DATEND


Затем в программе написал: __no_init char BUFF [150][2] @ "EXTRAM";

прошил программу и теперь у меня всегда все элементы массива равны FF ..... Мда .....
С одной стороны смешно, с другой я уже не заню что делать .... Подскажите, плиз, я вобще впервые программирую контроллер, как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....
Timofey
Чего-то я только что на сахаре поискал, похоже что во флэш вобще нельзя писать? Так получается?
DASM
Цитата(Timofey @ Jul 11 2006, 09:58) *
как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....

Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять
Timofey
Цитата(DASM @ Jul 11 2006, 12:12) *
Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять


Спасибо.
А пример такой процедуры можно? Если она не большая .... Хотя и большую бы посмотреть бы ...
Я вроде бы где-то читал про точ то она секторная ... Там вроде бы можно какие то сектора на запись блокировать, а другие соответственно разблокировать .... Но забыл где ... sad.gif Соответственно просто не понимаю как писать эту процедуру ....
condor
Может вопрос немного не в тему, но не хочется начинать новый топик.
Что вы можете сказать о надежности записи во флэш в АТ91SAM7S?
Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора.
Eduard_k
Цитата(condor @ Jul 17 2006, 22:22) *
Может вопрос немного не в тему, но не хочется начинать новый топик.
Что вы можете сказать о надежности записи во флэш в АТ91SAM7S?
Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора.

Только супервизор.

Меня интересует, можно ли заблокировать Flash память SAM7 от чтения из вне т.е. чтобы после програмирования никто не мог прочитать прошивку? И можно ли будет потом переписать прошивку? Т.е. нужно запретить чтение из вне но разрешить запись.
SpiritDance
Security Bit смотрите в даташите
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.