[技术问答] NUC972莫名死机

[复制链接]
11311|23
 楼主| mojingjian 发表于 2021-9-21 10:32 | 显示全部楼层 |阅读模式
基于rt-thread的工程,应用程序是之前在STM32F429上正常运行的移植到NUC972上后出现莫名的死机问题。
工程的主要功能用到 lcd、文件系统(uffs)、uart(omrom、modbus协议通信)等。
在程序正常跑一段时间后会莫名死机,lcd的显示画面会变色和发生偏移,控制台没有异常和寄存器打印信息,通过仿真的方式可以知道程序最终跑到了data abort异常,问题是在出现上述现象时不是马上进入异常,还跑了10多秒才发生的异常,像是程序重新在0地址开始往下跑了,最终在不会运行到的地方发生异常,仿真看到的 lr 寄存器地址记得好像是0x26c吧。
这个情况无法定位到真正的错误代码,之前也没有遇到过这种情况,麻烦大家给分析下,谢谢!!!
小明的同学 发表于 2021-9-21 23:32 | 显示全部楼层
两个芯片不是太一样,可能哪儿没匹配对。
 楼主| mojingjian 发表于 2021-9-22 08:04 来自手机 | 显示全部楼层
小明的同学 发表于 2021-9-21 23:32
两个芯片不是太一样,可能哪儿没匹配对。

确实挺大不同的,搞挺久了不知从哪找问题
twjiang 发表于 2021-9-22 08:43 | 显示全部楼层
查下是不是文件系统 crash了?不要频繁写文件
 楼主| mojingjian 发表于 2021-9-22 09:17 来自手机 | 显示全部楼层
twjiang 发表于 2021-9-22 08:43
查下是不是文件系统 crash了?不要频繁写文件

有这个可能,我调整下程序。
我在使用ymodem传输时也挺经常死机的(stm32f429不会),有可能也会是这个问题吗
 楼主| mojingjian 发表于 2021-9-22 09:47 来自手机 | 显示全部楼层
请问怎么能确定是文件系统crash了,没找到相关说明不清楚怎么查,我用的是uffs
twjiang 发表于 2021-9-22 10:39 | 显示全部楼层
将代码里所有写文件的动作禁用掉,然后测试一段时间
m564522634 发表于 2021-9-22 13:55 | 显示全部楼层
小明的同学 发表于 2021-9-21 23:32
两个芯片不是太一样,可能哪儿没匹配对。

data abort 的时候就是告诉你单片机数据总线出错了, 你把除系统以外的所有功能都禁止掉了,然后一个功能一个功能检察就可以了,这种情况基本上是内存被 写穿出现的
 楼主| mojingjian 发表于 2021-9-22 21:39 | 显示全部楼层
m564522634 发表于 2021-9-22 13:55
data abort 的时候就是告诉你单片机数据总线出错了, 你把除系统以外的所有功能都禁止掉了,然后一个功能 ...

试过将大部分的功能禁用然后用ymodem传输文件传输,偶尔可以成功,失败时死机的一个情况是一样的都无法正确定位。逐个功能检查对于我的难点是部分功能写的不好有耦合的情况,另一个是data abort异常是在程序出错后仍跑了10多秒后才触发的,不确定程序错误是否就是data abort,这个方法可能会在其他方法尝试后再考虑吧。
 楼主| mojingjian 发表于 2021-9-22 21:42 | 显示全部楼层
今天调试usb时还出现了pabt异常,然后跳去打印线程信息时又触发了dabt异常,一直重复的触发异常,真的很头疼
 楼主| mojingjian 发表于 2021-9-23 09:13 来自手机 | 显示全部楼层
twjiang 发表于 2021-9-22 10:39
将代码里所有写文件的动作禁用掉,然后测试一段时间

昨天跑一下午没事,今天早上没有半个小时就死机了,不是文件系统的问题
twjiang 发表于 2021-9-23 15:06 | 显示全部楼层
mojingjian 发表于 2021-9-23 09:13
昨天跑一下午没事,今天早上没有半个小时就死机了,不是文件系统的问题 ...

