Keil-MDK 问题处理方案

目录

问题1 device not found

问题2 Keil-MDK安装AC5.06编译器


问题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.

Arm Keil | CMSIS Packs 下载地址

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 编译器:

    1. 选择 “Folders/Extensions” 栏。
    2. 点击 “Use ARM Compiler” 的文本框后面的 “…” 按钮。
    3. 点击 “Add another ARM Compiler Version to List…” 按钮。
    4. 选择刚刚安装的 ARM Compiler 5 编译器所在的文件夹目录。
    5. 点击 “确定” 。

4.3 选择 ARM Compiler 5 作为当前使用的编译器:

    1. 直接点击下图中标记的 “Options for Target…” 快捷图标。
    2. “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的动态空间了吗? 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值