今天我們來討論一個有關FLASH使用的問題,我們經常會在目標地址的FLASH中放置data或者code,涉及到寫FLASH以及讀取和使用的問題。
對FLASH的讀寫我們通常叫做IAP。
以上為對FLASH 目標地址數據的讀寫操作例程,主要是通過指向code的指針得到數據使用。
data使用
unsigned char code*POINT = 0X0000;
IAP_Data = *(POINT + IAP_Add);
code使用
((void (code *)(void))0x00)(); //jmp 0x00;
下面我們說下FLASH data的初始化,這要使用到重鏈接技術。
首先我們定義一個code數組 並將其初始化
unsigned int code numCode = 224; unsigned char code hanzCode[cnAry] = {0x00,0x00,0x00,0x44,0x00,0x44,0x00,0x44,0xFE,0x44,0x42,0x5F,0x42,0x44,0x42,0x44, 0x42,0x44,0x42,0x74,0x42,0xC4,0xFF,0x5F,0x02,0x44,0x04,0x44,0x08,0x44,0x10,0x44, 0x00,0x00,0x10,0x00,0x08,0x10,0x04,0x10,0x02,0x10,0x01,0x10,0x00,0xD0,0x00,0x30, 0xFF,0xFF,0x00,0x30,0x00,0xD0,0x01,0x10,0x02,0x10,0x04,0x10,0x08,0x10,0x10,0x00, 0x00,0x00,0x02,0x00,0x02,0x00,0x02,0x00,0xFF,0xFF,0x04,0x00,0x04,0x00,0x04,0xCC, 0x04,0x22,0x04,0x00,0x01,0x22,0x00,0xA3,0xFF,0xFE,0x01,0xA4,0x06,0x24,0x08,0x24, 0x00,0x00,0x80,0x08,0x81,0x88,0x46,0x88,0x28,0x88,0x10,0xFF,0x2C,0x88,0x43,0x88, 0x40,0x88,0x80,0x08,0x80,0x90,0x01,0x10,0x7F,0xFF,0x82,0x10,0x44,0x10,0x04,0x10, 0x00,0x00,0x80,0x00,0x40,0x18,0x20,0x28,0x18,0x08,0x06,0x08,0x01,0xC8,0x06,0x0F, 0x18,0x30,0x20,0x40,0x4C,0x9C,0x82,0x64,0x01,0x84,0x06,0x44,0x08,0x24,0x10,0x04, 0x00,0x00,0x40,0x00,0x43,0xFC,0x44,0x04,0x42,0x04,0x7F,0xFC,0x40,0x00,0x42,0x02, 0x44,0x04,0x4F,0xFC,0x40,0x00,0x20,0x00,0x1F,0xCC,0x20,0x42,0x40,0x40,0x00,0x40, 0x00,0x00,0x60,0x00,0x11,0x8C,0x00,0x54,0xE0,0x24,0x80,0x04,0x83,0xF4,0x84,0x04, 0xB2,0x67,0x88,0x88,0x81,0x10,0x80,0x23,0x77,0xFC,0x00,0x08,0x30,0x10,0x40,0x20};
在使用重新鏈接的方式把該數組連接到目標位置
打開M51文件
即可看到數組已經被定位到目標位置上。
程序代碼重定位的方法與code數據類似,每個函數都會生成一個?PR?UARTRXTX?MAIN標號,只需要重定位該標號即可。
你需要在MCU燒錄代碼中調用該函數,且應用都要寫到這個函數內,需要修改應用程序的話,你直接將地址區域IAP重新擦寫即可。