你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

汇编文件链接问题求助

[复制链接]
gwf118 提问时间:2016-5-1 11:28 /
以前用51的时候用的伟福的编写代码,现在转到STM后用STVD,本人一直用汇编,现在的问题是:当原文件比较大时,通常分成多个程序模块,每个模块一个原文件(*.asm文件),伟福编译时,只需要在主程序文件中连接即可,例如:
    MOV   A,#0FH
     include"delay.asm"
   mov  a,#f0h
上面代码随便写的,能说明问题就好,呵呵!在伟福中如上所示,即可将delay.asm文件代码链接编译到上诉其前后代码之间,现在用STVD则完全没搞懂,找了很多资料,基本没说到这个问题,因为现在用汇编的太少了,呵呵。目前唯一确定的是,原文件同样可以分拆成多个文件,在main.asm中部需要连接,但在工程文件列表里面需要添加,而且编译的代码是按原文件在工程文件列表里面的顺序执行的,那么问题就来了,例如,我把原main.asm文件做主文件,里面需要的部分子程序,比如延时子程序,ADC、TIM初始化程序和中断分成几个独立的程序模块,那么,很明显的是,这些功能程序模块对应代码应该包含在main.asm文件中间,而不是他的前面(最前面的代码应该是main.asm中的清内存等初始化代码),也不是他的后面(最后面的中断向量表正好也在main.asm文件的末尾),那怎样才能把功能模块程序(各个独立的子程序文件)连接定位到main.asm的中间特定位置?
已经测试过下列情况:
模块文件和main.asm文件不考虑顺序关系,软件仿真编译后查看,代码确实如前述一直,即文件顺序怎样则代码就怎样;然后按顺序把main文件放最前面,则中断向量表后面还有代码;如果把中断向量表搬到最后一个文件中,则编译出错。

达者为尊,所以不管您是老鸟菜鸟,前辈还是新人,只要你知道这个问题该怎么处理,那么请不吝赐教,谢谢!谢谢!谢谢!据说重要的要说三遍!
收藏 评论4 发布时间:2016-5-1 11:28

举报

4个回答
gwf118 回答时间:2016-5-2 02:45:16
换了最新的版本(4.3.8)测试,编译什么的没问题了,但是又出新问题了!中断向量表在main.asm最后,其他文件在main.asm文件后面,看仿真代码(软件仿真按地址看)顺序什么的都正常了,不过这个版本里面没找到编译过后的中断向量表,然后仿真运行的时候,不断复位!估计还是中断向量没处理好的问题,请问能不能有什么方法通过软件仿真尽快找出错误(就是导致复位)的代码部分啊?
gwf118 回答时间:2016-5-2 03:19:09
刚刚又做了个确认,main.asm中的中断向量没了,如图,在main.asm结束后是下一个文件AD.ASM编译后的代码,而中断向量在所有代码里面都找过了,确定没有!我就想知道,中断向量哪儿去了?怎么弄出来?请大家一起探讨吧!

仿真代码

仿真代码
xmshao 回答时间:2016-5-2 19:49:30
你确定要用ASM也可以的。
可以通过STVD生成个基于STVD 汇编的工程。

生成后MAIN.ASM里就有中断矢量表。

interrupt NonHandledInterrupt
NonHandledInterrupt.l
        iret

        segment 'vectit'
        dc.l {$82000000+main}                                                                        ; reset
        dc.l {$82000000+NonHandledInterrupt}        ; trap
        dc.l {$82000000+NonHandledInterrupt}        ; irq0
        dc.l {$82000000+NonHandledInterrupt}        ; irq1
        dc.l {$82000000+NonHandledInterrupt}        ; irq2
        dc.l {$82000000+NonHandledInterrupt}        ; irq3
        dc.l {$82000000+NonHandledInterrupt}        ; irq4
        dc.l {$82000000+NonHandledInterrupt}        ; irq5
        dc.l {$82000000+NonHandledInterrupt}        ; irq6
        dc.l {$82000000+NonHandledInterrupt}        ; irq7
        dc.l {$82000000+NonHandledInterrupt}        ; irq8
        dc.l {$82000000+NonHandledInterrupt}        ; irq9
        dc.l {$82000000+NonHandledInterrupt}        ; irq10
        dc.l {$82000000+NonHandledInterrupt}        ; irq11
        dc.l {$82000000+NonHandledInterrupt}        ; irq12
        dc.l {$82000000+NonHandledInterrupt}        ; irq13
        dc.l {$82000000+NonHandledInterrupt}        ; irq14
        dc.l {$82000000+NonHandledInterrupt}        ; irq15
        dc.l {$82000000+NonHandledInterrupt}        ; irq16
        dc.l {$82000000+NonHandledInterrupt}        ; irq17
        dc.l {$82000000+NonHandledInterrupt}        ; irq18
        dc.l {$82000000+NonHandledInterrupt}        ; irq19
        dc.l {$82000000+NonHandledInterrupt}        ; irq20
        dc.l {$82000000+NonHandledInterrupt}        ; irq21
        dc.l {$82000000+NonHandledInterrupt}        ; irq22
        dc.l {$82000000+NonHandledInterrupt}        ; irq23
        dc.l {$82000000+NonHandledInterrupt}        ; irq24
        dc.l {$82000000+NonHandledInterrupt}        ; irq25
        dc.l {$82000000+NonHandledInterrupt}        ; irq26
        dc.l {$82000000+NonHandledInterrupt}        ; irq27
        dc.l {$82000000+NonHandledInterrupt}        ; irq28
        dc.l {$82000000+NonHandledInterrupt}        ; irq29
gwf118 回答时间:2016-5-2 22:48:59
谢谢,这个中断矢量表在MAIN.ASM里面是有的,现在的问题是编译过后就没有这部分代码了,如果所有代码都按顺序安排在MAIN.ASM内,编译后就有这部分代码,如果把某些子程序独立出来做成独立的ASM文件,再连接编译,这部分就丢失了,是在编译后的代码里面丢失,不是原文件!

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版