3064|2

75

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

eVC中如何调用汇编代码实现的函数 [复制链接]

由于项目需要,将几个函数用ARM汇编代码实现,然后在C代码中调用。

  [1] 我将DrawFunc.asm加入到工程中:

        AREA        |.text|, CODE, ARM

        EXPORT DrawLine
        EXPORT DrawRound
DrawLine        PROC
        nop
        mov R1, #5
        nop
        ENDP

DrawRound        PROC
        nop
        mov R1, #10
        nop
        ENDP
        END

  [2] 在该文件的Settings-->Custom Build中设置了汇编编译命令:
     Commands:  armasm -cpu xscale "$(InputPath)" "$(IntDir)/$(InputName).obj" -list "$(IntDir)/$(InputName).lst";  
     Outputs:  $(IntDir)/$(InputName).obj

  [3] 然后在.cpp文件中调用该函数:
       extern void __stdcall DrawLine();
       extern void __stdcall DrawRound();
         ......
        DrawLine();
        DrawRound();
         ......

  [4] 编译该工程,结果出现Link错误:
       error LNK2019: unresolved external symbol "DrawRound(void)"
       error LNK2019: unresolved external symbol "DrawLine(void)"

       在ARMV4Rel目录下也确实生成了DrawFunc.obj文件,但不知道为什么
       会Link错误。即使在工程的Settings-->Link-->Object/Library Modules中加入DrawFunc.obj目标文件编译,还是出现该问题;

  [5]  如果我将另外一个C++工程中生成的.obj加入本工程,则可以调用.obj中的函数;


最新回复

估计是调用规范不同的关系。我在.c文件中调用asm实现的函数只要先定义 extern void xxx();就可以。不过在.cpp文件中调用,应该声明形式如下: extern "C" void xxx();  详情 回复 发表于 2007-8-30 23:14
点赞 关注

回复
举报

67

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
DLL可以啊
不同语言写的code之间调用利用DLL
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
估计是调用规范不同的关系。我在.c文件中调用asm实现的函数只要先定义 extern void xxx();就可以。不过在.cpp文件中调用,应该声明形式如下: extern "C" void xxx();
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表