Announcements

Help us improve the Power & Sensing Selection Guide. Share feedback

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

cross mob
wqh98
Level 1
Level 1
5 replies posted First like given 10 sign-ins

请教大家一个问题

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

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

wqh98_0-1713532731467.png

wqh98_1-1713532740694.png

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

0 Likes
1 Solution
eric_zhao
Level 4
Level 4
First like given First question asked 25 sign-ins

Hi,

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

boot 和 app 的 INTVEC 和 TRAPVEC 地址需要不一样,而且要隔开,建议隔开的地址至少要在不同的

sector,  否则app烧录后也会擦除掉boot的向量表。

 

#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

 

 

View solution in original post

0 Likes
7 Replies
Di_W
Moderator
Moderator
Moderator
500 solutions authored 1000 replies posted 250 solutions authored

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

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

lock attach
Attachments are accessible only for community members.
wqh98
Level 1
Level 1
5 replies posted First like given 10 sign-ins

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

0 Likes
wqh98
Level 1
Level 1
5 replies posted First like given 10 sign-ins

现在发现是boot和app程序只有一个里面可以用到中断,这取决于使用AURIX™ Development Studio第二次下载的文件。例如,首先使用ADS下载boot程序,然后使用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的地址了,首先能看到跳转0x80100000是成功的,但是不明白为什么又跳转回boot程序了,这个是不是引起debug的原因呢?

0 Likes
eric_zhao
Level 4
Level 4
First like given First question asked 25 sign-ins

Hi,

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

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

0 Likes
lock attach
Attachments are accessible only for community members.

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

0 Likes
eric_zhao
Level 4
Level 4
First like given First question asked 25 sign-ins

Hi,

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

boot 和 app 的 INTVEC 和 TRAPVEC 地址需要不一样,而且要隔开,建议隔开的地址至少要在不同的

sector,  否则app烧录后也会擦除掉boot的向量表。

 

#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 Likes

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

0 Likes