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

求助程序异常挂起:pend element address (0x0) is not within the task's stack

TI,您好。

我碰到了一个麻烦,需要您的指导。

我在使用CC1310时,使用工程是从rfEasylinkRx创建的。

在程序中有4个任务:

1、RF接收任务,RF接收到数据后,保存到一个全局数组中。

2、数据打包任务,每秒钟检查全局数组是否有数据,有数据就进行协议打包,并将打包数据放入队列中,然后发布一个事件表示数据已经就绪。

3、串口发送任务,此任务一直等待数据就绪的事件,然后从列队中取出数据,通过串口发出。

4、内部FLASH读写任务,保存一些系统参数。

为了定位问题,已经将程序中串口接收的函数(UART_read)屏蔽,因此程序中只有串口发送,也屏蔽了内部FLASH的保存,只是上电时读取一下。

目前遇到的问题:

程序开始能正常运行,大约几小时至10多个小时后,程序产生异常。

查看汇编代码,发现程序停留在 ti_sysbios_family_arm_m3_Hwi_excHandler__I,无法跳出。

使用ROV工具检查后,发现如下错误

检查系统堆栈与任务堆栈,均未发现异常

以下是其余相关截图

以上问题已经困扰我很多天,一直未能定位到问题点,不知如何排查,如果还需要其他信息我会继续提供。

企盼您的指导,谢谢。

Viki Shi:

一般CPU exception 由以下几种原因造成:
1、堆栈溢出
2、写入空指针
3、外设模块使用不当

建议按照这边的方法排查:dev.ti.com/…/node

RUOHAN LIU:

回复 Viki Shi:

感谢您的回复,在CCS开发环境中,有什么方法能定位是什么问题造成的吗?或者有什么方法能找到相关的线索。这个代码我和我的同事已经共同梳理很多次,实在是找不到头绪。谢谢。

Viki Shi:

回复 RUOHAN LIU:

HW exception的排查方法就是我上面所附的文档

RUOHAN LIU:

回复 Viki Shi:

您好,阅读您给的文档以后,我已经定位了出问题的语句,ROV中显示如下所示。

根据PC和LR找到问题语句。

根据异常信息,初步发现是OS的代码,在将任务放入就绪列队时,入列出错了。

由于涉及到了底层的代码,请教这种情况下,我该如何继续查找原因。谢谢。

RUOHAN LIU:

回复 RUOHAN LIU:

您好,今早又出现了一次异常,与上次异常时的地址不一样,异常位置在 ti_sysbios_knl_Semaphore_post函数中,调用ti_sysbios_knl_Clock_stop时出错。
现在怀疑可能是程序中有地方在随机改写RAM,导致程序出现异常,请问这种情况有工具或者方法可以快速定位吗?

RUOHAN LIU:

回复 Viki Shi:

您好,这个问题依然没有解决,希望您能给出解决方法或者指引一下方向。 另外按照文档中的方法排查HW exception,发现memory browser窗口无法打开,请问这个可以解决吗? 期待您的回复,谢谢。

Viki Shi:

回复 RUOHAN LIU:

我研究一下,可能需要一点时间,后续再来回复

Viki Shi:

回复 Viki Shi:

建议开启kernel里的assert,然后rebuild 应用程序。这一步可以设置应用在flash中使用kernel,而不是ROM。使能assert的步骤如下:

BIOS.assertsEnabled = true;
//BIOS.assertsEnabled = false;

另外,注释掉所有会影响kernel ROM的代码,比如:

var ROM = xdc.useModule('ti.sysbios.rom.ROM');
if (Program.cpu.deviceName.match(/CC2640R2F/)) {ROM.romName = ROM.CC2640R2F;
}
else if (Program.cpu.deviceName.match(/CC26.2/)) {ROM.romName = ROM.CC26X2V2;
}
else if (Program.cpu.deviceName.match(/CC13.2/)) {ROM.romName = ROM.CC13X2V2;
}
else if (Program.cpu.deviceName.match(/CC26/)) {ROM.romName = ROM.CC2650;
}
else if (Program.cpu.deviceName.match(/CC13/)) {ROM.romName = ROM.CC1350;
}
赞(0)
未经允许不得转载:TI中文支持网 » 求助程序异常挂起:pend element address (0x0) is not within the task's stack
分享到: 更多 (0)