wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:2811回复:26

wxl_50685330,帮忙!

楼主#
更多 发布于:2004-08-11 17:24
我用的是evc4.0,想在c中嵌入汇编,但是在__asm{}中使用寄存器r0到r15时,编译出错,说是没有声明这些寄存器,还有arm汇编指令它也不能识别,这是怎么回事呀?
wxl_50685330,帮帮我呀!拜托了!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2004-08-12 14:05
靠阿,真的不行啊:),原来我试过x86(编译时选择编译的指令,在build的configurations里面选)可以内嵌,今天我又试了试,mips,sh都可以,就是arm不行,是没做还是免费的他不给啊...
算了,兄弟,不行就没办法了:(,不内嵌可以不?用汇编写成一个函数,在要内嵌的地方调用,这样可以不?没办法:)我也只有这个办法了。哪位兄弟还有更好的???
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2004-08-12 20:47
wxl_50685330,我不会在在evc4.0中写汇编程序,听说很麻烦,要自己写头文件什么的,而且要写成宏的形式!唉,我上网找了好久了,都没有这方面的程序例子!:(自己不会写呀,evc开发包中也没有例程!:(
哇哇哇哇,这怎么办呀?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
地板#
发布于:2004-08-13 12:54
挺住,革命道路总是有起伏的喔,哈哈

这样,我给你一个arm汇编的框架,在这个框架中的头文件都是ce带的,你可以用pb带的armasm来编译,生成obj文件(也可以使用build来编译,最后都使用的armasm,这个compiler在$(_winceroot)\\SDK\\BIN\\I386下面)。你可以输出一些函数,然后在你的c代码中调用,这样可以代替内嵌汇编的功能,good luck!

其中的kxarm.h定义了使用的宏,在ce的$(_winceroot)\\PUBLIC\\COMMON\\SDK\\INC里面。
附件名称/大小 下载次数 最后更新
2004-08-13_armasm_frame.s (1KB)  26
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2004-08-13 20:49
谢谢wxl_50685330!我明天去试试!:)
怎么给你加分呀?^!^
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2004-08-14 08:02
我没有装wince呀!!:(
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2004-08-14 16:34
wxl_50685330,我在你给我的文件中编写了一个加法函数,并用armasm编译得到add.o,我将add.o加入到evc4.0中的一个工程中,但是编译就出错了呀!
错误如下:
tasm.obj : error LNK2019: unresolved external symbol "int __cdecl ADD(void)" (?ADD@@YAHXZ) referenced in function "long __cdecl WndProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WndProc@@YAJPAUHWND__@@IIJ@Z)
emulatorDbg/tasm.exe : fatal error LNK1120: 1 unresolved externals
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2004-08-16 12:41
你试试在你用这个函数的文件中申明extern func(),记得用include .obj,再试试 good luck
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2004-08-16 22:02
wxl_50685330,我用armasm编译得到的是*.o文件呀不是obj的!!:)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2004-08-20 13:03
:)这两天有事,不知道你解决没?应该不会啊,build应该是调用armasm来汇编的,你能安wince .net 4.2吗?如果有用build可以编译出目标文件,你看看armasm的参数能不能调整输出文件格式
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2004-08-20 21:09
wxl_50685330,加上include也不行,编译的时候说这个文件是二进制的,是未确定的!!:(

我们头也不知道问谁了,他对我说,要在操作系统源码中嵌入汇编才行呀!!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2004-08-23 13:21
......等等,我想想:)
    你们头说一定要嵌汇编?对于这个要求你建议他如果实在不行还是用汇编写函数,在需要调用的时候使用函数,这样效果和内嵌汇编是一样的,最多多了函数调用开销,如果这段代码不是非常敏感的话关系不大。如果调用频率太高以致函数调用开销显著的话,再想其他办法,比如找支持内嵌ARM汇编的编译器。
    对于连接我可能说错了一点,用include xx.obj可能不对(不好意思),这样,你在工程里边加入这个obj文件,再build
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2004-08-23 22:14
呵呵,你说的这种方法,我试过了,还是编译不通!:)
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2004-08-23 22:16
呵呵,我们头现在没有时间考虑这件事情了,现在又忙别的了,前几天还在催我,现在又不催了,又让我做别的东东了,说等到想到解决的方法再做!!!
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2004-08-24 12:59
好吧,等下次遇到这个问题我再看看怎么办,兄弟如果解决了也告诉大家一声,good luck
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2004-08-24 17:01
刚试验完,可以了,在project里选setting,切换到link后把xxx.obj加到object/library modules,然后在引用汇编函数的c文件里面用
extern "C" {
extern function();
}
声明就可以用了
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2004-08-31 10:42
wxl_50685330,我按照你说的做了,但是还是不行呀! :(
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2004-08-31 10:44
wxl_50685330,是不是我编译得到的obj文件不对呀?给我一个正确的obj文件试试吧!:)
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2004-08-31 13:03
哇,还没弄好啊:),努力努力!

把obj文件放到c:\下(当然可在其他地方,但目录名字不要有空格),然后再evc里面选project->add to project->files,选中这个Obj文件,然后在你要引用的程序里面写:
extern "C" {
extern DWORD ReadMemRegBy32Bits(DWORD volatile* Addr);
}
然后可以直接引用如下:
DWORD data;
data = ReadMemRegBy32Bits((volatile unsigned long *)0xa0022000);

这只是我测试的例子,你试好了自己改函数吧
附件名称/大小 下载次数 最后更新
2004-08-31_regmanipulate.obj (1KB)  8
根据地的兄弟们,团结就是力量
wjp_hz
驱动牛犊
驱动牛犊
  • 注册日期2004-08-10
  • 最后登录2004-09-03
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2004-08-31 21:44
呵呵,俺明天去试试看!!^!^
上一页
游客

返回顶部