Микроконтроллер AD89C51RD2, 64 КБ встроенной памяти, 1792 Б XRAM. Есть к нему прошивка в несколько тысяч строк, вот ее габариты: "Program Size: data=76.5 xdata=820 code=38246". Проблема возникает именно с областью памяти xdata. В программе есть переменные, которые я записываю в эту область памяти типа: float xdata ppk2K72 = 0.9843; float xdata ppk2K73 = 0.99698; float xdata ppk2K61 = 0.99596; float xdata ppk2K62 = 0.99849;
Таких переменных больше 100 и их обязательно надо хранить в памяти. Так вот пока эти переменные были закоментированны и не забивали память, программа работала корректно, но как только пришло время их использовать, я перепрошил свое устройство, то появились явные глюки, связанные с переполнением памяти. Программа выводит на дисплей хаотичные символы из памяти, перезаписывает некоторые другие переменные неправильными значениями... Глюк пропадает, когда я освобождаю область памяти XDATA, который у меня настроен на максимальный объем памяти: void initialization() { EA = 1; // enable interrupts CKRL = 0xFF; //Clock Reload Register for calculating core frequency CKCON0 = 0x01; // X2 mode for all peripherals CKCON1 = 0x00; // X2 for SPI AUXR |= 0x10; // XDATA = 1792 IPH0 = 0x00; // низкий уровень прерываний для всей переферии IPL0 = 0x00; //********** UART Mode 1 (8 bit) with int_BRD PCON |= 0x80; // SMOD1 = 1 SCON = 0x50; // uart in mode 1 (8 bit), REN=1 BDRCON &= ~0xEC; // BRR=0; SRC=0; BDRCON |= 0x0E; // TBCK=1;RBCK=1; SPD=1 BRL = 0xB8; // 9600 Bds at 11.092MHz ES = 1; // Enable serial interrupt BDRCON |= 0x10; // Baud rate generator run
TI = 0; RI = 0; }
|