VS2005使用(一)

一、VS2005 ARM 混合汇编

 

vs2005 IDE,arm开发平台,想利用汇编对h264部分算法进行优化,原本以为只要在代码中嵌入__asm{}就可以搞定,
实际上还真不是那么容易的事,几经曲折终于能够编译通过,其间辛苦只有自己知道!
 
究其原因,就是vs2005不支持对ARM的嵌入汇编,也就是说vs2005可以对c/c++的代码进行交叉编译使其能够跑在arm
上,如果你想看的话在command line里面加上/FAs,就可以在编译的同时输出对应该c/c++文件的arm汇编文件,但是
想在C/C++中用__asm{}直接嵌入arm的汇编代码,它就翻脸不认人了!真是让人无语,你自己都能根据c来改成汇编,
现在想给你减轻点负担你反倒给我尥蹶子!
不过X86的嵌入汇编倒是没问题,看来MS还是不怎么把ARM当回事啊!
 
baidu,google找了个遍,找的我都快成斗鸡眼了,好歹皇天不负有心人,在一个msdn的论坛里面让我找到一个3年前的
帖,发帖的哥们碰到了和我一样的问题,有所不同的是这哥们是在eVc4下面,跟帖中明确提到在eVc4和vs2005中都不支
持arm的嵌入汇编,而且gcc中居然也不支持!
但是---vs2005中是可以对纯粹的arm汇编文件进行编译的,当然也可以将c编译生成的obj文件和asm汇编文件生成的obj
文件进行link。
当然arm汇编文件的规则要自定义,实际上就是调用armasm.exe了,为了方便,将这个规则编写成一个vs2005能用的rule
文件,内容如下:
<?xml version="1.0" encoding="utf-8"?>
<VisualStudioToolFile Name="Arm ASM" Version="8.00">
   <Rules>
      <CustomBuildRule
         Name="Arm asm" DisplayName="Arm asm"
         CommandLine="armasm -o &quot;$(IntDir)\$(InputName).obj&quot; [$Inputs] "
         Outputs="$(IntDir)\$(InputName).obj"
         FileExtensions="*.asm"
         ExecutionDescription="Executing tool..."
      >
      <Properties></Properties>
      </CustomBuildRule>
   </Rules>
</VisualStudioToolFile>

将上述内容保存为armasm.rules文件,并在vs2005中
Custom build rules --> Find existing 中进行导入就ok了!
 
剩下的就是编写相应的c/c++文件和asm汇编文件,这里又要注意了,由于采用的是混合编译,而我们都知道编译器在
编译的时候会将函数名阿变量名都做一些修改,而默认采用的c/c++的编译器与armasm.exe的规则很有可能不一样,所以
在link的时候,由于名字更改的规则不一样,就会造成链接不上的问题!
 
如我在一个c文件中引用了一个asm文件里的函数void my_add(int,int,int*),相应在asm文件中定义如下
AREA myadd, CODE, READONLY
 
;void my_add(int, int, int*)
EXPORT my_add
 
my_add
stmdb sp!, {r4-r5, lr}
add  r0, r0, r1 ;r0+r1
str  r0, [r2]
ldmia sp!, {r4-r5, pc}
END
结果在link的时候,死活找不着my_add这个函数,急得我真是...恨不能揪住vs2005的眼皮让他看看清楚!
 
然而,它是没有眼睛的,更没有眼皮...
 
后来将c文件对应的asm文件生成出来后一看,居然名字被改成了 |?my_add@@YAXHHPAH@Z|,连忙把汇编里面的标号也改过来,F7
终于蹦出了可爱的...
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
链接: http://cid-91bd938aa4dc6162.spaces.live.com/blog/cns!91BD938AA4DC6162!157.entry
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值