Цитата(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 корректные данные. Ошибка происходит лишь при использовании достаточно большого буфера, но это всё равно не те цифры, как мне кажется, которые, например, могут исчерпать память или что-то в этом духе.