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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> AT91SAM7S64, Работа с памятью
Timofey
сообщение Jul 7 2006, 05:42
Сообщение #1


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Здраствуйте.

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

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

Сообщение отредактировал Timofey - Jul 7 2006, 05:56
Go to the top of the page
 
+Quote Post
Edmundo
сообщение Jul 7 2006, 06:57
Сообщение #2


Мастер
****

Группа: Свой
Сообщений: 730
Регистрация: 18-02-06
Из: Москва
Пользователь №: 14 474



Цитата(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.


--------------------
شامل
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 7 2006, 07:03
Сообщение #3


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(Edmundo @ Jul 7 2006, 12:57) *
Можно отдельные функции грузить в RAM, для этого в IAR'е есть ключевое слово __ramfunc:


Спасибо.
Но вот как сделать чтобы у меня при отключении питания и его последующем включении массив свои элементы не сбрасывал в нули?

Сообщение отредактировал Timofey - Jul 7 2006, 07:03
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 7 2006, 07:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



__no_init char massiv[1024];


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 7 2006, 07:04
Сообщение #5


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(vet @ Jul 7 2006, 13:03) *
__no_init char massiv[1024];



Спасибо огромное!!
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 7 2006, 09:41
Сообщение #6


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Цитата(vet @ Jul 7 2006, 13:03) *
__no_init char massiv[1024];


Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?
Go to the top of the page
 
+Quote Post
VladislavS
сообщение Jul 7 2006, 09:46
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 475
Регистрация: 14-04-05
Из: Москва
Пользователь №: 4 140



Цитата(Timofey @ Jul 7 2006, 12:41) *
Цитата(vet @ Jul 7 2006, 13:03) *

__no_init char massiv[1024];


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



Интересно, а как давно RAM при выключеном питании стал сохраняться?
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 7 2006, 09:50
Сообщение #8


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



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


так я и не объявлял чтобы функции работали в рам, а по умолчанию они вроде бы как во флэш? или я чего то не понимаю?
Go to the top of the page
 
+Quote Post
vet
сообщение Jul 7 2006, 09:57
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 550
Регистрация: 16-06-04
Из: Казань
Пользователь №: 32



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

Eсли же нужно всего лишь хранить константы в FLASH - ставим ключевое слово const перед переменной.


--------------------
Главная линия этого опуса ясна мне насквозь!
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 7 2006, 10:05
Сообщение #10


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



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


Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко.
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 11 2006, 05:58
Сообщение #11


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Я нашел в 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 ..... Мда .....
С одной стороны смешно, с другой я уже не заню что делать .... Подскажите, плиз, я вобще впервые программирую контроллер, как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 11 2006, 06:10
Сообщение #12


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



Чего-то я только что на сахаре поискал, похоже что во флэш вобще нельзя писать? Так получается?
Go to the top of the page
 
+Quote Post
DASM
сообщение Jul 11 2006, 06:12
Сообщение #13


Гуру
******

Группа: Свой
Сообщений: 3 644
Регистрация: 28-05-05
Пользователь №: 5 493



Цитата(Timofey @ Jul 11 2006, 09:58) *
как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....

Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять
Go to the top of the page
 
+Quote Post
Timofey
сообщение Jul 11 2006, 07:41
Сообщение #14


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

Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528



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


Спасибо.
А пример такой процедуры можно? Если она не большая .... Хотя и большую бы посмотреть бы ...
Я вроде бы где-то читал про точ то она секторная ... Там вроде бы можно какие то сектора на запись блокировать, а другие соответственно разблокировать .... Но забыл где ... sad.gif Соответственно просто не понимаю как писать эту процедуру ....

Сообщение отредактировал Timofey - Jul 11 2006, 07:43
Go to the top of the page
 
+Quote Post
condor
сообщение Jul 17 2006, 19:22
Сообщение #15


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

Группа: Свой
Сообщений: 93
Регистрация: 18-06-05
Из: Kyiv, Ukraine
Пользователь №: 6 126



Может вопрос немного не в тему, но не хочется начинать новый топик.
Что вы можете сказать о надежности записи во флэш в АТ91SAM7S?
Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора.
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 07:07
Рейтинг@Mail.ru


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