|
Делаю некий регистратор событий, для чего к MB90F583 приделал 1М внешнего ОЗУ с адреса 0x100000.
Проблема возникла при заполнении таблицы событий начальными значениями. Таблица существенно больше 64 К и запись, расположенная на переходе с одного 64 К банка на следующий инициализируется совсем не так, как надо. Это замечено и на железе, и симулятор Softune показывает то же самое.
На приведенном примере в симуляторе можно увидеть, что запись по адресу 0x110000 совсем не такая, как соседние (вместо 11 22 33 33 33 33 там 33 33 33 33 33 33). Softune v3.4. Оптимизация отключена.
//----- nvram.c -----
#pragma section FAR_DATA=NVRAM, locate=0x100000
#pragma section DCLEAR=NVRAM_DCLEAR
__far volatile unsigned long EventBeg;
__far volatile unsigned long EventEnd;
//----- nvram.h -----
__far volatile extern unsigned long EventBeg;
__far volatile extern unsigned long EventEnd;
//----- main.c -----
#include "nvram.h"
typedef struct
{
unsigned char Code;
unsigned char Item;
unsigned long Time;
} SEvent; //структура записи события
void main(void)
{
__far SEvent *CurEvent;
EventBeg = 0x100010;
EventEnd = EventBeg + 50000 * sizeof(SEvent); //размер-50000 записей
//инициализация таблицы событий
CurEvent = (__far SEvent*)EventBeg;
while ((unsigned long)CurEvent <= EventEnd)
{
CurEvent->Code = 0x11;
CurEvent->Item = 0x22;
CurEvent->Time = 0x33333333;
CurEvent++;
}
while (1);
}
E-mail: info@telesys.ru