楼主: chandge

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

[复制链接]

该用户从未签到

3

主题

99

帖子

0

中级会员

Rank: 3Rank: 3

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

RE:求汇编实现程序跳转

补充一下:如果你的代码开始于500,前边的地址应存放中断向量,main()和_startup应在500(后)的某个地方。你看s19可能觉得格式很固定,但你的程序结构变了(如把Main()挪各地方)s19的也变的。
回复 支持 反对

使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

    RE:求汇编实现程序跳转

    0x0000 0000 - 0x0000 0400这个是用来放放中断向量地址的。你看看0x0000 0500这个地址下面放的实际地址。所有的单片机都会有一个启动向量地址,这个地址下面放的是一个32位的实际跳转地址。这个地址就是程序的启动地址,也就是你上面那位仁兄说的_startup。想要做bootloader或者是IAP的时候,这个一定要吃准,不然出去的产品就不能升级了。另外,建议你把.S19文件存放的格式搞明白,S的意思也要搞清除,每款单片机的中断向量地址和启动向量地址一定要搞明白,做bootloader和IAP是需要非常严谨的,不然出了问题,谁也担不起责任。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

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

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

    回复第 22 楼 于2012-05-09 14:37:59发表:
    0x0000 0000 - 0x0000 0400这个是用来放放中断向量地址的。你看看0x0000 0500这个地址下面放的实际地址。所有的单片机都会有一个启动向量地址,这个地址下面放的是一个32位的实际跳转地址。这个地址就是程序的启动地址,也就是你上面那位仁兄说的_startup。想要做bootloader或者是IAP的时候,这个一定要吃准,不然出去的产品就不能升级了。另外,建议你把.S19文件存放的格式搞明白,S的意思也要搞清除,每款单片机的中断向量地址和启动向量地址一定要搞明白,做bootloader和IAP是需要非常严谨的,不然出了问题,谁也担不起责任。 

    0x0000 0500地址的来由我截了一个图上来,你们看下。
    0x0000 0500这个地址下面放的实际地址这个您会看吗?帮我看一下,bootloader的s19文件我贴在上面了。
    如果自己看的话,是要反汇编翻译一下程序具体的跳转地址?
    截图.gif
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

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

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

    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

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

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

    回复第 21 楼 于2012-05-09 13:58:50发表:
    补充一下:如果你的代码开始于500,前边的地址应存放中断向量,main()和_startup应在500(后)的某个地方。你看s19可能觉得格式很固定,但你的程序结构变了(如把Main()挪各地方)s19的也变的。 

    我在楼上发了个截图,您看一下。
    我试了无数种jmp,跳到0x0000 0000,系统没有重启;跳到bootloader的startup地址(反汇编看了一下是0x0000 0806),也没进入bootloader,是不是和我两个文件独立编译有关。我试过在application中jmp到程序的起始段startup是没问题的,而且我每次jmp前都关了全局中断,避免出现错误。无奈了....
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    99

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

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

    回复第 25 楼 于2012-05-09 17:35:29发表:
    回复第 21 楼 于2012-05-09 13:58:50发表:
    补充一下:如果你的代码开始于500,前边的地址应存放中断向量,main()和_startup应在500(后)的某个地方。你看s19可能觉得格式很固定,但你的程序结构变了(如把Main()挪各地方)s19的也变的。 

    我在楼上发了个截图,您看一下。
    我试了无数种jmp,跳到0x0000 0000,系统没有重启;跳到bootloader的startup地址(反汇编看了一下是0x0000 0806),也没进入bootloader,是不是和我两个文件独立编译有关。我试过在application中jmp到程序的起始段startup是没问题的,而且我每次jmp前都关了全局中断,避免出现错误。无奈了....
     


    从你的application 跳到 Bootloader的_startup应该没问题。我刚才特意修改我的代码在我的系统给你试了,跳转很正常。

    关于跳转地址我还真记错了,对不起。0x00000000存的是SP的地址,0004存的才是_startup的地址。而且也不能跳到0x00000004去,因为那只是个地址,不是完整的可执行语句。看了我当时写的代码,我的代码也是从500开始,但在4f0开始我定义了0x4e71,0x4ef9 (汇编的 NOP,JMP),然后是_startup函数名(函数的入口地址)。每次跳转我会跳到4f0。这样的好处是不管你怎么组织你的源代码,程序都会找到_startup,然后由_startup调用你的MAIN()---这一点对Bootloader的兼容性很重要,也是Freescale推荐的,除非你在你的代码结构上作了相应的限制。
     
    但问题好像不是出在上边提到的。我转换你的S19文件检查了,你的_startup还真在0x0806上,如果application直接跳到0x806应该能运行。我现在想知道你的_startup是Freescale CW生成的还是你自己写的?如果只把Bootloader烧入Flash,不烧Application,你的Bootloader的每个部分都能正常运行吗?你的Bootloader用到中断你在0x400前都设好了没有?
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    12

    主题

    66

    帖子

    0

    新手上路

    Rank: 1

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

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

    回复第 26 楼 于2012-05-09 22:49:45发表:
    回复第 25 楼 于2012-05-09 17:35:29发表:
    回复第 21 楼 于2012-05-09 13:58:50发表:
    补充一下:如果你的代码开始于500,前边的地址应存放中断向量,main()和_startup应在500(后)的某个地方。你看s19可能觉得格式很固定,但你的程序结构变了(如把Main()挪各地方)s19的也变的。 

    我在楼上发了个截图,您看一下。
    我试了无数种jmp,跳到0x0000 0000,系统没有重启;跳到bootloader的startup地址(反汇编看了一下是0x0000 0806),也没进入bootloader,是不是和我两个文件独立编译有关。我试过在application中jmp到程序的起始段startup是没问题的,而且我每次jmp前都关了全局中断,避免出现错误。无奈了....
     


    从你的application 跳到 Bootloader的_startup应该没问题。我刚才特意修改我的代码在我的系统给你试了,跳转很正常。

    关于跳转地址我还真记错了,对不起。0x00000000存的是SP的地址,0004存的才是_startup的地址。而且也不能跳到0x00000004去,因为那只是个地址,不是完整的可执行语句。看了我当时写的代码,我的代码也是从500开始,但在4f0开始我定义了0x4e71,0x4ef9 (汇编的 NOP,JMP),然后是_startup函数名(函数的入口地址)。每次跳转我会跳到4f0。这样的好处是不管你怎么组织你的源代码,程序都会找到_startup,然后由_startup调用你的MAIN()---这一点对Bootloader的兼容性很重要,也是Freescale推荐的,除非你在你的代码结构上作了相应的限制。
     
    但问题好像不是出在上边提到的。我转换你的S19文件检查了,你的_startup还真在0x0806上,如果application直接跳到0x806应该能运行。我现在想知道你的_startup是Freescale CW生成的还是你自己写的?如果只把Bootloader烧入Flash,不烧Application,你的Bootloader的每个部分都能正常运行吗?你的Bootloader用到中断你在0x400前都设好了没有?
     
     

    您有QQ没....我好想找到关键点了....是您说的这个意思。关键是“0x4F0这里的引导项”对于不同的程序如何来确定。其他的部分和您说的一样,startup是CW10.2自己生成的,我没改过。只烧BootLoader,运行正常,里面关闭全局中断,也没设置过其他的(据说bootloader最好尽可能少的使用中断)。
    回复 支持 反对

    使用道具 举报

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

    连续签到: 1 天

    [LV.1]初来乍到

    305

    主题

    4701

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

    RE:求汇编实现程序跳转

    你还是没有找对启动向量的真实地址。你找类似这段S3090000400400004A1850
    内容。发出来给我。
    该会员没有填写今日想说内容.
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    99

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

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

    您有QQ没....我好想找到关键点了....是您说的这个意思。关键是“0x4F0这里的引导项”对于不同的程序如何来确定。其他的部分和您说的一样,startup是CW10.2自己生成的,我没改过。只烧BootLoader,运行正常,里面关闭全局中断,也没设置过其他的(据说bootloader最好尽可能少的使用中断)。 

    QQ倒是有2231327074,但因单位的笔记本没装QQ,不太常用,不知道Web QQ支持语音否?
    或者你留一个你方便的电话到lwn71@163.com,约好时间我可以给你打过去,一般不是下午时间都可以。
    如果你的bootloader能单独可靠运行,问题就好解决一些,尽管我现在不知道你的问题在哪。
     
    回复 支持 反对

    使用道具 举报

    该用户从未签到

    3

    主题

    99

    帖子

    0

    中级会员

    Rank: 3Rank: 3

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

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

    回复第 28 楼 于2012-05-10 10:00:51发表:
    你还是没有找对启动向量的真实地址。你找类似这段S3090000400400004A1850
    内容。发出来给我。 

    他的s19文件我转成二进制看了一下,看了0x00000004的内容,启动向量没错,要不然应该启动不起来。应该是别的问题
    回复 支持 反对

    使用道具 举报

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

    本版积分规则

    关闭

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

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

    GMT+8, 2025-7-28 11:48 , Processed in 0.106669 second(s), 30 queries , MemCache On.

    Powered by Discuz! X3.4

    Copyright © 2001-2024, Tencent Cloud.

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