Написал процедуру расчета CRC-кода программы и наткнулся на следующую проблему: обявляю указатель и присваиваю ему первый адрес памяти FLASH:
const unsigned char *Flash_ptr = (const unsigned char *)0x0001; //
далее в программу читаю данные по адресу, на который ссылается указатель, отдаю эти данные процедуре расчета CRC-кода, а указатель инкрементирую (потом) (привожу листинг):
269 do{ 270 asm ("wdr");
\ ??FLASH_test_0: \ 00000002 95A8 wdr
271 data = *Flash_ptr; 272 CRC8_calc(data);
\ 00000004 .... LDI R24, LOW(BitFld) \ 00000006 .... LDI R25, (BitFld) >> 8 \ 00000008 01FC MOVW R31:R30, R25:R24 \ 0000000A 81A4 LDD R26, Z+4 \ 0000000C 81B5 LDD R27, Z+5 \ 0000000E 910D LD R16, X+ \ 00000010 83A4 STD Z+4, R26 \ 00000012 83B5 STD Z+5, R27 \ 00000014 .... RCALL CRC8_calc 273 }while(++Flash_ptr <= (const unsigned char *)0x1FFE);
Вопрос в следующем: почему компилятор генерит код чтения из ОЗУ (команды LD, LDD) а не из FLASH (командой LPM)? В результате чего не получается посчитать CRC-код программы...
Сообщение отредактировал Василий Зыков - Mar 29 2007, 10:58
|