汇编文件链接问题求助
以前用51的时候用的伟福的编写代码,现在转到STM后用STVD,本人一直用汇编,现在的问题是:当原文件比较大时,通常分成多个程序模块,每个模块一个原文件(*.asm文件),伟福编译时,只需要在主程序文件中连接即可,例如:MOV A,#0FH
include"delay.asm"
mova,#f0h
上面代码随便写的,能说明问题就好,呵呵!在伟福中如上所示,即可将delay.asm文件代码链接编译到上诉其前后代码之间,现在用STVD则完全没搞懂,找了很多资料,基本没说到这个问题,因为现在用汇编的太少了,呵呵。目前唯一确定的是,原文件同样可以分拆成多个文件,在main.asm中部需要连接,但在工程文件列表里面需要添加,而且编译的代码是按原文件在工程文件列表里面的顺序执行的,那么问题就来了,例如,我把原main.asm文件做主文件,里面需要的部分子程序,比如延时子程序,ADC、TIM初始化程序和中断分成几个独立的程序模块,那么,很明显的是,这些功能程序模块对应代码应该包含在main.asm文件中间,而不是他的前面(最前面的代码应该是main.asm中的清内存等初始化代码),也不是他的后面(最后面的中断向量表正好也在main.asm文件的末尾),那怎样才能把功能模块程序(各个独立的子程序文件)连接定位到main.asm的中间特定位置?
已经测试过下列情况:
模块文件和main.asm文件不考虑顺序关系,软件仿真编译后查看,代码确实如前述一直,即文件顺序怎样则代码就怎样;然后按顺序把main文件放最前面,则中断向量表后面还有代码;如果把中断向量表搬到最后一个文件中,则编译出错。
达者为尊,所以不管您是老鸟菜鸟,前辈还是新人,只要你知道这个问题该怎么处理,那么请不吝赐教,谢谢!谢谢!谢谢!据说重要的要说三遍!
换了最新的版本(4.3.8)测试,编译什么的没问题了,但是又出新问题了!中断向量表在main.asm最后,其他文件在main.asm文件后面,看仿真代码(软件仿真按地址看)顺序什么的都正常了,不过这个版本里面没找到编译过后的中断向量表,然后仿真运行的时候,不断复位!估计还是中断向量没处理好的问题,请问能不能有什么方法通过软件仿真尽快找出错误(就是导致复位)的代码部分啊?:'( 刚刚又做了个确认,main.asm中的中断向量没了,如图,在main.asm结束后是下一个文件AD.ASM编译后的代码,而中断向量在所有代码里面都找过了,确定没有!我就想知道,中断向量哪儿去了?怎么弄出来?请大家一起探讨吧! 你确定要用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 谢谢,这个中断矢量表在MAIN.ASM里面是有的,现在的问题是编译过后就没有这部分代码了,如果所有代码都按顺序安排在MAIN.ASM内,编译后就有这部分代码,如果把某些子程序独立出来做成独立的ASM文件,再连接编译,这部分就丢失了,是在编译后的代码里面丢失,不是原文件!:Q
页:
[1]