最近,遇到一个比较奇怪的问题:

同一个keil MDK项目,在原环境下无论是烧写还是调试都能正常工作;但是在vscode+EIDE环境下,虽然也能无错误编译,但是烧录或者debug调试后,当使用串口调试助手的udp网络通信回显测试时,会进入hardfault的死循环,也就说代码跑飞了。

首先我要说明的是,代码不是不能运行,表现出来的现象是,代码部分能运行,但是部分一定会跑飞。

解决方案:

首先我查看了一下EIDE从keil MDK环境的魔术棒继承来的信息,没发现问题。后来,我在EIDE论坛中详细描述了整个过程和问题,链接如下:

同一个keil MDK工程在EIDE插件下Debug调试或者将生成的hex文件下载到单片机后发送指令给单片机遇到HardFault跑飞问题 - Embedded IDE Forum

后来我根据进入vscode的debug状态时的警告信息:“LiveGDB: warning: Loadable section "RW_IRAM1" outside of ELF segments”将IRAM的64KB分成了2部分:

最初从keil MDK继承来的数据:
 


这个是我自己修改分成两段后:
 


这样设置好了之后,重新“全部编译”并下载,使用串口助手的UDP网络通信就不会进入“hardfault”跑飞了。

进入vscode的Debug调试界面:
 


 

问题虽然解决了,但是我不清楚这样操作是否是正确的。另外就是Debug调试界面进入后,停在了main函数的非第一条代码上,这个问题还没解决,但是不影响代码正常运行,也没有解决。我是希望debug进入后和keil MDK一样,停在main函数的非第一条代码上。

现在,论坛博主还没有回复信息,再等等,希望能得到一个准确的结论。

Logo

更多推荐