Timofey_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 (изменено) · Жалоба Здраствуйте. Подскажите пожалуйста, как у него работать спамятью? Как допустим определенный участок заблокировать на запись, сделать доступным только для чтения? Как память вобще распределена? Как сделать так, что допустим у меня есть массив и мне нужно, чтобы он хранился на флэш, дабы при отключении питания все данные в нем сохранялись? Вобщем все что связано с работой с памятью. Насколько я понял, если не указывать специально, то программа работает во флэш-памяти. а как сделать чтобы она работала в ОЗУ? Зарание благодарен. Изменено 7 июля, 2006 пользователем Timofey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Edmundo 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба Насколько я понял, если не указывать специально, то программа работает во флэш-памяти. а как сделать чтобы она работала в ОЗУ? Зарание благодарен. Можно отдельные функции грузить в 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_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 (изменено) · Жалоба Можно отдельные функции грузить в RAM, для этого в IAR'е есть ключевое слово __ramfunc: Спасибо. Но вот как сделать чтобы у меня при отключении питания и его последующем включении массив свои элементы не сбрасывал в нули? Изменено 7 июля, 2006 пользователем Timofey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба __no_init char massiv[1024]; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба __no_init char massiv[1024]; Спасибо огромное!! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба __no_init char massiv[1024]; Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
VladislavS 39 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба __no_init char massiv[1024]; Хм .... так и объявил, но массив хранится максимум секунд 7! А потом опять случайные числа там оказываются ... Может что то еще надо прописать? Интересно, а как давно RAM при выключеном питании стал сохраняться? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба Интересно, а как давно RAM при выключеном питании стал сохраняться? так я и не объявлял чтобы функции работали в рам, а по умолчанию они вроде бы как во флэш? или я чего то не понимаю? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vet 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба "не сбрасывал в нули при отключении и включении питания" и "сохранял данные при отключении питания" - две разные задачи. В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи. Eсли же нужно всего лишь хранить константы в FLASH - ставим ключевое слово const перед переменной. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 7 июля, 2006 Опубликовано 7 июля, 2006 · Жалоба В случае SAM7 вторая задача решается подключением внешней EEPROM или FRAM. Или манипуляциями с внутренней FLASH, если не критично её ограничение на число циклов перезаписи. Меня как раз интересует вторая задача и манипуляции с внутренней флэш ... Просто в этом массиве должны храниться данные об устройстве и перезаписываться они будут крайне редко. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Я нашел в 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_219 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба Чего-то я только что на сахаре поискал, похоже что во флэш вобще нельзя писать? Так получается? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
DASM 0 11 июля, 2006 Опубликовано 11 июля, 2006 · Жалоба как мне сделать так, чтобы у меня при выключении питания все значения массива сохранялись, чтобы включил - программа могла считать какие то необходимые значения, потом при работе могла их изменить .... Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Timofey_219 0 11 июля, 2006 Опубликовано 11 июля, 2006 (изменено) · Жалоба Писать свою процедуру работы с флеш памятью на запись. Она секторная, но вобщем-то ничего сложного нет, если только ресурс по кол-ву записи не слишком большой требуется. А если иначе - то внешняя eeprom или fram :-( Ну или extram с батарейкой, если не очень стремно все потерять Спасибо. А пример такой процедуры можно? Если она не большая .... Хотя и большую бы посмотреть бы ... Я вроде бы где-то читал про точ то она секторная ... Там вроде бы можно какие то сектора на запись блокировать, а другие соответственно разблокировать .... Но забыл где ... :( Соответственно просто не понимаю как писать эту процедуру .... Изменено 11 июля, 2006 пользователем Timofey Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
condor 0 17 июля, 2006 Опубликовано 17 июля, 2006 · Жалоба Может вопрос немного не в тему, но не хочется начинать новый топик. Что вы можете сказать о надежности записи во флэш в АТ91SAM7S? Возможен ли такой случай: при записи во флэш просядет питание до 2В, тогда brown out не сбросит проц, но флеш уже нормально не запишется. Все пройдет незамеченным и прога будет думать, что записала правильные данные. Можно как-то избежать такой ситуации? Кроме использования внешнего супервизора. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться