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

汇编文件链接问题求助

[复制链接]
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管理
行使您的权利
官方最新发布
STM32Cube扩展软件包
意法半导体边缘AI套件
ST - 理想汽车豪华SUV案例
ST意法半导体智能家居案例
STM32 ARM Cortex 32位微控制器
关注我们
st-img 微信公众号
st-img 手机版