【N9H30】RT-Thread重大更新
https://bbs.21ic.com/icview-3165542-1-1.html

你所使用的 RT-Thread是不是基于上述工程来的?如果是,请参考手动打补丁。

评论

@mojingjian :请查看本贴的最新答复。  发表于 2021-9-24 12:36
@mojingjian :是的,参考 RT-Thread for NUC980手动打补丁。  发表于 2021-9-24 08:35
买开发板带的工程,应该是挺早时候的,若我要更新现在的工程是否参考rt-thread nuc980来会更好些?  发表于 2021-9-23 21:22
twjiang 发表于 2021-9-24 12:11 | 显示全部楼层
Hi mojingjian,

经Nuvoton官方确认, RT-Thread for NUC972的补丁 应参考 【N9H30】RT-Thread重大更新
https://bbs.21ic.com/icview-3165542-1-1.html

NUC980 与 NUC972(N9H30)在IRQ Dispatch方面有区别。
 楼主| mojingjian 发表于 2021-9-24 23:24 | 显示全部楼层
帮忙查看下代码,屏蔽掉cache情况似乎有点改善,不过我对mmu和cache并不了解,不清楚其配置和使用。

  1. static struct mem_desc hw_mem_desc[] =
  2. {
  3.         { 0x00000000, 0xFFFFFFFF,     0x00000000, RW_NCNB },     /* None cached for 4G memory */
  4.         { 0x00000000, 0x04000000-1,   0x00000000, RW_CB   },     /* 64M cached DDR memory */
  5.         { 0x80000000, 0x84000000-1,   0x80000000, RW_CNB },      /* Shadow DDR Map */
  6.         { 0x3C000000, 0x3C00E000-1,   0x3C000000, RW_NCNB },     /* 56K SRAM memory */
  7.         { 0xBC000000, 0xBC00E000-1,   0xBC000000, RW_NCNB }      /* 56K Shadow memory */
  8. };

  9. void rt_hw_board_init(void)
  10. {
  11.         /* initialize mmu */
  12.         rt_hw_mmu_init(&hw_mem_desc[0], sizeof(hw_mem_desc) / sizeof(hw_mem_desc[0]));
  13.         //rt_hw_cpu_dcache_enable();
  14.         //rt_hw_cpu_icache_enable();
  15.        
  16.         /* Enable GPIO Clock */
  17.         outpw(REG_CLK_HCLKEN, 0x0527);
  18.         outpw(REG_CLK_PCLKEN0, inpw(REG_CLK_PCLKEN0) | (1<<3));    //Enable GPIO engin clock.
  19.        
  20.         /* initialize hardware interrupt */
  21.         rt_hw_interrupt_init();
  22.         /* initialize uart */
  23.         rt_hw_uart_init();
  24.         /* initialize timer0 */
  25.         rt_hw_timer0_init();
  26.        
  27.         rt_console_set_device(RT_CONSOLE_DEVICE_NAME);
  28.        
  29. #ifdef RT_USING_HEAP
  30.         /* init memory system */
  31.         rt_system_heap_init(BOARD_HEAP_START, BOARD_HEAP_END);
  32. #endif

  33.         /* Board underlying hardware initialization */
  34. #ifdef RT_USING_COMPONENTS_INIT
  35.     rt_components_board_init();
  36. #endif
  37. }
 楼主| mojingjian 发表于 2021-9-26 11:33 | 显示全部楼层
我使用N9H30的几个文件(drv_common.c, drv_sys.c, drv_systick)修改后暂时都没出现之前死机的问题,应该是解决了
xiaoqizi 发表于 2021-10-14 16:43 | 显示全部楼层
死机的时间固定吗
木木guainv 发表于 2021-10-14 16:45 | 显示全部楼层
能找到死机的具体位置吗
tpgf 发表于 2021-10-14 16:48 | 显示全部楼层
就肯定是有原因的
heimaojingzhang 发表于 2021-10-14 16:50 | 显示全部楼层
这样修改是有效果的
keaibukelian 发表于 2021-10-14 16:52 | 显示全部楼层
估计是程序的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

14

主题

65

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部