keil5使用笔记
项目添加编译时间
利用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
- 先烧写Boot程序到指定的flash偏移位置
boot project里配置仿真设置:仅擦除指定分区,并配置分区范围
按照同样的方式,将app烧写到指定位置
app也在Flash Download中配置:不要设置擦除全部设置成擦除分区,特别要勾选“Reset and Run”,将下载的地址范围设置为APP的起始位置
仿真调试boot的时候,可以不用烧写app
仿真调试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)