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.

[参考译文] RTOS/TM4C1294NCPDT:遇到 Hwi 强制硬故障

Guru**** 2482105 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/711703/rtos-tm4c1294ncpdt-experiencing-hwi-forced-hardfault

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

工具/软件:TI-RTOS

我正在尝试通过将 eclipse PAHO 库添加到 TI-RTOS 库中的 TcpEcho 演示之一来编写 MQTT 发布器。 程序发送12个数据包、然后出现以下错误:

TI.SYSBIOS.family.ARM.m3/Hwi:第1095行:E_hardFault:Forced
TI.SYSBIOS.family.ARM.m3/Hwi:第1172行:E_BUSFault:PRECISERR:立即总线故障、确切的已知地址、地址:FFFFFFFF
在 PC = 0x0000de48的后台线程中发生异常。
内核0:ThreadType_Task 中发生异常。
任务名称:{unknown-instance-name}、句柄:0x20001898。
任务堆栈基地址:0x200018e8。
任务堆栈大小:0x800。
R0 = 0x200062fc R8 = 0xffffffff
R1 = 0x0000000d R9 = 0xffffffff
R2 = 0x00000001 R10 = 0xffffffff
R3 = 0x2000f53c R11 = 0xffffffff
R4 = 0xFFFF R12 = 0x00000001
R5=0x00000010 SP (R13)=0x20001ef0
R6 = 0x0000000A LR (R14)= 0x00006e6b
R7 = 0xffffffff PC (R15)= 0x0000de48
PSR = 0x61000000
ICSR = 0x00423803
MMFSR = 0x00
BFSR = 0x82
UFSR = 0x0000
HFSR = 0x40000000
DFSR = 0x0000000b
MMAR = 0xffffffff
BFAR = 0xffffffff
AFSR = 0x00000000
正在终止执行...

我尝试增加.cfg 中的堆栈大小、但这没有帮助

我的任务代码如下:

空 tcpHandler (UARg arg0、UARg arg1)

int clientfd;
int 服务器;
struct sockaddr_in localAddr;
ERROR_Block EB;

while (1){
system_printf ("tcpHandler:创建线程 clientfd =%d\n"、clientfd);

/* Init the Error_Block */
ERROR_INIT (&EB);

MQTTPacket_connectData 数据= MQTTPacket_connectData_initializer;
unsigned char buf[200];
MQTTString topicString = MQTTString_initializer;
unsigned char* payload ="MQTT 数据包消息";
int payloadlen = strlen((char*)payload);
int buflen = sizeof (buf);

data.clientID.Cstring ="me";
data.keepaliveInterval = 20;
data.清洁= 1;
int len = MQTTSerialize_connect (buf、buflen、&data);/* 1 */

topicString.cstring ="TivaMQTT";
len += MQTTSerialize_publish (buf + len、buflen - len、0、0、0、0、 0、topicString、有效载荷、payloadlen);/* 2 */

len += MQTTSerialize_disconnect (buf + len、buflen - len);/* 3 */

服务器=套接字(AF_iNet、SOCK_STREAM、IPPROTO_TCP);

localAddr.Sin_Family = AF_iNet;
localAddr.Sin_addr.s_addr = htonl (0xc6291ef1);
localAddr.sin 端口= htons (arg0);

connect (server、(struct socaddr *)&localAddr、sizeof (localAddr));
SEND (服务器、buf、len、0);
关闭(服务器);

Task_sleep (250);

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

    尊敬的 John:

    您是否查看此文档以帮助调试异常: training.ti.com/debugging-common-application-issues-ti-rtos

    注:您可以使用 Tools->ROV->Tasks->Detailed 来确定导致异常的任务( 它的转储处理地址为0x20001898)。

    Todd

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

    这就是我从 ROV 屏幕上得到的结果。 0x20001898任务是我在上一个帖子中发布的任务、因此它肯定是导致问题的原因。 它看起来不是堆栈大小问题、因为峰值刚好超过一半。 我认为这是一个硬件异常、但我很难弄清导致它的原因。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    查看 CallStacks 选项卡。 希望它能向您展示您在任务中的位置。 但并不是100%(编译选项、特定器件等)。

    您是否也按照视频中的建议查看了 Hwi->异常?

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

    这是否得到了解决?

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

    您好 Todd、

    我还没有解决这个问题。 我已经签出了 Hwi-exceptions 选项卡和 Callstacks 选项卡、但仍然无法找到问题。 我认为这可能与我如何将指针用于所有 MQTT 函数有关、但我仍然不确定。

    John

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

    我想我已经为您提供了有助于调试异常的工具\技巧。 我要将其标记为 TI 认为已解决、因为它听起来像是您的代码中存在问题。

    Todd
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我确实弄明白了。 这是我如何使用 NDK API 的问题。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我很高兴听到您发现问题!