This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] CCS/CC2640R2F:如果在存储区中声明大于80字节的数组、器件会进入 Hwi_excel 处理程序

Guru**** 2595805 points
Other Parts Discussed in Thread: SYSBIOS, CC2640R2F

请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/bluetooth-group/bluetooth/f/bluetooth-forum/611160/ccs-cc2640r2f-device-enters-hwi_exchandler-if-declaring-an-array-larger-than-80-bytes-on-the-store

器件型号:CC2640R2F
Thread 中讨论的其他器件:SYSBIOS

工具/软件:Code Composer Studio

你好。

我在 CC2640R2F 崩溃和输入 ti_sysbios_family_arm_m3_Hwi_exHandler __i 时遇到问题()。

如果我在空闲存储区中声明大小为100的变量、就会发生这种情况

char temp_buf[100]; 

并使用它、如下所示:

静态空 so_func (void)
{
temp_buf[0]='a';
} 

这是我发现的一些相关寄存器

xPSR0x21000003存储中断使能状态和关键处理器状态信号[内核]
N 的状态0存储指令结果的位31。 换句话说、存储数字
Z 的符号0如果运算结果为零、则设为1、否则保持为0
C1如果进位位发生在加法或减法中的借位位、则存储进位位的值。 在移位中存储移出的最后一位。
五0如果溢出发生
Q、则设为10指示增强型 DSP 指令
ICI_IT_200中是否发生了溢出/饱和ICI/IT -位26位25
T1拇指状态
RESV00000000保留
ICI_IT_1000000ICI/IT -位15位10
RESV20被保留
的异常000000011异常号

CPU_SCSCortex-M 的系统控制空间(SCS)

HFSR0x40000000硬件故障状态该寄存器用于获取有关激活硬件故障处理程序的事件的信息。 该寄存器是写清零寄存器。 这意味着向某个位写入1会将该位清零。 [已映射的存储器]
DEBUGEVT0如果存在与调试相关的故障、则该位被置位。 这只有在停止调试未启用时才可行。 对于启用监视器的调试、只有当当前优先级高于监视器时、才会发生 BKPT。 当停止和监视器调试都被禁用时、只会发生未被忽略的调试事件(最小值为 BKPT)。 更新了调试故障状态寄存器。
强制1由于接收到可配置故障而激活硬故障、并且由于优先级或由于禁用可配置故障而无法激活。 然后、硬件故障处理程序必须读取其他故障状态寄存器以确定原因。
保留200000000000000000000000000000000000000000000000000000000软件不应依赖保留的值。 写入除复位值以外的任何其他值都可能导致未定义的行为。
VECTTBL0如果由于异常处理(总线故障)时读取向量表而产生故障、该位就会被置位。 这种情况始终是硬故障。 返回 PC 指向被挤占的指令。
保留00软件不应依赖保留的值。 写入除复位值以外的任何其他值都可能导致未定义的行为。

您能帮我找出此故障的原因吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好!

    您是否检查了任务堆栈溢出?

    祝你一切顺利
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    尝试 CCS "Stack Usage"视图不起作用:

    “生成 XML 文件作业”期间发生内部错误。
    
    java.lang.StackOverflowError 

    编辑了原始项目,再添加1个任务:

    iCall_MAX_NUM_ENDICES=7 (之前为6)
    ICALL_MAX_NUM_TASKs=4 (之前为3)
    OSAL_MAX_NUM_PROXY 任务=4 (之前为3) 

    这可能增加了 TIRTOS 任务堆栈的内存使用量、但我认为这应该是在.map 文件中声明的可预测静态分配。

    将 temp_buf 的存储空间从100减少到32、使硬故障消失、存储器使用量为:11、864字节、可用空间为5544字节。

    CCS 中除了"Stack usage"视图之外、还可以使用什么其他工具来检查堆栈状态?

    谢谢

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    当 temp_buf 的长度为128字节时、这是崩溃时的存储器映射

    当 temp_buf 的长度为32个字节(无崩溃)时、在访问 tempo_buf 之前、对存储器映射执行此操作

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    另一项测试:将 temp_buf 更改为1024 字节会导致崩溃。

    这是本例中的存储器映射段

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我们可以看到、在崩溃的情况下、temp_Buf 被放置在'task'和'taskStack'之间的内存中、而在其他情况下、'task'和'taskStack'在内存中相邻。