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

 
 
> МК зависает при попытке чтения буфера, cortex-m3 lm3s
marco
сообщение Jan 8 2011, 09:24
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 12-12-10
Пользователь №: 61 580



Здравствуйте.
Имею EVB с LM3S2965 (64КБайт RAM). openocd over ftdi.
В данный момент работаю с флеш. Требуется корректно обработать ситуацию изменения состояния бита '0' -> '1'. Для этого нужно сохранить всю страницу (1Кбайт == unsigned long [32]) во временный буфер, стереть страницу, изменить требуемые данные в буфере и записать буфер на флеш.
При попытке чтения данных из буфера МК зависает. Сам проект мизерный. Игрался с размером буфера: при его резком уменьшении МК работает, но меня это не устраивает. Реализовывать буфер на самой флеш не хочу: это медленно и таким образом можно убить саму флеш.
Доберусь до работы - там в IAR попробую отладить и пробежаться по регистрам.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
sonycman
сообщение Jan 8 2011, 09:55
Сообщение #2


Любитель
*****

Группа: Свой
Сообщений: 1 864
Регистрация: 20-08-06
Из: Тольятти
Пользователь №: 19 695



Как копируете? Приведите код.
Может, проблемы с обращением к невыровненным данным? К несуществующему адресу?
Go to the top of the page
 
+Quote Post
marco
сообщение Jan 8 2011, 10:15
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 48
Регистрация: 12-12-10
Пользователь №: 61 580



Цитата(sonycman @ Jan 8 2011, 15:55) *
Как копируете? Приведите код.
Может, проблемы с обращением к невыровненным данным? К несуществующему адресу?


В прошлом посте ошибся с размерностью буфера. unsigned long [256].

CODE

#define PAGESIZE 0x400
#define MIN_ENTRY_SIZE 0x4
#define ENTRY_PER_PAGE (PAGESIZE / MIN_ENTRY_SIZE)

unsigned long ulBuf[ENTRY_PER_PAGE];

/* Save entire page to buffer */
/*
For example, cuPageAddr == 0x00030000.
Memmap: 0x00000000 - 0x0003FFFF - On-chip flash.
*/
for(usEntry = 0; usEntry < ENTRY_PER_PAGE; usEntry++)
ulBuf[usEntry] = ReadFlash(cuPageAddr + (usEntry * MIN_ENTRY_SIZE));

EraseFlashPage(cuPageAddr);

/* Редактирование буфера
........ */

for(usEntry = 0; usEntry < ENTRY_PER_PAGE; usEntry++) {
/* Data register. Здесь МК зависает. */
HWREG(FLASH_FMD) = ulBuf[usEntry];
....
}


Отлаживал по-разному. В ulBuf корректные данные. Ошибка происходит лишь при использовании достаточно большого буфера, но это всё равно не те цифры, как мне кажется, которые, например, могут исчерпать память или что-то в этом духе.

Go to the top of the page
 
+Quote Post



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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 00:41
Рейтинг@Mail.ru


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