查看: 9325|回复: 34

[其他] 求汇编实现程序跳转

[复制链接]

该用户从未签到

12

主题

66

帖子

0

新手上路

Rank: 1

积分
156
最后登录
1970-1-1
发表于 2012-5-7 14:38:21 | 显示全部楼层 |阅读模式
    小弟ColdFire V2内核的bootloader的开发历尽磨难,终于进入尾声了,就差一个小小的问题。
    我的application在flash的0x0000 4000-0x0004 0000(Flash一共256k),bootloader在Flash的0x0000 0500-0x0000 3FFF,bootloader烧进去后,更新application已经不成问题,但application跳回bootloader小弟却不会了。
    之前有一个师兄在HCS12下面是这样实现的:
    __asm{
           ldy boot_address;
           pshy;
           ldab #0;
           pshb;
          rtc;
    }
    粗略比较了一下,ColdFire的汇编指令和HCS12不同,而且x,y,a,b这些寄存器似乎也没有的吧...本人还是不懂汇编,有哪位大哥帮我写这么两句,能够让我application运行的状态下,跳入地址为0x0000 0500的bootloader代码段运行bootloader。赶紧不尽!!
我知道答案 目前已有33人回答
回复

使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-7 16:00:00 | 显示全部楼层

    RE:求汇编实现程序跳转

    这个你应该参考ColdFire的bootloader程序。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

    积分
    156
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-8 09:20:39 | 显示全部楼层

    回复:求汇编实现程序跳转

    论坛内无高手阿
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-8 11:17:27 | 显示全部楼层

    RE:求汇编实现程序跳转

    参考代码:
    #define USER_ENTRY_ADDRESS 0x0039C0
    asm (JMP USER_ENTRY_ADDRESS); // jump to user entry
     
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

    积分
    156
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-8 16:46:18 | 显示全部楼层

    回复:求汇编实现程序跳转

     jmp的方式我也试过...还是不行,调试跟踪发现PC指针在jmp后,的确指向了bootloader的地址,但之后就运行不下去了...怀疑:数据寄存器D0~D7和地址寄存器A0~A7中之前的数据是否影响了内核在bootloader段的正常运行。
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    99

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    322
    最后登录
    1970-1-1
    发表于 2012-5-9 04:55:27 | 显示全部楼层

    你跳对地址了没有?

    回复第 5 楼 于2012-05-08 16:46:18发表:
     jmp的方式我也试过...还是不行,调试跟踪发现PC指针在jmp后,的确指向了bootloader的地址,但之后就运行不下去了...怀疑:数据寄存器D0~D7和地址寄存器A0~A7中之前的数据是否影响了内核在bootloader段的正常运行。
     

    不知你的bootloader是不是当作一个完整的程序编译,如果是你应该跳到他的启动向量,由启动向量跳到系统的启动代码(_startup),启动代码作完初始化后才跳到你写的代码。你如果直接跳到你的代码,你自己应确认是否作完了该做的系统初始化。
    如果把bootloader当作你应用程序的一部分编译,应确认你的bootloader不使用被编程区域的子程序,中断向量......
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

    积分
    156
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-9 09:21:29 | 显示全部楼层

    回复:求汇编实现程序跳转

    回复第 6 楼 于2012-05-09 04:55:27发表:
    回复第 5 楼 于2012-05-08 16:46:18发表:
     jmp的方式我也试过...还是不行,调试跟踪发现PC指针在jmp后,的确指向了bootloader的地址,但之后就运行不下去了...怀疑:数据寄存器D0~D7和地址寄存器A0~A7中之前的数据是否影响了内核在bootloader段的正常运行。
     

    不知你的bootloader是不是当作一个完整的程序编译,如果是你应该跳到他的启动向量,由启动向量跳到系统的启动代码(_startup),启动代码作完初始化后才跳到你写的代码。你如果直接跳到你的代码,你自己应确认是否作完了该做的系统初始化。
    如果把bootloader当作你应用程序的一部分编译,应确认你的bootloader不使用被编程区域的子程序,中断向量......
     
     
    我的bootloader和application都是作为独立的程序编译的,当然都有自己的启动、初始化的部分。而jmp过去后的flash地址我设定为0x0000 0500,也是从s19文件中分析得到的bootloader启动的地址,这个地址后面的代码肯定是要运行startup代码的。我把我bootloader的s19文件贴上来,你们看一下吧。
     

    BootLoader_52233.elf.rar

    4.03 KB, 下载次数: 22

    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    难过
    2021-12-15 16:01
  • 签到天数: 1 天

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    377
    最后登录
    2023-8-16
    发表于 2012-5-9 09:43:26 | 显示全部楼层

    RE:求汇编实现程序跳转

    你应该看看0x0000 0500这个地址下面保存的到底是哪个地址,还有,要注意启动向量地址并不是实际地址,而他里面的内容才是实际地址。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

    积分
    156
    最后登录
    1970-1-1
     楼主| 发表于 2012-5-9 10:05:48 | 显示全部楼层

    回复:求汇编实现程序跳转

    回复第 8 楼 于2012-05-09 09:43:26发表:
    你应该看看0x0000 0500这个地址下面保存的到底是哪个地址,还有,要注意启动向量地址并不是实际地址,而他里面的内容才是实际地址。
     
    额,这个要反汇编一下,才能知道了?
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    99

    帖子

    0

    中级会员

    Rank: 3Rank: 3

    积分
    322
    最后登录
    1970-1-1
    发表于 2012-5-9 10:11:30 | 显示全部楼层

    回复:求汇编实现程序跳转

    回复第 7 楼 于2012-05-09 09:21:29发表:
    回复第 6 楼 于2012-05-09 04:55:27发表:
    回复第 5 楼 于2012-05-08 16:46:18发表:
     jmp的方式我也试过...还是不行,调试跟踪发现PC指针在jmp后,的确指向了bootloader的地址,但之后就运行不下去了...怀疑:数据寄存器D0~D7和地址寄存器A0~A7中之前的数据是否影响了内核在bootloader段的正常运行。
     

    不知你的bootloader是不是当作一个完整的程序编译,如果是你应该跳到他的启动向量,由启动向量跳到系统的启动代码(_startup),启动代码作完初始化后才跳到你写的代码。你如果直接跳到你的代码,你自己应确认是否作完了该做的系统初始化。
    如果把bootloader当作你应用程序的一部分编译,应确认你的bootloader不使用被编程区域的子程序,中断向量......
     
     
    我的bootloader和application都是作为独立的程序编译的,当然都有自己的启动、初始化的部分。而jmp过去后的flash地址我设定为0x0000 0500,也是从s19文件中分析得到的bootloader启动的地址,这个地址后面的代码肯定是要运行startup代码的。我把我bootloader的s19文件贴上来,你们看一下吧。
     

     

    你的500地址存的是什么?是启动向量吗?
     
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-28 11:47 , Processed in 0.110739 second(s), 31 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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