在QEMU运行lm3s6965evb固件报错:无法将3升级为HardFault
问题解决思路:QEMU运行Cortex-M3程序出现锁死错误
问题概述
编译WCET基准测试套件的C程序,目标平台为QEMU的lm3s6965evb机型:
- 编译命令:
arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -c program.c -o program.o arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb -specs=nosys.specs -o program.elf program.o - 运行命令:
qemu-system-arm -cpu cortex-m3 -machine lm3s6965evb -nographic -kernel program.elf - 报错信息:
Timer with period zero, disabling
qemu: fatal: Lockup: can't escalate 3 to HardFault (current priority -1)
已尝试将ELF转二进制、调整编译参数、用readelf检查ELF文件,问题仍未解决。
可能的解决方向
- 检查定时器配置逻辑:报错首行提示定时器周期为0,需排查WCET程序中的定时器初始化代码,确保周期值设置为合法的正数,避免触发QEMU模拟异常。
- 添加平台启动代码:lm3s6965evb需要对应硬件初始化(如时钟、中断向量表),仅用
nosys.specs编译缺少必要的启动流程。需添加该平台专用的启动文件(如startup_lm3s6965.s),链接时一并编译,保证硬件环境正确初始化。 - 验证ELF入口地址:通过
readelf -h program.elf查看ELF入口点,确认是否与lm3s6965evb的复位向量地址(通常为0x00000004)匹配,若不匹配需在编译时通过-Wl,-entry=0xXXXXXXX指定正确入口。 - 排查中断优先级配置:报错显示中断优先级冲突,Cortex-M3中HardFault优先级为-1(最高级),需检查程序中中断优先级设置,确保所有中断优先级数值在0~15范围内,且优先级不会高于HardFault。
- 参考套件原生编译配置:WCET基准测试套件通常自带特定平台的编译脚本,查看套件内的Makefile或文档,确认是否有针对lm3s6965evb/QEMU的专属编译参数,避免手动编译遗漏关键配置。
内容的提问来源于stack exchange,提问作者Coding Flamingos
相关产品推荐
相关产品推荐

