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.

[参考译文] CC3220SF:如何编写自己的硬故障处理程序

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

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

https://e2e.ti.com/support/wireless-connectivity/wi-fi-group/wifi/f/wi-fi-forum/1263022/cc3220sf-how-to-write-my-own-hard-fault-handler

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

您好!
我遇到了发生硬件故障的问题。 发生这种情况是由于某种总线故障上报(我认为查看 HFAULTSTAT 和 FAULTSTAT 寄存器后)。 我只是想编写自己的硬故障处理程序、以便在出现任何此类问题时复位整个器件。

对于这一点,我所做的是这个块=>

***************** /

//定义 IVT 以及指向中断处理程序的函数指针
typedef void (* InterruptHandler)(void);

//定义一个指向 IVT 的指针
Volatile InterruptHandler * const IVHardFault =(Volatile InterruptHandler *) 0x0C;//0x0c 是硬故障的矢量地址  

IVHardFault[0]= Fault_Handler;

***************** /

处理程序函数=>

void Fault_Handler (空)
{

   Reset();

/---------------- /

但从未调用该函数。

有人能帮我解决这个问题吗?

谢谢!

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

    您如何知道这是您遇到的例外情况?

    通常我们的代码(您使用什么操作系统?) 包含总线/硬件故障处理程序(带有 BUSY while 循环)、您会在遇到异常时跳转到这些处理程序。

    您应该能够使用调试器 找出触发的异常。

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

    先生
    调试器在循环中的汇编代码"ti_sysbios_family_arm_m3_hwi_exchandlerasm_i"中停止。
    在寄存器部分、我读取 HFAULTSTAT 和 FAULTSTAT 、这两个字规定了硬故障和 总线故障。

    无论问题是什么、我要做的不是被困在 while 循环中、它应该会重新启动整个器件。 那么、您能指导我编写我的自定义硬故障处理程序吗?

    感谢您的快速回复。 :-)

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

    调用 MAP_PRCMHibernateCycleTrigger ()应该会复位 MCU。  

    但是、您应该尝试找出此类错误的原因-您可能遇到了 堆栈溢出或其他存储器损坏。

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

    先生,
    我知道这个函数  MAP_PRCMHibernateCycleTrigger ()。 我想知道的是在哪里调用这个函数?? 我的硬故障处理程序在哪里? 如何编写自定义硬故障处理程序? Hardfault 处理程序的 ISR 的地址是什么?

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

    您好!

    请观看本视频。 此文档展示了如何在 TI RTOS 中创建自己的异常处理程序。

    1月

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

    感谢 Jan D、他真的很乐于助人。 也感谢 Kobi 的回答。

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

    只为任何人谁想知道这个:  
    在".cfg 文件中(在我的案例中为 release.cfg)、您需要找到"m3Hwi.excHandlerFunc ="、对于该参数、您需要分配在 Hwi 发生时要调用的函数。

    在本例中  

    在 release.cfg 中=>
    m3Hwi.excHandlerFunc ="&NICOLOR" Fault_Handler;

    在 main.c 中=>

    void Fault_Handler (空)
    {
       DEBUG_LOGPRINT ("\r\n 发生总线故障!\r\n);    
       MAP_PRCMHibernateCycleTrigger ();