zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
阅读:5632回复:47

问一个简单的问题,明白人请进!

楼主#
更多 发布于:2005-01-18 14:43
大侠们问一个弱问题,halether.c里声明函数的原型和定义一般放在哪个目录下啊,比如SMDK2410里halether.c里的CS8900DBG_Init()函数是在哪里定义的啊?我在Drivers目录里面文件中加上了这个函数的定义怎么还是编译出错: unresolved external symbol CS8900DBG_Init啊~~~能不能看看怎么回事捏??

[编辑 -  1/18/05 by  zouyingmyfriend]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2005-01-18 15:00
不光是头文件的问题,你需要在你使用的头文件中用extern申明,然后在sources里面加:
TARGETLIBS=$(TARGETPLATROOT)\\LIB\\$(_CPUDEPPATH\\CS8900DBG.LIB
根据地的兄弟们,团结就是力量
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2005-01-18 15:01
TARGETLIBS=$(TARGETPLATROOT)\\LIB\\$(_CPUDEPPATH)\\CS8900DBG.LIB
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地板#
发布于:2005-01-18 15:17
To wxl_50685330大哥:
我知道TARGETLIBS,但我不太清楚SOURCELIBS,请你解释一下它们的区别和用法。
Come on, let us drive the world.
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
地下室#
发布于:2005-01-18 15:23
不光是头文件的问题,你需要在你使用的头文件中用extern申明,然后在sources里面加:
TARGETLIBS=$(TARGETPLATROOT)\LIB\$(_CPUDEPPATH\CS8900DBG.LIB


大哥的意思是用
#ifdef __cplusplus
extern "C" {
#endif
...
...
...
#ifdef __cplusplus
}
#endif
,对吗?
Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2005-01-18 15:56
要不要EXTERN "C"要看是不是在.CPP里面用C的函数

TARGETLIBS和SOURCESLIBS我也没搞清楚,你娃研究一下三。

wwei_wang
兄弟,原来听说你弄好的,你用的loadintchainhandler那个dll有没得啥子需要注意的,好些在问说用giisr就可以加载,自己定义的就不能挂上去,咋个回事?是不是路径放得不对?
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
6楼#
发布于:2005-01-18 16:19
在修改bib文件时,要把自己写的isr dll放到files section里面,不要放在Moudles section里面就行了,否则会加载失败:)))
大哥你说的是这个事儿吧? (我在另外你一个帖子里也灌了)

对了,你前面说
“不光是头文件的问题,你需要在你使用的头文件中用extern申明,....”
用extern声明是什么意思啊?请大哥明示。

Come on, let us drive the world.
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
7楼#
发布于:2005-01-18 16:26
他要用库函数,我说用用EXTERN申明这个函数来自本模块外部三,这下你又都看到了,咋个搞得嘛...刚才写了好多处你娃都没得反应,哥哥手都写得发抖啊:))
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
8楼#
发布于:2005-01-18 18:46
To wxl_50685330:为了我们这些革命兄弟,你辛苦了,代表人民感谢你:))))
To zouyingmyfriend:
兄弟,你查查halether.h文件,halether.c里的函数原型和定义可能在这个文件里面。
Come on, let us drive the world.
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
9楼#
发布于:2005-01-19 10:58
经过多处修改,我重新编译eboot居然不能通过了,出现了著名的错误:NMAKE :  U1073: don't know how to make 'D:/WINCE420/PUBLIC/SMDK~2/WINCE420/smdk2410/cesysgen/oak/lib/ARMV4I/retail/cs8900dbg.lib'
sources文件都已经改正了还是不行,到底什么问题啊。
查了MSDN发现他给的提示我还是不知道怎么改,我发现自己已经有点晕了,不清楚这些驱动文件在CE里面的调用关系,大哥们能不能简单讲一下?



[编辑 -  1/19/05 by  zouyingmyfriend]
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
10楼#
发布于:2005-01-20 13:29
:)这个啊,最直接的办法,它不是报告没找到cs8900dbg.lib吗,那你就把这个东西考到它报告找不到的目录里面这个库在public\\common\\oak\\lib里面
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
11楼#
发布于:2005-01-20 16:17
:)这个啊,最直接的办法,它不是报告没找到cs8900dbg.lib吗,那你就把这个东西考到它报告找不到的目录里面这个库在public\common\oak\lib里面


这个方法治标不治本啊,下次rebuild又出来了:(

不过还是问一个很弱的问题吧,在CE里面各种iobase和Membase是按照什么规则分配的啊,和硬件连接有没有关系,偏移量如何掌握啊,我完全看不懂啊,大哥能不能讲讲?
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
12楼#
发布于:2005-01-21 13:06
我给你说的办法是可行性最好的三,我不知道少配了什么环境变量:))

IOBASE和MEMBASE是用户自己定义的,主要是硬件上定的,你需要和你们的硬件工程师讨论一下

