以前用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文件放最前面,则中断向量表后面还有代码;如果把中断向量表搬到最后一个文件中,则编译出错。 达者为尊,所以不管您是老鸟菜鸟,前辈还是新人,只要你知道这个问题该怎么处理,那么请不吝赐教,谢谢!谢谢!谢谢!据说重要的要说三遍! |
仿ç代ç
可以通过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