查看: 1081|回复: 0

LPC技术小贴士-自动添加中断向量校验位

[复制链接]
  • TA的每日心情
    开心
    2024-3-26 15:16
  • 签到天数: 266 天

    [LV.8]以坛为家I

    3298

    主题

    6545

    帖子

    0

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    32003
    最后登录
    2024-4-9
    发表于 2019-6-26 12:17:33 | 显示全部楼层 |阅读模式
    今天我为大家来点技术干活

    为LPC工程自动添加中断向量校验位

    (适用于KEIL开发环境)


    不知大家在LPC的开发过程中是否遇到过这样的问题:工程已经写好,测试已经OK,准备量产时候生成.bin文件放到烧录器中烧录,结果重新上电却运行不起来。反复确认各种步骤后并未发现哪里有异常。那么恭喜你,你可能踩上了NVIC中断校验位的”坑”。


    在几乎所有的LPC产品中。需要在中断向量的第7个位置写入前6个中断向量的校验和。启动时,bootloader 会判断这个校验和,如果校验正确,则会进入用户app,正常执行程序;否则不会跳转到app程序中,造成应用程序”启动不起来”。


    用户手册中原文如下:


    The reserved CPU exception vector location 7 (offset 0x0000 001C in the vector table) should contain the 2’s complement of the check-sum of table entries 0 through 6. This causes the checksum of the first 8 table entries to be 0. The boot loader code checksums the first 8 locations in sector 0 of the flash.


    在代码中,第7个位置(0x0000_001C)上一般会写入0. 但是实际上这里需要填上校验和:
    00.1.png
    而大部分官方的LPC代码,如Code Bundle中或者LPCOpen软件包中的工程,并没有实现这个自动校验位的添加。所以在Keil下,编译出来的image缺少校验位,下载到MCU里当然不能运行。


    而Keil做的还是比较贴心,在Keil的安装目录下,提供了能填充这个校验位的小软件,叫做: ELFDWT.EXE,位于: <安装目录>\ARM\BIN\ 下。使用它的方法也非常简单,只需要在Keil工程的选项下的Post Build中加入这个指令即可,如下图:
    00.2.png
    这样编译出来的image就会自动加上校验和,确保下载后成功运行。


    可能有的朋友会问,以前我的工程并没有加入这条指令,使用Keil下载到板子上为什么也可以正常运行呢?这是因为Keil的编程算法帮你做了一步。在Keil下载程序的时候,会自动调用Keil自带的编程算法文件,在编程算法执行的时候会帮助你“偷偷”的把这地方改为正确的校验位。


    这个小贴士适用于绝大部分LPC内置Flash的型号,希望对大家有所帮助。


    作者:杨熙   文章出处:恩智浦MCU加油站



    签到签到
    回复

    使用道具 举报

    您需要登录后才可以回帖 注册/登录

    本版积分规则

    关闭

    站长推荐上一条 /4 下一条

    Archiver|手机版|小黑屋|恩智浦技术社区

    GMT+8, 2024-4-20 09:16 , Processed in 0.107371 second(s), 19 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表