移植了threadx后运行发现程序莫名跑飞,停留在 HardFaultHandler 即硬件错误异常
调试过程中发现在汇编启动文件启动后跳转main函数即刻就发生了错误异常,先排除是在操作系统运行过程中的问题,而且是硬件错误异常所以先对导致改错误的可能进行排查,考虑到和产生硬件错误异常相关的几种可能1.数组越界操作 2.内存溢出,访问越界 3.堆栈溢出,程序跑飞 4.中断处理错误;先是修改了启动文件中的栈大小,于事无补后可能存在数组越界访问查看定义的全局变量中的数组,修改了线程字节池大小最终操作系统能正常启动。
对于编译生成的各个段大小进行分析:
这段信息是一个程序的大小分析报告,通常在编译或链接过程中生成,用于显示程序的代码和数据段在存储器中所占用的大小。下面对每个部分的含义进行解释:
Code=61200: 这表示代码段(程序的可执行指令)的大小为 61200 字节。代码段包含程序的实际执行代码,包括函数、指令和逻辑。这个数值表示程序的机器指令数量。
RO-data=5960: 这表示只读数据段的大小为 5960 字节。只读数据段包含程序中的常量数据,如字符串、常数等,这些数据在程序运行期间不可修改。
RW-data=1196: 这表示读写数据段的大小为 1196 字节。读写数据段包含在程序运行时可以被修改的数据,如全局变量、静态变量等。
ZI-data=69024: 这表示零初始化数据段的大小为 69024 字节。零初始化数据段包含了在程序运行时需要被初始化为零值的变量。
这些数字表示了不同数据段在存储器中的大小,用字节(Bytes)为单位。这些信息对于了解程序在存储器中的占用情况以及可能需要的存储器容量非常有用。通常情况下,程序的大小分析报告还会包括其

文章讲述了在移植ThreadX后,程序因硬件错误异常停在HardFaultHandler。通过对启动文件、数组和数据段分析,发现可能是由于数组越界导致的问题。通过调整数据段大小和堆栈配置,最终解决了内存不足引发的死机问题。
最低0.47元/天 解锁文章
3440

被折叠的 条评论
为什么被折叠?



