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.

[参考译文] TM4C1290NCZAD:无效的 EPSR 和指令组合

Guru**** 2463330 points
Other Parts Discussed in Thread: SYSBIOS

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1479005/tm4c1290nczad-invalid-epsr-and-instruction-combination

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

工具与软件:

我正在使用一个 TI RTOS 应用程序、执行大约25项任务、平均 CPU 负载小于20%。 最近我发现了一个问题、即应用程序最终出现异常、如下所示:

ti.sysbios.family.arm.m3.Hwi: line 1095: E_hardFault: FORCED
ti.sysbios.family.arm.m3.Hwi: line 1207: E_usageFault: INVSTATE: Invalid EPSR and instruction combination
Exception occurred in ISR thread at PC = 0x2002afdc.
Core 0: Exception occurred in ThreadType_Hwi.
Hwi name: {unknown-instance-name}, handle: 0x20007058.
Hwi stack base: 0x20032098.
Hwi stack size: 0x800.
R0 = 0x00000022  R8  = 0x0008ce4c
R1 = 0x2002afdc  R9  = 0x0008baea
R2 = 0x40065000  R10 = 0x0008cfc0
R3 = 0x00059f3d  R11 = 0x0008cfb4
R4 = 0x200297f0  R12 = 0x17380300
R5 = 0x00000006  SP(R13) = 0x20032820
R6 = 0x00000001  LR(R14) = 0x00062fbb
R7 = 0x00000040  PC(R15) = 0x2002afdc
PSR = 0x80000062
ICSR = 0x00423003
MMFSR = 0x00
BFSR = 0x00
UFSR = 0x0002
HFSR = 0x40000000
DFSR = 0x00000001
MMAR = 0xe000ed34
BFAR = 0xe000ed38
AFSR = 0x00000000
.

我能够相当可靠地重现例外情况。 确定了以下几点:
-该错误与访问受互斥体保护的资源有关,
-使用 sleep 语句更改任务的计时行为,而互斥体是发出异常的触发器,但发生的时间不能确定。

然而、原则上允许无限期阻塞任务。 不过、例外情况是在一段时间后发生的、我不能解释原因是什么。 PC 的地址也引起了一些问题。

你有什么想法导致这样一个例外吗?

使用的 TI SDK 版本:

TI RTOS TIVAC 2.16.01.14.
TI 驱动程序 TIVAC 2.16.01.13
SYSBIOS 6.45.02.31.
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好!

    [报价用户 id="643751" url="~/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1479005/tm4c1290nczad-invalid-epsr-and-instruction-combination "]
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.
    17.
    18.
    19.
    20.
    21.
    22.
    23.
    24.
    25.
    HWI 堆栈基址:0x20032098。
    HWI 堆栈大小:0x800。
    R0 = 0x00000022 R8 = 0x0008ce4c
    R1 = 0x2002afdc R9 = 0x0008baea
    R2 = 0x40065000 R10 = 0x0008cfc0
    R3 = 0x00059f3d R11 = 0x0008cfb4
    R4 = 0x200297f0 R12 = 0x17380300
    R5 = 0x00000006 SP (R13)= 0x20032820
    R6 = 0x00000001 LR (R14)= 0x00062fbb
    R7 = 0x00000040 PC (R15)= 0x2002afdc
    PSR = 0x80000062
    ICSR = 0x00423003
    MMFSR = 0x00
    BFSR = 0x00
    UFSR = 0x0002
    HFSR = 0x40000000
    DFSR = 0x00000001
    MMAR = 0xe000ed34
    BFAR = 0xe000ed38
    AFSR = 0x00000000
    [报价]

    您似乎有一个使用故障、该故障升高到硬故障。 用法故障以某种方式是由于处理器尝试执行一个未定义指令。  

    用法故障。 使用故障是一个异常、它的发生是由于指令相关故障
    执行、例如:
    –一条未定义的指令
    –非法的未对齐访问
    –指令执行时的状态无效

    我将建议你使用 ROV 来查看是否有任何内存问题、并且增加系统堆栈和堆来查看这是否起作用。 首先、您可以将系统堆和堆栈的数量翻倍。 如果问题解决了、可以对堆和堆栈分配的最大量进行微调。 请参阅下面的、在这里可以在.cfg 文件中分配运行时堆和堆栈。  

    另请参阅以下两篇有关如何调试 TI-RTOS 应用程序异常的文章。