工具/软件:
在解释我遇到的问题之前:
- MCU 上运行引导加载程序和应用程序
- 我们之前使用该费用在 bootlaoder 和应用程序之间传递信息。 最近、我已在复位过程中切换到持久 RAM、以便在引导加载程序和应用程序(共享 RAM 存储器)之间传递信息
- 共享存储器还用于存储应用数据、以便在发生看门狗或软件复位时可以恢复该数据。 此功能似乎导致问题(至少在问题开始时)
- 系统仅在应用中使用 SAFERTOS
- 我修改了启动序列、以确保不会对 wattchdog 和软件复位执行_memInit_。
- 在引导加载程序和应用程序中均启用看门狗。 为了防止看门狗在初始化应用程序时复位 MCU、我们在跳转到应用程序之前执行软件。 这意味着应用中的看门狗复位很快就会发生第二次复位 (SW)、然后再跳转到应用程序。
- 我修改了引导加载程序中的异常矢量、以便我们可以在应用程序中执行 SVC 处理程序(引导加载程序除了复位处理程序外不使用异常矢量)
发生的情况是、系统在启动 SAFERTOS 调度程序时会生成数据故障。 由于看门狗此时启动、因此看门狗将复位系统并保持无限循环。
这是我在调查中发现的
- 重启电源似乎可以暂时解决问题。 它适用于几次重新引导、但随后会再次启动、并在每次引导后继续发生。 我们仍在开发中、因此将 J-Link 探针连接到电路板(如果问题发生时我们连接到目标,我并未注意)。 此问题发生在多个连接/断开连接/重新编程后。
- 调用_memInit_ 可修复问题(直到下一次软件/看门狗复位)。 这不是合适的解决方案、因为我们需要保留数据。
- 如果在启动调度程序之前禁用访问应用程序数据的代码、则不再获得数据中止。 访问共享内存时出现问题。
我找到了这个主题、似乎遇到了相同的问题、但我找不到任何可以解决我的问题的内容。
https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/693755/tms570lc4357-data-abort-after-software--or-watchdog-triggered-reset
我附上了一些可能有帮助的文件。 如果您需要更多信息来解决此问题、请告诉我。
提前感谢您的帮助。
Michal
- /cfs-file/__key/communityserver-discussions-components-files/908/4760.bl_5F00_link.txt 引导加载程序链接器文件
- /cfs-file/__key/communityserver-discussions-components-files/908/8484.HL_5F00_sys_5F00_startup.c 应用启动文件
- /cfs-file/__key/communityserver-discussions-components-files/908/link.txt 应用链接器文件
- /cfs-file/__key/communityserver-discussions-components-files/908/HL_5F00_sys_5F00_intvecs_5F00_bl.asm 异常矢量(引导加载程序中的修改版本)
- /cfs-file/__key/communityserver-discussions-components-files/908/Registers-after-abort.txt 发生数据中止后的寄存器值副本
- /cfs-file/__key/communityserver-discussions-components-files/908/ram_5F00_before_5F00_abort.txt 中止之前的 RAM 内容、显示栈的内容
- 具有特殊函数的/cfs-file/__key/communityserver-discussions-components-files/908/HL_5F00_sys_5F00_core_5F00_bl.asm 汇编代码在启动时保留存储器
- 具有修改后序列的/cfs-file/__key/communityserver-discussions-components-files/908/HL_5F00_sys_5F00_startup_5F00_bl.c 启动引导程序文件