[经验分享] MDK/keil高阶使用手册

[复制链接]
575|58
荣陶陶 发表于 2026-2-4 13:23 | 显示全部楼层 |阅读模式
1.开启watch和内存窗口的值实时更新



2.调试模式可以查看局部变量的值
        只不过要让任意被观察变量退出<cannot evaluate>状态,都需要先在该变量被赋值的地方先打个断点,此后该变量的值就能实时更新了。

3.可以在watch窗口直接输入你要查看的变量的名称
4.可以在watch窗口直接改变被观察变量的值
5.可以在memory窗口直接改变内存和flash的值
6.可以在魔术棒的Listing选项卡选择生成编译中间文件和选择MAP文件的内容



7.可以在魔术棒的User选项卡选择编译前和编译后分别都执行点啥,可以是一个指令、一个脚本、一个程序



8.在程序跑飞或者死机时,可以选择不复位进入Debug,从而查看当前卡在了哪里







其中ini文件里面的内容为:LOAD %L INCREMENTAL

9.可以在魔术棒的Utilities选项卡选择下载程序时下载的文件是哪个



其中ini文件的内容为:LOAD "Objects\\xxx.hex"

10.屏蔽特定的警告(针对ARM 编译器6以上)
        先看看ARM编译器用户手册是怎么说的:“要屏蔽特定警告,可以使用Arm Compiler提供的一些选项和指令。你可以通过在源代码中使用#pragma clang diagnostic ignored "-Wname"指令来忽略特定警告消息,其中"Wname"是要忽略的警告名称。”

        具体操作:比如以下警告:

../User/Tasks/ledTask.c(55): warning: passing 'const gpioEntityTypeDef *' to parameter of type 'gpioEntityTypeDef *' discards qualifiers [-Wincompatible-pointer-types-discards-qualifiers]


        则在相应文件中输入以下信息:#pragma clang diagnostic ignored "-Wincompatible-pointer-types-discards-qualifiers"



        再编译就看不到该警告了。

11.指定某段代码的优化等级
        有时候我们希望某段代码的优化等级高一点或者低一点,此时就可以使用如下编译器指令来设定:

#pragma optimize O0

void func(void)
{

}

#pragma


        其中“O0”表示采用优化等级0,即不优化,除此之外还有:O1,O2,O3,Ofast,Omax,Oz等。
————————————————
版权声明:本文为CSDN博主「Just_BLei」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/u011764302/article/details/138666286

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
febgxu 发表于 2026-2-6 10:50 | 显示全部楼层
创建工程、编写基础代码、点击编译
i1mcu 发表于 2026-2-6 12:26 | 显示全部楼层
如何优化MDK/Keil的编译速度?
robincotton 发表于 2026-2-6 13:40 | 显示全部楼层
程序跑飞后可直接进入调试界面定位问题,无需重启
maudlu 发表于 2026-2-6 15:35 | 显示全部楼层
ARM 提供的轻量级运行时日志系统,替代传统串口打印。
jkl21 发表于 2026-2-7 11:57 | 显示全部楼层
在Watch窗口中直接输入要查看的变量名称,实时监视变量值的变化。
robertesth 发表于 2026-2-7 15:41 | 显示全部楼层
读写外设寄存器的“实时窗口”              
albertaabbot 发表于 2026-2-7 16:37 | 显示全部楼层
可将全局变量或内存地址添加为信号,以图形方式显示其变化
cemaj 发表于 2026-2-7 19:22 | 显示全部楼层
优化尺寸和速度间取得平衡,嵌入式常用。
uytyu 发表于 2026-2-7 20:17 | 显示全部楼层
聚焦编译优化、条件编译、链接控制、错误 / 警告精细化管理,适配复杂项目的编译需求。
sdCAD 发表于 2026-2-10 15:10 | 显示全部楼层
很多初学者的代码里包含了大量未使用的 .c 文件,导致固件体积庞大。
biechedan 发表于 2026-2-11 20:58 | 显示全部楼层
MDK 基于 ARMCC/ARMClang编译器,优化等级直接影响代码体积、运行速度、调试可读性
kkzz 发表于 2026-2-12 13:32 | 显示全部楼层
基础调试仅用断点、单步、变量查看,而嵌入式开发中的硬 fault、中断异常、内存泄漏、实时性问题,需用 MDK 的高级调试工具,这是 MDK 高阶使用的核心重点。
ulystronglll 发表于 2026-2-13 12:36 | 显示全部楼层
用 .sct 文件精确控制内存。
janewood 发表于 2026-2-13 14:31 | 显示全部楼层
MDK/Keil 作为一款广泛使用的嵌入式开发工具,其高阶使用技巧能显著提升开发效率与调试能力。
benjaminka 发表于 2026-2-14 10:38 | 显示全部楼层
分散加载文件 这是MDK最核心的高阶功能之一。
lzbf 发表于 2026-2-14 11:50 | 显示全部楼层
用 Logic Analyzer 代替 printf。
wangdezhi 发表于 2026-2-14 13:18 | 显示全部楼层
在调试时,右键变量 → “Add to Live Watch”,可实时查看变量值,无需暂停程序。
saservice 发表于 2026-2-14 14:19 | 显示全部楼层
MDK/Keil 的高阶使用,核心是从基础的 “能编译、能下载”升级到“高效开发、精准调试、性能优化、工程可维护”
kmzuaz 发表于 2026-2-14 14:56 | 显示全部楼层
建议尽快迁移到 AC6。              
您需要登录后才可以回帖 登录 | 注册

本版积分规则

161

主题

564

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部
0