TI中文支持网
TI专业的中文技术问题搜集分享网站

TMS320F28377D: 增加中断后在线调试程序会跑飞

Part Number:TMS320F28377D

CPU2中的中断采用Hwi_create创建,原来程序中已有三个SCI收发中断,创建两个can中断后,CPU2程序在线调试,下载程序后会立即running。屏蔽其中任一个中断,则异常消失,请问这种现象会是因为什么引起的?

Hwi_Handle myHwi;Error_init(&eb);myHwi = Hwi_create(92, SCIC_RX_ISR_, NULL, &eb);//scia 96, scib 98, scic92if (myHwi == NULL) {System_abort("Hwi create SCIC_RX_ISR failed");}Hwi_enableInterrupt(92);Error_init(&eb);myHwi = Hwi_create(93, SCIC_TX_ISR_, NULL, &eb);//scia 97, scib 99, scic 93if (myHwi == NULL) {System_abort("Hwi create SCIC_TX_ISR failed");}Hwi_enableInterrupt(93);Error_init(&eb);myHwi = Hwi_create(99, SCIB_TX_ISR_, NULL, &eb);//scia 97, scib 99, scic 93if (myHwi == NULL) {System_abort("Hwi create SCIB_TX_ISR failed");}Hwi_enableInterrupt(99);Error_init(&eb);myHwi = Hwi_create(100, CANA0_RX_ISR_, NULL, &eb);//cana 100if (myHwi == NULL) {System_abort("Hwi create CANA0_RX_ISR failed");}Hwi_enableInterrupt(100);Error_init(&eb);myHwi = Hwi_create(101, CANA1_TX_ISR_, NULL, &eb);//cana 101if (myHwi == NULL) {System_abort("Hwi create CANA1_TX_ISR failed");}Hwi_enableInterrupt(101);Error_init(&eb);

Ben Qin:

你好,你参考过下面链接中的示例代码吗?

software-dl.ti.com/…/Hwi.html

,

Ava Guo:

是的,SCI相关的中断一直都运行正常的,已经测试一段时间了,现在需要增加can相关的功能和中断,can中断的配置是参照sci做的:

1、如果屏蔽任一个sci的中断,CPU2在线调试都是正常的,而且两个can中断也都能正常执行。

2、如果sci和can都按照上传的程序那样配置,CPU2在线调试就会出现异常。

想咨询一下,这个会是因为增加的中断程序,导致堆栈出问题了吗?

,

Ben Qin:

Ava Guo 说:想咨询一下,这个会是因为增加的中断程序,导致堆栈出问题了吗?

试过增加堆栈大小吗?

,

Ava Guo:

有通过图1界面修改过堆栈大小,将0x200改为0x800,未解决问题。

图2是异常情况下的memory allocation界面显示的内容。

图3是cmd文件配置

,

Ben Qin:

我咨询下相关资深工程师后回复您。

,

Ben Qin:

你好,下面是工程师的回复:

我认为如果是堆栈问题,它可能会崩溃。您是否看到崩溃,或者您只是错过了预期的中断或看到任务卡住了?不过,如果您担心,可以使用连接调试器的 ROV 工具来检查系统堆栈使用情况。

这可能是 CPU 带宽问题,具体取决于中断运行的频率以及每个 Hwi 函数执行所需的时间。在用户Hwis之上,SYS / BIOS可能至少为时钟周期计时器添加了一个。您还需要记住 Hwi 调度程序代码的开销。如果您想尝试计算 Hwis 使用的 CPU 周期,这里有一些基准测试。

,

Ava Guo:

您好,

Ben Qin 说:我认为如果是堆栈问题,它可能会崩溃。您是否看到崩溃,或者您只是错过了预期的中断或看到任务卡住了?

请问我应该如何查看是否崩溃?在线连接CPU2进行仿真,下载程序后,CPU2就立即进入running状态,实际上CPU2的所有程序均未执行。

Ben Qin 说:这可能是 CPU 带宽问题,具体取决于中断运行的频率以及每个 Hwi 函数执行所需的时间。在用户Hwis之上,SYS / BIOS可能至少为时钟周期计时器添加了一个。您还需要记住 Hwi 调度程序代码的开销。如果您想尝试计算 Hwis 使用的 CPU 周期,这里有一些基准测试。

这个是不是要查看新增的中断是否出现超出中断时间的现象?

,

Ben Qin:

Ava Guo 说:请问我应该如何查看是否崩溃?在线连接CPU2进行仿真,下载程序后,CPU2就立即进入running状态,实际上CPU2的所有程序均未执行。

你的意思是你想在main()停住程序但是它却直接跑起来了?如果你暂停了是什么在执行?是卡在了某处吗?能够打开ROV看看吗?如果 main() 的开头放置了一个 ESTOP0,它会在那里停止,还是在到达 main() 之前就被卡住?

Ava Guo 说:这个是不是要查看新增的中断是否出现超出中断时间的现象?

是的,它是为了大致计算在中断上下文中花费的时间百分比。然而,听起来应用程序可能不会进入 main() (更不用说 Hwi_create 调用),所以这可能不是问题.

,

Ava Guo:

1、如下图所示,在线调试,下载程序后“CPU1的状态是正常的,再手动点击运行按键即可执行CPU1程序”,但是CPU2直接就变为running,实际CPU2并没有执行程序

2、此时点击暂停按键,使CPU2暂停,会变为下图所示的状态

3、我使用的xdctools的版本为xdctools_3_32_00_06,在ROV中点击connect,会报错

4、在main中增加ESTOP0,下载程序后,CPU2还是会直接running

,

Ben Qin:

已向工程师跟进

,

Ben Qin:

Ava Guo 说:2、此时点击暂停按键,使CPU2暂停,会变为下图所示的状态

所以CPU2 正在启动并跳转到程序入口点,但卡在了 pre-main() SYS/BIOS 初始化代码中。看起来初始化 Hwi 堆栈时可能遇到问题。CPU2应用程序中堆栈放置在哪里?它有多大?增加系统堆栈大小是否会改变行为?

Ava Guo 说:我使用的xdctools的版本为xdctools_3_32_00_06,在ROV中点击connect,会报错

用ROV Classic试一下。

赞(0)
未经允许不得转载:TI中文支持网 » TMS320F28377D: 增加中断后在线调试程序会跑飞
分享到: 更多 (0)