Перейти к содержанию
    

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

 

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

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

 

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

Изменено пользователем Timofey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Можно отдельные функции грузить в 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.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Спасибо.

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

Изменено пользователем Timofey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__no_init char massiv[1024];

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

__no_init char massiv[1024];

 

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

 

 

Интересно, а как давно RAM при выключеном питании стал сохраняться?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, а как давно RAM при выключеном питании стал сохраняться?

 

так я и не объявлял чтобы функции работали в рам, а по умолчанию они вроде бы как во флэш? или я чего то не понимаю?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

"не сбрасывал в нули при отключении и включении питания" и "сохранял данные при отключении питания" - две разные задачи.

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я нашел в 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 ..... Мда .....

С одной стороны смешно, с другой я уже не заню что делать .... Подскажите, плиз, я вобще впервые программирую контроллер, как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Чего-то я только что на сахаре поискал, похоже что во флэш вобще нельзя писать? Так получается?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить ....

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

Спасибо.

А пример такой процедуры можно? Если она не большая .... Хотя и большую бы посмотреть бы ...

Я вроде бы где-то читал про точ то она секторная ... Там вроде бы можно какие то сектора на запись блокировать, а другие соответственно разблокировать .... Но забыл где ... :( Соответственно просто не понимаю как писать эту процедуру ....

Изменено пользователем Timofey

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Может вопрос немного не в тему, но не хочется начинать новый топик.

Что вы можете сказать о надежности записи во флэш в АТ91SAM7S?

Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...