如何让MCU程序不走“平常路”
时间:01-26 10:55 阅读:1181次
*温馨提示:点击图片可以放大观看高清大图
简介:有的时候我们需要在RAM中测试程序,这时就不能再让MCU走“平常路”了。但是在通常情况下程序都是下载到flash中的,所以编译下载工具的默认设置都会将程序下载到flash中。如何才能不走这个“平常路”呢?我们可以借助Keil工具。
MCU的内部存储区一般有两个部分:flash和RAM,它们最大的区别就是:存于flash中的数据掉电不会丢失,而存在RAM中的数据掉电后便会丢失。我们试想下,当我们将MCU程序下载到RAM中,正常运行,当MCU掉电后再次上电程序就不能正常运行了,然后就需要重新下载才可以,这样岂不是很不爽。因此我们一般将程序下载到flash中,防止掉电后程序不丢失,保证在下次上电后程序能够正常运行。RAM一般用来存放临时数据,掉电丢失也无所谓。
有的时候我们需要在RAM中测试程序,这时就不能再让MCU走“平常路”了。但是在通常情况下程序都是下载到flash中的,所以编译下载工具的默认设置都会将程序下载到flash中。如何才能不走这个“平常路”呢?我们可以借助Keil工具。
打开一个完整的工程,进行编译,编译完成后会生成一个map文件,如图1所示,用记事本方式打开,或在keil工程中双击工程目标文件,同样也会在keil中打开map文件,操作如图2所示。在图2中可以看到platinum.c文件生成的platinum.o文件编译分配的地址为0x000000d4,在在MCU的flash中的。如果需要将platinum.c文件中的代码都下载到RAM中应该怎么办呢?接下来就让我们实操一把,嘿嘿。
图1 生成的map文件
图2 修改前的map文件
鼠标右击platinum.c文件,然后再点击“option for File ‘platinum.c’…”,操作如图3所示。
图3 打开platinum.c属性操作
完成操作后将进入platinum.c的属性界面,修改“Code/Const”选项和“Zero Initialited Data”选项为“IRAM1 [0x1FFFFE00-0x200005FF]”,然后点击“OK”保存,具体操作如图4所示。
图4 修改platinum.c的属性
编译工程,编译后打开map文件,如图5所示,可以看到platinum.c文件生成的platinum.o文件编译分配的地址变为0x1ffffe00,通过查看KL03的用户手册可知这个地址已经属于RAM的地址空间了。如果此时下载程序,platinum.c文件中的程序将被下载到RAM中。
图5 修改后的map文件
下面将程序下载到MCU中进行验证。下载程序后程序正常运行,断电后再次上电发现MCU程序无法正常运行,再次证实了程序被下载到了RAM中。