简单测试IAP程序是否正常的简单方法,直接用下载器将IAP和APP先下载到指定位置测试即可
以V6开发板为例进行说明:IAP程序:
APP程序:
static/image/hrline/4.gif
IAP程序比较简单,直接下载即可,按下K1按键即可跳转,跳转地址0x08100000。
IAP程序运行的时候是LED2闪烁,而APP程序运行的时候是LED4闪烁,可以简单区分状态。
static/image/hrline/4.gif
APP应用程序,下载的时候设置这里的起始地址和大小:
而对于APP程序,特别注意设置这两个地方,我们当前是把程序放在了0x08100000地址,中断向量表也放在这个位置。
static/image/hrline/4.gif
有了上面这几个步骤,就可以正常测试了。
本帖最后由 sanit 于 2018-9-26 20:21 编辑
硬汉哥,IAP中关闭了全局中断,那么如果APP中程序比较复杂,用到很多中断,这个是不是还需要在APP的开头加上__set_PRIMASK(0); ?PS:我刚进行了试验,暂时发现在IAP中__set_PRIMASK(1); APP中__set_PRIMASK(0);也不可以,因为我的IAP和APP都是使用了RTX系统,并且IAP使用了几个中断,而APP中就是LED闪烁,没有使用任何中断,调试发现在APP中进入了B .说明缺少中断函数。我现在是在IAP跳转前把IAP使用的中断全部关闭了,就可以了。也不用开关全局中断。不知道理解有没有误区?
sanit 发表于 2018-9-26 19:34
硬汉哥,IAP中关闭了全局中断,那么如果APP中程序比较复杂,用到很多中断,这个是不是还需要在APP的开头加 ...
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断,依然有效。
把IAP中所有开启的中断,逐个关闭更靠谱些。
eric2013 发表于 2018-9-27 00:39
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断 ...
明白了,老大。多谢 谢谢分享~~ eric2013 发表于 2018-9-27 00:39
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断 ...
请问一下,svc需要关闭吗, 我翻RTX的内核代码 发现有用到svc,并且调试自己的app代码 发现跳转后启动内核的os_set_env()函数运行到 svc 0x00 位置就不动了。这会是什么问题呢, 如果在跳转前没有进入到svc,跳转后在完成向量表偏移的操作后,再进入的中断 应该就是归app管了, 不该出错的呀,烦请大佬解答,目前卡在这一步了。。。 nstopb 发表于 2021-4-21 13:20
请问一下,svc需要关闭吗, 我翻RTX的内核代码 发现有用到svc,并且调试自己的app代码 发现跳转后启动内 ...
SVC中断是用户手动软件触发的,而RTX几乎所有API都是在SVC中断运行。跳转前你没有关闭全局中断吧 eric2013 发表于 2021-4-22 08:13
SVC中断是用户手动软件触发的,而RTX几乎所有API都是在SVC中断运行。跳转前你没有关闭全局中断吧
我确定是关掉的,并且清除了boot程序用到的外设中断标志。而且跳转后,在开启全局中断之前的外设配置都正常,开启中断语句之后就会出问题。 我想问一下,如果我的boot使用了systick,那在跳转前后需要做什么处理呢。我调试了一下 发现跳转到APP之后,一打开全局中断,程序就会进os内核的滴答中断,然后就出现hardfault。我看了下,os内核的滴答中断也是在arm内核的systick_handle里面实现的,那这个hardfault到底哪里来的呢 nstopb 发表于 2021-4-22 08:56
我确定是关掉的,并且清除了boot程序用到的外设中断标志。而且跳转后,在开启全局中断之前的外设配置都正 ...
你这个问题是不是在你另一个帖子里面已经解决了。 eric2013 发表于 2021-4-23 08:38
你这个问题是不是在你另一个帖子里面已经解决了。
之前没有彻底解决,现在理解了。是我的boot开启了systick,跳转后在os_init之前就进入了滴答中断。 请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗? 请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信息吗,当我把地址设置为0x8100000的时候生成的bin文件写到flash的时候,app的程序就可以跑起来,如果不设置为0x8100000就不行,(中断向量表的偏移是0x100000),这个0x8100000的起始地址还影响其他什么吗? 电子小菜鸟 发表于 2022-2-13 22:02
请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗?
不用,bin文件是不带地址信息的,所以bin文件可以下载到任意地址。
但是你的程序是否支持在任意地址下载就不得而知了。所以一般情况下,转换成bin后,要手动下载到指定地址。 电子小菜鸟 发表于 2022-2-13 22:12
请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信 ...
回复同上。 eric2013 发表于 2022-2-14 09:10
不用,bin文件是不带地址信息的,所以bin文件可以下载到任意地址。
但是你的程序是否支持在任意地址下 ...
硬汉哥,我是在keil里用fromelf.exe,点rebuild生成的bin文件。
在IROM1设置的起始地址不同时,生成的bin文件是不一样的(我用j-flash打开bin文件进行了比较),请问bin文件里的内容和IROM1有关系吗? 电子小菜鸟 发表于 2022-2-14 11:04
硬汉哥,我是在keil里用fromelf.exe,点rebuild生成的bin文件。
在IROM1设置的起始地址不同时,生成的bi ...
一般情况下,应该是一样的,有可能是编译器做了不同的对齐处理。 有个429的程序,运行了RTX,按上面的步骤改了起始地址和大小、中断向量表,程序下载到指定地址后无法运行,查看SCB->VTOR,发现依然是0x08000000,还需要修改什么地方呢 waterx3 发表于 2022-11-8 11:38
有个429的程序,运行了RTX,按上面的步骤改了起始地址和大小、中断向量表,程序下载到指定地址后无法运行, ...
你这个应该是没有正常修改吧,看下我对应的RTX例子
分享个基于STM32H7的BOOT和APP代码都使用RTX5的案例,相互之间任意跳转
https://www.armbbs.cn/forum.php?mod=viewthread&tid=97247&fromuid=58
(出处: 硬汉嵌入式论坛)
页:
[1]