不过CE自己有地址空间的安排,它只能管理512M的空间从0X8000000到0XBFFFFFFF,其中前256MB是可缓存的,后面的是不可缓存的,他们映射到相同的物理地址空间。这些空间之间的映射关系由BSP里面的OEMADDRESSTABEL定义,你可以看看
根据地的兄弟们,团结就是力量
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
13楼#
发布于:2005-01-24 09:23
那么各个设备的驱动都要生成.lib文件,这些文件的生成规则是在哪里定义的啊,在这个定义里面改一下我的驱动,不是应该就能够编译出来了么,只是我找不到这个定义,不知道是哪个makefile还是sources……
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
14楼#
发布于:2005-01-24 10:05
编译规则是在makefile文件里定义的,但是这个文件最好不要改;
sources文件里定义了要编译的源文件,头文件,库,目标文件类型,目标文件名等信息,如果要编译你自己的驱动,修改source文件就可以了。
另外,驱动程序是dll文件,lib文件包含了dll的接口信息。

[编辑 -  1/24/05 by  wwei_wang]
Come on, let us drive the world.
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
15楼#
发布于:2005-01-24 12:23
谢谢哥哥,不过这个概念我已经很清楚了,但是挂在BSP下的Driver目录的各个源程序在编译的时候只有一个不能link,我想是应该改这个不能link的东西的设置,但是我找不到针对这个目录的sources,能不能帮我找到这个sources,改的方法仿照别的驱动是不是就可以啦?
再叙述一下,路径为:D:/WINCE420/PLATFORM/SMDK2410/DRIVERS,驱动程序CS8900dbg不能link,然后显示的错误是NMAKE :  U1073: don't know how to make 'D:/WINCE420/PUBLIC/.../WINCE420/smdk2410/cesysgen/oak/lib/ARMV4I/retail/cs8900dbg.lib',结果显示在link阶段不能连接提示此错误。但是实际上在build阶段已经生成了cs8900dbg.lib这个文件。
这是什么原因呢,强烈困扰中:((((((
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
16楼#
发布于:2005-01-24 13:22
谢谢哥哥,不过这个概念我已经很清楚了,但是挂在BSP下的Driver目录的各个源程序在编译的时候只有一个不能link,我想是应该改这个不能link的东西的设置,但是我找不到针对这个目录的sources,能不能帮我找到这个sources,改的方法仿照别的驱动是不是就可以啦?
再叙述一下,路径为:D:/WINCE420/PLATFORM/SMDK2410/DRIVERS,驱动程序CS8900dbg不能link,然后显示的错误是NMAKE :  U1073: don't know how to make 'D:/WINCE420/PUBLIC/.../WINCE420/smdk2410/cesysgen/oak/lib/ARMV4I/retail/cs8900dbg.lib',结果显示在link阶段不能连接提示此错误。但是实际上在build阶段已经生成了cs8900dbg.lib这个文件。
这是什么原因呢,强烈困扰中:((((((


(1)建议删掉这个驱动目录下在编译过程中生成的子目录,即只保留源程序;
(2)你的驱动目录里面没有source文件?如果真的没有,仿照别的驱动里面的source生成一个就行了。注意:加上编译时所需的一些库文件及其路径。
Come on, let us drive the world.
zouyingmyfriend
驱动牛犊
驱动牛犊
  • 注册日期2003-11-09
  • 最后登录2007-09-14
  • 粉丝0
  • 关注0
  • 积分83分
  • 威望12点
  • 贡献值0点
  • 好评度3点
  • 原创分0分
  • 专家分0分
17楼#
发布于:2005-01-24 14:35
很遗憾哥哥,这样做没有任何效果,还是一样的不能编译。明明已经生成了cs8900dbg.lib却无法连接link,真是诧异,一定是在哪里还需要设置,另外我的sources也是改得和Nandflsh的一样,奇怪,nand就可以link,但是这个就不行,55555555555555555555
wxl_50685330
论坛版主
论坛版主
  • 注册日期2002-11-19
  • 最后登录2018-09-25
  • 粉丝0
  • 关注0
  • 积分1000分
  • 威望521点
  • 贡献值0点
  • 好评度419点
  • 原创分0分
  • 专家分0分
18楼#
发布于:2005-01-25 13:35
哇,怎么说话都变成一大段一大段了:)))

你的那个CS8900.LIB编译出来放到哪儿了?如果没放对地方就不行三,你是不是建的编译环境没有给到PUBLIC\\YOURPLATFORM?记住,你的LIB要考到PUBLIC\\YOURPLATFORM\\cesysgen\\oak\\lib\\ARMV4I\\retail
那个YOURPLATFORM就是你在PB里面建的平台的名字,不是COMMON哈
根据地的兄弟们,团结就是力量
wwei_wang
驱动大牛
驱动大牛
  • 注册日期2002-06-07
  • 最后登录2006-06-23
  • 粉丝0
  • 关注0
  • 积分77分
  • 威望9点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
19楼#
发布于:2005-01-25 13:43
几天不见了,大哥终于又显身了:)))
Come on, let us drive the world.
上一页
游客

返回顶部