大多数低端的单片机程序运行介质都是norflash, 程序片上运行,这个时候如果要执行flash_read 当前程序区,会出现读错误的问题,如何解决呢?
对,很多人可能想到了,把读flash的操作函数放到ram中执行,以MDK开发环境为例,在相应函数的声明后加上下图红色字段。
static void flash_read(unsigned int addr,char *buf,unsigned int size) __attribute__((section("FLASHREAD")));
然后,在option选项卡找到link,找到scatter file, 点击 edit,在RW data中添加 *(FLASHREAD),保存后编译,这个你去看程序的map文件,能够看到
函数执行位置已经改为内存地址了。