硬汉嵌入式论坛

 找回密码
 立即注册
查看: 5197|回复: 17
收起左侧

简单测试IAP程序是否正常的简单方法,直接用下载器将IAP和APP先下载到指定位置测试即可

  [复制链接]

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
发表于 2018-9-3 12:30:01 | 显示全部楼层 |阅读模式
以V6开发板为例进行说明:
IAP程序: IAP.7z (3.59 MB, 下载次数: 344)
APP程序: APP.7z (3.02 MB, 下载次数: 263)


IAP程序比较简单,直接下载即可,按下K1按键即可跳转,跳转地址0x08100000。


IAP程序运行的时候是LED2闪烁,而APP程序运行的时候是LED4闪烁,可以简单区分状态。

999.png


APP应用程序,下载的时候设置这里的起始地址和大小:
888.png

而对于APP程序,特别注意设置这两个地方,我们当前是把程序放在了0x08100000地址,中断向量表也放在这个位置。
8889.png
99999.png




有了上面这几个步骤,就可以正常测试了。






回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

积分
1553
发表于 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使用的中断全部关闭了,就可以了。也不用开关全局中断。不知道理解有没有误区?

回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2018-9-27 00:39:38 | 显示全部楼层
sanit 发表于 2018-9-26 19:34
硬汉哥,IAP中关闭了全局中断,那么如果APP中程序比较复杂,用到很多中断,这个是不是还需要在APP的开头加 ...

没问题,就是这样的,因为跳转前关闭了全局中断,进入APP后,一旦使能了全局中断,你在IAP里面开启的中断,依然有效。
把IAP中所有开启的中断,逐个关闭更靠谱些。
回复

使用道具 举报

36

主题

1445

回帖

1553

积分

至尊会员

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

明白了,老大。多谢
回复

使用道具 举报

73

主题

1194

回帖

1413

积分

至尊会员

积分
1413
发表于 2019-11-11 11:06:12 | 显示全部楼层
谢谢分享~~
回复

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 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管了, 不该出错的呀,烦请大佬解答,目前卡在这一步了。。。
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2021-4-22 08:13:59 | 显示全部楼层
nstopb 发表于 2021-4-21 13:20
请问一下,svc需要关闭吗, 我翻RTX的内核代码 发现有用到svc,并且调试自己的app代码 发现跳转后启动内 ...

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

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 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到底哪里来的呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2021-4-23 08:38:49 | 显示全部楼层
nstopb 发表于 2021-4-22 08:56
我确定是关掉的,并且清除了boot程序用到的外设中断标志。而且跳转后,在开启全局中断之前的外设配置都正 ...

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

使用道具 举报

1

主题

10

回帖

13

积分

新手上路

积分
13
发表于 2021-4-25 08:49:12 | 显示全部楼层
eric2013 发表于 2021-4-23 08:38
你这个问题是不是在你另一个帖子里面已经解决了。

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

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-2-13 22:02:24 来自手机 | 显示全部楼层
请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗?
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 2022-2-13 22:12:33 来自手机 | 显示全部楼层
请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信息吗,当我把地址设置为0x8100000的时候生成的bin文件写到flash的时候,app的程序就可以跑起来,如果不设置为0x8100000就不行,(中断向量表的偏移是0x100000),这个0x8100000的起始地址还影响其他什么吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2022-2-14 09:10:18 | 显示全部楼层
电子小菜鸟 发表于 2022-2-13 22:02
请问一下,用keil直接生成bin文件的时候,需要设置irom1的起始地址吗?

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

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

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2022-2-14 09:11:11 | 显示全部楼层
电子小菜鸟 发表于 2022-2-13 22:12
请问一下,用keil直接生成app的bin文件的时候,需要设置irom1的起始地址吗?可是bin文件里不是不包含地址信 ...

回复同上。
回复

使用道具 举报

0

主题

6

回帖

6

积分

新手上路

积分
6
发表于 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有关系吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 2022-2-14 14:38:39 | 显示全部楼层
电子小菜鸟 发表于 2022-2-14 11:04
硬汉哥,我是在keil里用fromelf.exe,点rebuild生成的bin文件。
在IROM1设置的起始地址不同时,生成的bi ...

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

使用道具 举报

33

主题

203

回帖

302

积分

高级会员

积分
302
发表于 2022-11-8 11:38:40 | 显示全部楼层
有个429的程序,运行了RTX,按上面的步骤改了起始地址和大小、中断向量表,程序下载到指定地址后无法运行,查看SCB->VTOR,发现依然是0x08000000,还需要修改什么地方呢
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106840
QQ
 楼主| 发表于 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? ... 7247&fromuid=58
(出处: 硬汉嵌入式论坛)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-7 03:46 , Processed in 0.218789 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表