项目添加编译时间

利用KEIL内置的 DATE 和__TIME__这两个宏来获取编译时的日期和时间,这两个宏是字符串形式,可以直接打印

char buf[32] = {0};
volatile const char _makeData[16] = __DATE__;
volatile const char _makeTime[16] = __TIME__;
sprintf(buf, "%s%s", _makeData, _makeTime);

在keil mdk调试中会出现一个蓝色和黄色的三角形

  • 黄色三角形:代表将要执行的程序,也就是下一步就要执行这行代码了
  • 蓝色三角形:代表光标所在的行

MDK Boot+APP 项目中,无法进行调试的办法

https://blog.csdn.net/tao658/article/details/110394860

  1. 先烧写Boot程序到指定的flash偏移位置

  1. boot project里配置仿真设置:仅擦除指定分区,并配置分区范围

  2. 按照同样的方式,将app烧写到指定位置

  3. app也在Flash Download中配置:不要设置擦除全部设置成擦除分区,特别要勾选“Reset and Run”,将下载的地址范围设置为APP的起始位置

  4. 仿真调试boot的时候,可以不用烧写app

  5. 仿真调试app的时候,必须烧写boot,不然mcu reset后执行不到app

error 35: undefined line number

这个错误提示是仿真时候出现的,非编译出现

使用keil仿真调试stm32时,无法进入while(1)里的断点

1.选择优化等级为-O0级 2.在对应常变的变量前添加volatlie,防止因编译器优化而忽略

MDK(Keil) 自动生成bin文件、汇编文件或者HEX文件、ASM文件

生成库文件:

生成HEX文件:

生成Bin文件:

生成Asm汇编文件: fromelf --text -c --output="$L@L.asm" "#L"

编译警告

warning #1295-D Deprecated declaration xxxxx - give arg types,翻译过来就是:不推荐的声明xxxxx-需要给定参数类型。其实这个警告是因为你的函数没有参数的话,需要定义和声明的时候添加void

warning: #188-D: enumerated type mixed with another type,指示在代码的某处将枚举类型与另一种类型混合使用,这种警告通常在将枚举类型与其他类型进行操作或赋值时出现。将枚举类型转换为整数类型进行操作: Mode = (enum Mode)((currentMode + 1) % 5);

warning: #69-D: integer conversion resulted in truncation,将常量数值赋值给整形变量时,如果常量值超过变量类型范围时,需要手动声明类型转换:a = (uint8_t)666;,或者将常量值缩小也能消除警告

warning: #181-D: argument is incompatible with corresponding format string conversion警告,意思是变量的类型与sscanf中的类型不符,一般sscanf的%d需要对应32位整形的变量去接收(uint32_t)