Полная версия этой страницы:
AT91SAM7S64
Timofey
Jul 7 2006, 05:42
Здраствуйте.
Подскажите пожалуйста, как у него работать спамятью? Как допустим определенный участок заблокировать на запись, сделать доступным только для чтения? Как память вобще распределена? Как сделать так, что допустим у меня есть массив и мне нужно, чтобы он хранился на флэш, дабы при отключении питания все данные в нем сохранялись? Вобщем все что связано с работой с памятью.
Насколько я понял, если не указывать специально, то программа работает во флэш-памяти. а как сделать чтобы она работала в ОЗУ?
Зарание благодарен.
Edmundo
Jul 7 2006, 06:57
Цитата(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
Jul 7 2006, 07:03
Цитата(Edmundo @ Jul 7 2006, 12:57)

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

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

__no_init char massiv[1024];
Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?
VladislavS
Jul 7 2006, 09:46
Цитата(Timofey @ Jul 7 2006, 12:41)

Цитата(vet @ Jul 7 2006, 13:03)

__no_init char massiv[1024];
Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?
Интересно, а как давно RAM при выключеном питании стал сохраняться?
Timofey
Jul 7 2006, 09:50
Цитата(VladislavS @ Jul 7 2006, 15:46)

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

В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи.
Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко.
Timofey
Jul 11 2006, 05:58
Я нашел в 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
Jul 11 2006, 06:10
Чего-то я только что на сахаре поискал, похоже что во флэш вобще нельзя писать? Так получается?
Цитата(Timofey @ Jul 11 2006, 09:58)

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

Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять
Спасибо.
А пример такой процедуры можно? Если она не большая .... Хотя и большую бы посмотреть бы ...
Я вроде бы где-то читал про точ то она секторная ... Там вроде бы можно какие то сектора на запись блокировать, а другие соответственно разблокировать .... Но забыл где ...

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

Может вопрос немного не в тему, но не хочется начинать новый топик.
Что вы можете сказать о надежности записи во флэш в АТ91SAM7S?
Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора.
Только супервизор.
Меня интересует, можно ли заблокировать Flash память SAM7 от чтения из вне т.е. чтобы после програмирования никто не мог прочитать прошивку? И можно ли будет потом переписать прошивку? Т.е. нужно запретить чтение из вне но разрешить запись.
SpiritDance
Aug 10 2006, 06:29
Security Bit смотрите в даташите
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.