CC2530 BootLoader,不带协议栈,任意跳转

最近业余研究了下CC2530的远程固件更新/空中下载,现做个总结,一则方便大家学习共进,二则自己做个记录以防日后忘了:

一.BootLoader主要技术点

    1.程序跳转到指定位置

    2.设置好相应的中断向量表偏移

    3.FLASH读写(这个相对较简单)

    4.将APP程序编译到指定位置(注意不是烧写)

二.主要技术点解决

    1.使用汇编指令LJMP,如:asm("LJMP 0x2000\n");  ---跳转到0x2000 flash处

    2.工程中加入 interrupt_stubs.s51 汇编文件,该文件里面已经配置好了中断向量表

    3.这个在官方给的例程中有

    4.采用官方给的链接文件:cc2530-sb.xcl,采用该链接文件编译后的程序的起始地址就到0x2000处了

注:

1.boot程序需要采用sb-boot.xcl链接文件

2.自己完全新建一个APP工程,main.c里面写入流水灯代码,编译运行没问题,但改用cc2530-sb.xcl链接文件之后就会报错误,错误号为e18,此时只要在工程配置里面屏蔽这个错误即可,如下图:

3.对于APP工程,工程配置里面的第一项General Options->Target中的 Code model 选择 banked,data model 选择 Large,Number of virtual 选择 8,如下图:

4.interrupt_stubs.s51应该加在boot工程中,加入后boot中不应该有中断函数,因为interrupt_stubs.s51的目的就是在各个中断向量处加入一个跳转指令(跳转到app的偏移处),如果加入了中断函数的话就会覆盖这个跳转指令,中断向量偏移就失效了,此时app也会执行boot的中断。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值