Keil MDK 配置详解与调试技术

文章详细介绍了工程配置的各项选项,包括通用配置、操作系统选项、编译器和连接器设置等,强调了优化镜像尺寸和运行速度的方法。此外,还讨论了调试技术,如寄存器分析、反汇编窗口的使用、命令窗口的调试命令以及CallStack和locals窗口在查看堆栈和调用关系中的作用。文章还提及了NVIC窗口对于中断状态的监控,并提到了相关扩展学习资料,如Cortex-M启动代码分析和编译器原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

工程配置介绍

①    通用配置选项;

②    操作系统选项;

③    勾选后可以减小镜像尺寸,加快运行速度;

④    浮点配置;

⑤    加载简要配置,分散加载情况需要配置;

  1. 编译器输出选项;

  1. 可执行镜像名称;

  1. 跳转信息,选择该项可以查询跳转信息,不选择可以加快编译速度;

  1. 生成库.lib;

  1. 编译器编译报表选项;

  1. 编译器编译列表选项;

  1. 编译器、预处理器报表选项;

  1. 连接器报表选项;

  1. 用户配置选项;

  1. C/C++编译前运行选项;

  1. 工程build前运行选项;

  1. 工程build后运行选项;

  1. 编译器配置选项;

  1. 汇编器全局宏定义;

  1. 编译器等级优化选项;

  1. 对冗余函数的优化,建议勾选;

  1. 编译器路径;

  1. 编译器控制字;

  1. 编译器已添加控制字;

  1. 汇编器;

  1. 汇编器全局宏定义;

  1. 汇编器常用控制字;

  1. 汇编器路径;

  1. 汇编器控制字;

  1. 汇编器已添加控制字;

  1. 连接器;

  1. 连接器常用功能开关;

  1. 分散加载文件;

  1. 连接器命令控制字段;

  1. 连接器已加载控制字;

调试技术

1.内核寄存器;其中R0-R7也被称为低组寄存器,可以被所有指令使用;R8-R12也被称为高组寄存器,只能被32bit使用,不能被16bit指令使用;R13堆栈指针寄存器;R14连接寄存器,用于在调用子程序时存储返回地址;R15为程序计数器,在汇编代码中一般我们都都叫它的外号“PC”。因为CM3内部使用了指令流水线,读PC时返回的值是当前指令的地址+4。通过这些寄存器组可以迅速定位到出错的程序的位置,无须在界面5里面打断点自己慢慢找。

例如,写如下代码:

void test_param(int var1,int var2,int var3,int var4,int var5,int var6){
    var1++;
    var2++;
    var3++;
    var4++;
    var5++;
    var6++;
}
int main(void)
{  
  test_param(0x11,0x22,0x33,0x44,0x55,0x66);
  while (1)
  {
  }
}

进入debug调试,可以观察寄存器组,及堆栈中的值:

2.反汇编窗口;在问题难以定位的情况下,汇编可能是分析问题的最后一根稻草。

3.命令窗口,Keil支持很多的调试命令,作为断点调试的强有力补充手段,比如用于显示特定Memory的Display命令、用于显示当前Symbol的dir命令、用于调用逻辑分析仪的LA命令、用于下一些特殊断点的BreakSet/BreakRead命令等。

4.CallStack+locals窗口;可以显示变量/当前堆栈的里的元素,可以看出堆栈内部情况及调用关系。

其他窗口如memory窗口,可以通过输入地址查看具体存储值,非常常用。

其他窗口如NVIC窗口,可以观察所有中断的状态。

拓展内容

1.《Cortex-M启动代码分析》

2.《编译器原理简介》

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值