完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
在对我们基于 S32K148 的电路板上发生的随机崩溃(每 12 小时只有 2-3 次)进行了细致的分析之后(我们有一个外部看门狗,因此死锁会导致电路板重启),我们听从了 NXP 论坛的一些建议,我们设法通过禁用看门狗进行了调试会话,并在崩溃后进行了“附加运行”。
我们确认了罪魁祸首:电路板卡在 FTMX_ChX_ChX_IrqHandler 中: 示例:FTM0_Ch0_Ch1_IrqHandler 第 287 行: 如果 (chan0IntFlag && g_ftmChannelRunning[0][0]) { tiMING_Ftm_IrqHandler(0U, 0U); } 对正在运行的通道的检查从未通过,因此处理程序从未正确执行,结果中断从未被禁用并持续运行。 我们的系统使用 RTOS(基于 FreeRTOS 的 SafeRTOS)。经过分析我们看到在timing_pal.c : TIMING_StartChannel() line 769中,在更新channel running之前开启了中断: /* 通过启用中断生成来启用通道 */ retVal = FTM_DRV_EnableInterrupts(ftmInstance, (1UL << channel)); (无效)retVal; /* 更新通道运行状态 */ g_ftmChannelRunning[ftmInstance][channel] = true; 由于请求的时间是 500us(我们需要一个计时器,因为时间小于 1 个滴答声(1ms)),如果由于某种随机机会任务在中断启用和通道状态更新之间被中断并且系统返回时间太长,然后它会导致死锁(发生在我们身上的事情)。 我认为要解决这个问题,应该颠倒操作顺序(首先更新通道状态,然后作为最后一个操作启用中断)。 由于我们不想修改 SDK,因此我们使用的解决方法是在调用 TIMING_StartChannel() 之前启动一个关键部分,然后立即停止它,我们确认在长时间运行测试后修复了崩溃。 |
|
相关推荐
|
|
只有小组成员才能发言,加入小组>>
1946个成员聚集在这个小组
加入小组我的项目我做主,使用GN+Ninja来完成构建系统(VSCode开发RT106X)
36481 浏览 0 评论
NXP IMX8应用处理器快速入门必备:技巧、使用、设计指南
5499 浏览 1 评论
6154 浏览 1 评论
6853 浏览 0 评论
NXP i.MX6UL开发板(linux系统烧录+规格+硬件+模块移植)使用手册
4277 浏览 0 评论
676浏览 2评论
求助,S32G上Core M启动后如何让Core A在Flash指定位置加载uboot?
661浏览 2评论
ESP32-WROVER-IE + LAN8720以太网,GPIO0电压只有1.6v,无法正常进入spi flash boot模式如何解决?
670浏览 2评论
求分享适用于PN7160 Android的NFC工厂测试应用程序
755浏览 2评论
885浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-13 23:56 , Processed in 1.022598 second(s), Total 73, Slave 57 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号