eric2013 发表于 2018-9-3 12:30:01

简单测试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 19:34:48

本帖最后由 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使用的中断全部关闭了,就可以了。也不用开关全局中断。不知道理解有没有误区?

eric2013 发表于 2018-9-27 00:39:38

sanit 发表于 2018-9-26 19:34
硬汉哥,IAP中关闭了全局中断,那么如果APP中程序比较复杂,用到很多中断,这个是不是还需要在APP的开头加 ...
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断,依然有效。
把IAP中所有开启的中断,逐个关闭更靠谱些。

sanit 发表于 2018-9-27 07:45:34

eric2013 发表于 2018-9-27 00:39
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断 ...

明白了,老大。多谢

wdliming 发表于 2019-11-11 11:06:12

谢谢分享~~

nstopb 发表于 2021-4-21 13:20:26

eric2013 发表于 2018-9-27 00:39
没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断 ...

请问一下,svc需要关闭吗, 我翻RTX的内核代码 发现有用到svc,并且调试自己的app代码 发现跳转后启动内核的os_set_env()函数运行到 svc 0x00 位置就不动了。这会是什么问题呢, 如果在跳转前没有进入到svc,跳转后在完成向量表偏移的操作后,再进入的中断 应该就是归app管了, 不该出错的呀,烦请大佬解答,目前卡在这一步了。。。

eric2013 发表于 2021-4-22 08:13:59

nstopb 发表于 2021-4-21 13:20
请问一下,svc需要关闭吗, 我翻RTX的内核代码 发现有用到svc,并且调试自己的app代码 发现跳转后启动内 ...

SVC中断是用户手动软件触发的,而RTX几乎所有API都是在SVC中断运行。跳转前你没有关闭全局中断吧

nstopb 发表于 2021-4-22 08:56:35

eric2013 发表于 2021-4-22 08:13
SVC中断是用户手动软件触发的,而RTX几乎所有API都是在SVC中断运行。跳转前你没有关闭全局中断吧

我确定是关掉的,并且清除了boot程序用到的外设中断标志。而且跳转后,在开启全局中断之前的外设配置都正常,开启中断语句之后就会出问题。 我想问一下,如果我的boot使用了systick,那在跳转前后需要做什么处理呢。我调试了一下 发现跳转到APP之后,一打开全局中断,程序就会进os内核的滴答中断,然后就出现hardfault。我看了下,os内核的滴答中断也是在arm内核的systick_handle里面实现的,那这个hardfault到底哪里来的呢

eric2013 发表于 2021-4-23 08:38:49

nstopb 发表于 2021-4-22 08:56
我确定是关掉的,并且清除了boot程序用到的外设中断标志。而且跳转后,在开启全局中断之前的外设配置都正 ...

你这个问题是不是在你另一个帖子里面已经解决了。

nstopb 发表于 2021-4-25 08:49:12

eric2013 发表于 2021-4-23 08:38
你这个问题是不是在你另一个帖子里面已经解决了。

之前没有彻底解决,现在理解了。是我的boot开启了systick,跳转后在os_init之前就进入了滴答中断。

电子小菜鸟 发表于 2022-2-13 22:02:24

请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗?

电子小菜鸟 发表于 2022-2-13 22:12:33

请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信息吗,当我把地址设置为0x8100000的时候生成的bin文件写到flash的时候,app的程序就可以跑起来,如果不设置为0x8100000就不行,(中断向量表的偏移是0x100000),这个0x8100000的起始地址还影响其他什么吗?

eric2013 发表于 2022-2-14 09:10:18

电子小菜鸟 发表于 2022-2-13 22:02
请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗?

不用,bin文件是不带地址信息的,所以bin文件可以下载到任意地址。

但是你的程序是否支持在任意地址下载就不得而知了。所以一般情况下,转换成bin后,要手动下载到指定地址。

eric2013 发表于 2022-2-14 09:11:11

电子小菜鸟 发表于 2022-2-13 22:12
请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信 ...

回复同上。

电子小菜鸟 发表于 2022-2-14 11:04:00

eric2013 发表于 2022-2-14 09:10
不用,bin文件是不带地址信息的,所以bin文件可以下载到任意地址。

但是你的程序是否支持在任意地址下 ...

硬汉哥,我是在keil里用fromelf.exe,点rebuild生成的bin文件。
在IROM1设置的起始地址不同时,生成的bin文件是不一样的(我用j-flash打开bin文件进行了比较),请问bin文件里的内容和IROM1有关系吗?

eric2013 发表于 2022-2-14 14:38:39

电子小菜鸟 发表于 2022-2-14 11:04
硬汉哥,我是在keil里用fromelf.exe,点rebuild生成的bin文件。
在IROM1设置的起始地址不同时,生成的bi ...

一般情况下,应该是一样的,有可能是编译器做了不同的对齐处理。

waterx3 发表于 2022-11-8 11:38:40

有个429的程序,运行了RTX,按上面的步骤改了起始地址和大小、中断向量表,程序下载到指定地址后无法运行,查看SCB->VTOR,发现依然是0x08000000,还需要修改什么地方呢

eric2013 发表于 2022-11-9 13:11:18

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]
查看完整版本: 简单测试IAP程序是否正常的简单方法,直接用下载器将IAP和APP先下载到指定位置测试即可