白菜心心 2022-01-18 17:53 采纳率: 0%
浏览 52

C8051F120bootloader程序跳转的问题?

目前通讯,收发都正常,就是程序不跳转。
我说下我程序的思路,恳请指正,谢谢. 我boot地址区间0-0x1000 App地址区间 0x1000-0x1E000之间。
1、设置KEIL
因为App在后面所以,需要重新定义中断向量,设置Keil在C51 -> Interrupt vector at address 为0x1000,因为我的app是1000H开始存储的,中断偏移量+1000
2、更改STARTUP.A51启动文件加入 在第105行开始
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
ORG 00043H
LJMP 01043H
ORG 0004BH
LJMP 0104BH
ORG 00053H
LJMP 01053H
ORG 0005BH
LJMP 0105BH
ORG 00063H
LJMP 01063H
ORG 0006BH
LJMP 0106BH
ORG 00073H
LJMP 01073H
ORG 0007BH
LJMP 0107BH
ORG 00083H
LJMP 01083H
ORG 0008BH
LJMP 0108BH
ORG 00093H
LJMP 01093H
ORG 000A3H
LJMP 010A3H

3、设置BL51Loacate -> code Range 设置 0x1000-0x1E000,是让app程序存储在 0x1000-0x1E000
4、主程序处理如下


  #define boot       0x1000 
    //判断是否需要程序更新
  ms=40000;
    while(ms--)
    {
        if(serial_get_char() == 0x31)//上位机发31请求
        {
           serial_put_char(0x31);//回复表示可以
            Erase_Flash();//擦除
            AppFlashUpdata();//更新
            goto    boot_out;//跳转
        }
    }
 
     boot_out:
 ((void(code *)(void))boot)(); //跳转执行

程序目前就是下载后不执行,估计没跳转好,请问我是不是设置有问题,或者地址范围有问题,请给予指导。感谢

  • 写回答

3条回答 默认 最新

  • qllaoda 2022-01-18 18:11
    关注

    你的做法这个好像是参考我以前写过的那篇文章做的,不过我后来发现点问题,中断向量最好不要放在程序起始位置,而是靠后一点,比如放到2000H。
    而且你好像还漏了一步,没有给用户程序的C_STARTUP定位
    你上面说的主程序,应该是指bootloader吧?
    没用过带code bank的C8051,还不知道在这个系列上面有没有问题,我在c8051f340和STC的IAP系列上用过可以。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 1月18日

悬赏问题

  • ¥15 基于卷积神经网络的声纹识别
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 CSAPPattacklab
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图
  • ¥15 stm32开发clion时遇到的编译问题