公告

大中华汽车电子生态圈社区并入开发者社区- 更多资讯点击此

Tip / 登入 to post questions, reply, level up, and achieve exciting badges. Know more

cross mob
Translation_Bot
Community Manager
Community Manager
Community Manager

请教大家一个问题

我现在做的boot程序在跳转app程序的时候,如果boot程序和app程序都没有使用中断的情况下可以正常跳转,但是boot程序或app程序有一方面使用中断的话就会进入到debug,boot程序或app程序单独运行时没有问题。下面按照串口中断举例。

调试状态下会卡在下图位置:

wqh98_0-1713532731467.png

wqh98_1-1713532740694.png

我想知道是哪个地方设置的不对或者少设置了什么地方。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/BootLoader-%E5%92%8C-Application%E9%97%AE%E9%A2%98/td-p/743243

0 点赞
1 解答
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我看了你的 lsl 文件, boot 和 app 的中断向量表 确实是重叠的,定义的地址是一样的,因此会发生覆盖。

boot 和 app 的 INTVEC 和 TRAPVEC 地址需要不一样,而且要隔开,建议隔开的地址最少 10k

#define LCF_INTVEC0_START   0x801F4000
#define LCF_INTVEC1_START   0x801F5000
#define LCF_INTVEC2_START   0x801F3000

#define LCF_TRAPVEC0_START  0x80000100
#define LCF_TRAPVEC1_START  0x801F6200
#define LCF_TRAPVEC2_START  0x801F6000

 

在原帖中查看解决方案

0 点赞
7 回复数
Translation_Bot
Community Manager
Community Manager
Community Manager

boot和app程序,单独运行并使用中断是没有问题的吗?

两者结合使用时,中断部分可以检查一下向量表是否被正确改变。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/BootLoader-%E5%92%8C-Application%E9%97%AE%E9%A2%98/m-p/743502

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

对,单独运行的时候是没有问题的,在app的lsl文件中已经更改了相关地址,关于向量表我应该查看哪一部分呢? 下面是app程序的lsl文件,在boot程序中跳转的地址是0x801000。

smartconx_target@Q!w2e3r4t5y6u7i8o9p0||/t5/AURIX/BootLoader-%E5%92%8C-Application%E9%97%AE%E9%A2%98/m-p/743647

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

现在发现是boot和app程序只有一个里面可以用到中断,这取决于使用AURIX™ Development。Studio第二次下载的文件。例如,首先使用ADS下载APP程序,然后使用ADS下载APP程序,此时只能在APP程序中使用中断,如果在上电运行时boot程序中使用中断则整个程序会卡住,因为这个没办法调试,所以不知道卡在哪里。相反,首先使用ADS下载APP程序,然后使用ADS软件下载boot程序,在boot中使用中断没有问题,调试发现在APP中使用中断则会进入debug,如下图所示:

wqh98_0-1713943869773.pngwqh98_1-1713943894552.png

能看到的是在进入debug之前的地址是0x800013B8

wqh98_2-1713943945464.png

这个应该怎么去理解? 因为这并不是app的地址了,首先能看到跳转0x80100是成功的,但是不明白为什么又跳回boot程序了,这个是不是引起debug的原因呢?

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

听起来像是中断向量表没有分配好,我猜测是你bootloader 和 app 的中断向量表地址重叠了,所以会出现第二次烧录后,以前的中断不能使用了。

你可以把bootloader 和 app 的链接文件都发出来。

0 点赞
lock attach
Attachments are accessible only for community members.
Translation_Bot
Community Manager
Community Manager
Community Manager

感谢回复,以下是lsl文件和app程序的lsl文件。

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

嗨,

我看了你的 lsl 文件, boot 和 app 的中断向量表 确实是重叠的,定义的地址是一样的,因此会发生覆盖。

boot 和 app 的 INTVEC 和 TRAPVEC 地址需要不一样,而且要隔开,建议隔开的地址最少 10k

#define LCF_INTVEC0_START   0x801F4000
#define LCF_INTVEC1_START   0x801F5000
#define LCF_INTVEC2_START   0x801F3000

#define LCF_TRAPVEC0_START  0x80000100
#define LCF_TRAPVEC1_START  0x801F6200
#define LCF_TRAPVEC2_START  0x801F6000

 

0 点赞
Translation_Bot
Community Manager
Community Manager
Community Manager

谢谢,确实是这样的问题,将app和boot程序的INTVEC和TRAPVEC放在不同的sector以后,问题解决了。再次感谢。

0 点赞