在gnu手臂皮质m4与freertos的异常处理程序

在gnu手臂皮质m4与freertos的异常处理程序,第1张

概述更新2016-12 现在还有一个这个行为的最小例子: https://community.nxp.com/message/862676 我使用一个ARM Cortex M4与freertos使用freescales自由Kinetis IDE(gnu手臂工具链).问题是那个 try { throw 4; // old scenario also not working: throw std: 更新2016-12
现在还有一个这个行为的最小例子: https://community.nxp.com/message/862676

我使用一个ARM Cortex M4与freertos使用freescales自由Kinetis IDE(gnu手臂工具链).问题是那个

try {    throw 4; // old scenario also not working: throw std::runtime_error("wut");} catch (...) {}

导致停止的cpu和代码在try或(当某些被添加后)在catch处理程序不执行.

并可以在这里找到:https://gist.github.com/Superlokkus/3c4201893b4c51e154e2a0afdf78fef0

我认为这导致一个SVC中断,对不起,我错了,Freertos欺骗我,因为当我抛出一些它停止在DefaultISR.

throw确实跳到__cxa_throw,然后从那里到___Unwind_RaiseException __gnu_Unwind_RaiseException __cxa_begin_catch>
< _ZSt9terminatev>
所以看起来像std :: terminate被调用,但是catch块不应该允许这个.或者我的假设是错误的,这种行为是因为gcc C运行时异常支持是一个总是调用终止的存根?

更新ji9:因为我看到rand()尝试使用malloc(),我还定义了一个工作的malloc()/ freeRTOS函数和etvoilà:__cxa_allocate_exception使用malloc(我不知道工具链如何期望我处理一个bad_alloc的情况).
所以现在,它仍然崩溃,但是除了分配(我认为):
卓越的路径是:

(throwing function after exception allocation)__cxa_throw   ...                        //(some intructions in __cxa_throw)   __cxa_begin_catch  //I guess something went wrong here    _ZSt9terminatev // Immediately after __cxa_begin_catch        _ZN10__cxxabiv111__terminateEPFvvE:         00016dfc: push {r3,lr}         00016dfe: blx r0  //Goes directly to WDOG_EWM_IRQHandler or hard fault handler         00016e00: bl 0x194ac <abort>

如果你想知道或可能有帮助:我的调试器说它的WDOG_EWM_IRQHandler我崩溃了,如果我没有定义hard_fault处理程序和一个自己的默认处理程序.

所以我猜这个堆栈解决了一些问题,因为我在_throw的名字中以“完成的堆栈解卷”去了一些符号,但是我没有捕捉到我在一个对象的析构函数中设置的断点,清理干净而这似乎是激励__cxa_begin_catch调用中止或某事.

(Kinetis Design Studio 3.2.0
GNU ARM C/C++交叉编译器
版本:1.12.1.201502281154
为我们
FRDM-KV31F)

解决方法 由于错误,大多数异常都将执行默认处理程序,因此您首先需要做的是确定哪个异常正在执行.您可以在以下页面看到“确定正在执行哪个异常处理程序”部分: http://www.freertos.org/Debugging-Hard-Faults-On-Cortex-M-Microcontrollers.html

我猜,因为你没有在你的代码中使用外设,所以这将是一个错误处理程序,可能是硬的错误.同一页面(参见上面的链接)也提供了有关调试的说明.

除此之外 – 确保您执行正常的FreeRTOS调试事情,例如确保已定义了configASSERT(),并且您有堆栈溢出检查.有关这些主题的信息请见此页面:http://www.freertos.org/FAQHelp.html

总结

以上是内存溢出为你收集整理的在gnu手臂皮质m4与freertos的异常处理程序全部内容,希望文章能够帮你解决在gnu手臂皮质m4与freertos的异常处理程序所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1233622.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存