支持所有的调试仿真器,哪怕自己手搓的CMSIS-DAP都行
MDK
原生功能,连CMSIS-Pack都不用安装
你是否心动了呢?
依次通过菜单 Project->Manage->Run-Time Environment 打开RTE配置窗口:
找到并展开Compiler选项卡,勾选Event Recorder,并确保Variant下拉列表选中的是默认的DAP。
展开 Compiler 下的 I/O ,勾选STDOUT,并在 Variant 下拉列表中选择 EVR——这里 EVR 是 Event Recorder 的缩写。单击确定后,我们会在工程管理器中看到以下的内容:
至此,所需的工具都已经成功地加入到工程中了。
虽然这里EventRecorderConf.h 是一个可以编辑的状态,但实践中,我们基本不用去碰他——使用默认配置即可。
在包含 main() 函数的C代码文件中,按照如下的格式添加对头文件的包含:
#include
#if defined(RTE_Compiler_EventRecorder)
# include
#endif
void main(void)
{
...
#if defined(RTE_Compiler_EventRecorder) \
&& defined(RTE_Compiler_IO_STDOUT_EVR)
EventRecorderInitialize(0, 1);
#endif
...
}
理论上,到这里,我们就已经完成了部署,可以在进入调试模式后,通过MDK的 Debug (printf) View窗口来观察 printf 的输出结果了。比如,我们在 main() 函数中打印一个 "hello world\r\n":
#include
#include
#if defined(RTE_Compiler_EventRecorder)
# include
#endif
void main(void)
{
...
#if defined(RTE_Compiler_EventRecorder) \
&& defined(RTE_Compiler_IO_STDOUT_EVR)
EventRecorderInitialize(0, 1);
#endif
...
printf("Hello World\r\n");
...
}
编译,一切顺利的话,进入调试模式后通过菜单 View->Serial Windows->Debug (printf) View 打开窗口:
运行后,可以在 Debug (printf) View窗口中看到如下的结果:
即:
Warning: Event Recorder not located in uninitialized memory!
如果遇到这种情况应该怎么办呢?
打开工程配置窗口“Options for Target”,切换到“Linker”选项卡:
单击 Edit 按钮,可以看到脚本的内容:
为了避免该问题,应该将它从 Object 目录中移动到工程目录下。具体步骤为:右键单击脚本文件名:
打开example.sct,在 RW_IRAM1 后面追加如下的代码:
ZI_RAM_UNINIT +0 UNINIT {
.ANY (.bss.noinit)
}
效果大约类似这样:
这里步骤的核心思想是在 scatter script 内紧接着为 RW和ZI的 execution region为 .bss.noinit 提供一个属性为UNINIT的专属execution region。
在领会精神的情况下,如果你的工程原本就使用了scatter script也可以如法炮制。俗话说解铃还须系铃人,如果你还是不知道怎么处理,那么就去找 你工程中scatter script 的作者吧。
值得强调的是:如果你的MDK版本太老,为了确保最佳的用户体验,还是推荐尽快升级吧。您可以在关注【裸机思维】公众号后发送关键字【MDK】来获取其最新的网盘链接。
int stdout_putchar(int ch)
{
if ('\n' == ch) {
int temp = '\r';
while(Driver_USART0.Send(&temp, 1) != ARM_DRIVER_OK);
}
if (Driver_USART0.Send(&ch, 1) == ARM_DRIVER_OK) {
return ch;
}
return -1;
}
本文来源网络,免费传达知识,版权归原作者所有。如涉及作品版权问题,请联系我进行删除。
由于微信公众号近期改变了推送规则,为了防止找不到,可以星标置顶,这样每次推送的文章才会出现在您的订阅列表里。
猜你喜欢:
分享一份嵌入式软件工具清单!
分享一款嵌入式人必备绘图工具!
易懂 | 手把手教你编写你的第一个上位机
实用 | 10分钟教你搭建一个嵌入式web服务器
嵌入式常用通信传输协议动图,收藏!
适用于嵌入式的差分升级通用库!
分享一种灵活性很高的协议格式(附代码例子)
分享几个实用的代码片段(第二弹)
在公众号聊天界面回复1024,可获取嵌入式资源;回复 m ,可查看文章汇总