关于IAP与APP互相跳转的实现(4)
发布时间:2021-06-08
发布时间:2021-06-08
1. 改IAP程序,加上加载APP程序功能。就是按下某个键时,从U盘读取APP程
序,并把它写到FLASH中。这个参考附件。
2. 在APP程序中,选择输出HEX文件。目前来说,HEX文件是比较方便处理的文
件。
点魔术棒,打开目标选项设置。
选Output选项卡,Create HEX File打上勾。
编译,生成HEX文件。
3. 把APP。HEX拷到U盘中,然后用IAP程序加载。
第六步:让IAP区分是复位运行,还是从APP转过来运行的。
打开你的启动文件(我这里是stm32f10x_vector.s),看一下它里面栈空间是多大,堆空间是多大。在IAP程序主函数第一句设个断点,记下此时的SP值,一般这个值比 栈+堆+全局变量还要大一些。在这个值+8之上的内部RAM空间,是程序用不上的。所以可以让APP程序在RAM空间的顶端设置一个标志,然I后让AP程序去根据这个标志来区别复位运行、从APP转过来的运行。
区分IAP的运行方式有一个特殊的用途,那就是从APP程序中,跳转IAP程序,来更新APP程序。这是真正的在线升级。
最后,我总结一下,要做IAP和APP间的互相跳转,要注间以下几点:
1. APP程序是放在FLASH的中间位置运行的,所以在编译、下载、调试时,都要指定
它的入口(本例是0X08010000)。具体实现就是在魔术棒中的设置。
2. 程序可以是从另外一个程序转来的,而另外一个程序的RCC,NVIC设置不可知,所
以必须在初始化时,恢复RCC,NVIC为复位状态,并且设置正确的NVIC向量表。
3. 在要跳到别的程序之前,要恢复NVIC为复位状态,防止在跳转过程中出现中断。
4. 如果IAP要判断是复位开始运行的,还是从APP跳转过来的,应该用程序启动部分
不会被改变的内存、外存存储一个标志,用它来判定从哪跳来的。
上一篇:南山植物园导游词
下一篇:ISO14001内审 培训教材