目录
问题1 device not found
1. 没有安装芯片的设备支持包,比如stm32需要 MDKCM5xx.exe
2. 若已安装类似 MDKCM5xx.exe 的设备支持包,有些项目,还是提示 “device not found”,有些项目正常运行,不会提示此问题。那么再独立安装 Keil.STM32F1xx_DFP.2.4.0.pack 设备支持包
3. 如何下载 keil 的芯片支持包
CMSIS Packs
CMSIS-Pack is a distribution format that makes it easy to use software components, device drivers and middleware in CMSIS development tools including Keil MDK and Keil Studio.
stm32f 不同的 CortexM3/4 内核有不同的包
问题2 Keil-MDK安装AC5.06编译器
需求场景:MDK538a.EXE 默认不带v5的编译器,需要手动添加AC5.06
1. 下载好ARM Compiler AC5.06: ARMCompiler_506_Windows_x86_b960.zip
2. 解压安装在Keil-MDK目录里,否则Keil-MDK无法识别,比如:在C:\Keil_v5\ARM\目录下创建一个文件夹(ARMCC5),整个路径中不要有汉字。
3. 把AC5.06安装在C:\Keil_v5\ARM\ARMCC5路径下。
4. 在Keil-MDK中添加新编译器AC5:
4.1 打开“Manage Project Items”:“Project” ->> “Manage” ->> “Project Items ...”
4.2 添加 ARM Compiler 5 编译器:
-
- 选择 “Folders/Extensions” 栏。
- 点击 “Use ARM Compiler” 的文本框后面的 “…” 按钮。
- 点击 “Add another ARM Compiler Version to List…” 按钮。
- 选择刚刚安装的 ARM Compiler 5 编译器所在的文件夹目录。
- 点击 “确定” 。
4.3 选择 ARM Compiler 5 作为当前使用的编译器:
-
- 直接点击下图中标记的 “Options for Target…” 快捷图标。
- “ARM Compiler” 选择刚刚安装添加的 “Arm Compiler 5.06 update 7 (build 960)” ,再点击 “OK” 。
记录一次找硬中断
包含keil仿真时,通过汇编代码地址找汇编代码或C代码的特性。
1. 与硬中断相关的capture error代码:
void HardFault_Diagnose(uint32_t *stack_frame)
{
// 提取错误信息
uint32_t stacked_r0 = stack_frame[0];
uint32_t stacked_r1 = stack_frame[1];
uint32_t stacked_r2 = stack_frame[2];
uint32_t stacked_r3 = stack_frame[3];
uint32_t stacked_r12 = stack_frame[4];
uint32_t stacked_lr = stack_frame[5];
uint32_t stacked_pc = stack_frame[6];
uint32_t stacked_psr = stack_frame[7];
uint32_t cfsr = SCB->CFSR;
// 打印错误位置
printf("Hard Fault at 0x%08X\n", stacked_pc);
// 检查具体错误类型
if (cfsr & (1 << 16)) {
printf("Instruction access violation\n");
}
if (cfsr & (1 << 15)) {
printf("Load/Store alignment error\n");
}
if (cfsr & (1 << 12)) {
printf("Stacking error\n");
}
while(1);
}
void HardFault_Handler(void)
{
__asm volatile(
"TST LR, #4 \n"
"ITE EQ \n"
"MRSEQ R0, MSP \n"
"MRSNE R0, PSP \n"
"B HardFault_Diagnose \n"
);
}
2. 查看串口打印的错误位置消息:
LVGL的内存管理可能出现了问题,移植时做了吗?给LVGL的动态空间了吗?