C语言 对FLASH 数据及程序 操作方法


今天我们来讨论一个有关FLASH使用的问题,我们经常会在目标地址的FLASH中放置data或者code,涉及到写FLASH以及读取和使用的问题。

对FLASH的读写我们通常叫做IAP。

IAP_CODE

以上为对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};

在使用重新链接的方式把该数组连接到目标位置

link

打开M51文件

m51

即可看到数组已经被定位到目标位置上。

程序代码重定位的方法与code数据类似,每个函数都会生成一个?PR?UARTRXTX?MAIN标号,只需要重定位该标号即可。

你需要在MCU烧录代码中调用该函数,且应用都要写到这个函数内,需要修改应用程序的话,你直接将地址区域IAP重新擦写即可。


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM