7136|0

108

帖子

3820

TA的资源

等待验证会员

楼主
 

讨论一种8051的bootloader的实现方式 [复制链接]

大虾网上的一个想法,觉得不错,设想了一种8051的bootloader实现方式,欢迎大家讨论

前提:单片机的所有FLASH可通过程序修改

FLASH内存划分:
0x0000-0x0fff:Bootloader
0x1000-0xffff:用户程序

Bootloader处理方式:
在startup.a51里,加入这样一段:将所有中断映射到0x1000开始的位置,根据单片机终端数目多少,可对这样一段做调整
ORG        00003H
    LJMP    01003H
    ORG        0000BH
    LJMP    0100BH
    ORG        00013H
    LJMP    01013H
    ORG        0001BH
    LJMP    0101BH
    ORG        00023H
    LJMP    01023H
    ORG        0002BH
    LJMP    0102BH
    ORG        00033H
    LJMP    01033H
    ORG        0003BH
    LJMP    0103BH
Bootloader的程序要求:不能使用任何中断,只能使用查询方式。

Bootloader处理流程:
开机后,检测用户程序的校验,如果错误,则进入升级模式;然后检测用户输入,看是否有强制进入升级模式的需求,如果
有,则进入升级模式。
如果不进入升级模式,则跳转到0x1200
如果进入升级模式,则对于用户传过来的用户程序,只升级0x1000以后的部分,0x1000以前的部分抛弃
Bootloader可以用C语言来写,代码范围限制在4K以内


用户程序要求:
Startup.a51里,同样加入bootloader那一段。正在正常升级模式下,这一段是会被抛弃的,但是这样处理,可以让用户能在
离开bootloader的情况下单独调试。
在Keil 工程属性里,将Interrupt vector的位置改到0x1000,和bootloader里映射的中断向量表对应。
在KEIL 的BL51 Locate里,将?C_C51STARTUP函数定位到0x1200,和bootloader里设定的跳转位置对应。
除此之外,用户程序没有别的任何限制。
此帖出自51单片机论坛
点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表