|
AT91SAM7S64, Работа с памятью |
|
|
|
Jul 7 2006, 06:57
|

Мастер
   
Группа: Свой
Сообщений: 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.
--------------------
شامل
|
|
|
|
|
Jul 7 2006, 07:03
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(Edmundo @ Jul 7 2006, 12:57)  Можно отдельные функции грузить в RAM, для этого в IAR'е есть ключевое слово __ramfunc: Спасибо. Но вот как сделать чтобы у меня при отключении питания и его последующем включении массив свои элементы не сбрасывал в нули?
Сообщение отредактировал Timofey - Jul 7 2006, 07:03
|
|
|
|
|
Jul 7 2006, 07:04
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(vet @ Jul 7 2006, 13:03)  __no_init char massiv[1024]; Спасибо огромное!!
|
|
|
|
|
Jul 7 2006, 09:41
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(vet @ Jul 7 2006, 13:03)  __no_init char massiv[1024]; Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать?
|
|
|
|
|
Jul 7 2006, 09:46
|
Местный
  
Группа: Свой
Сообщений: 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 при выключеном питании стал сохраняться?
|
|
|
|
|
Jul 7 2006, 09:50
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(VladislavS @ Jul 7 2006, 15:46)  Интересно, а как давно RAM при выключеном питании стал сохраняться? так я и не объявлял чтобы функции работали в рам, а по умолчанию они вроде бы как во флэш? или я чего то не понимаю?
|
|
|
|
|
Jul 7 2006, 10:05
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

|
Цитата(vet @ Jul 7 2006, 15:57)  В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи. Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко.
|
|
|
|
|
Jul 11 2006, 05:58
|
Частый гость
 
Группа: Участник
Сообщений: 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 ..... Мда ..... С одной стороны смешно, с другой я уже не заню что делать .... Подскажите, плиз, я вобще впервые программирую контроллер, как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....
|
|
|
|
|
Jul 11 2006, 07:41
|
Частый гость
 
Группа: Участник
Сообщений: 119
Регистрация: 3-07-06
Пользователь №: 18 528

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