4301|11

77

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

SOURCES书写问题。。 [复制链接]

看门狗驱动程序
程序部分:
  1.                
  2. PHYSICAL_ADDRESS RegPA;
  3. if (v_pWTDregs == NULL)
  4. {
  5.    RegPA.QuadPart = WDTIM_BASE;
  6.    v_pWTDregs = (volatile WDT_REGS_T *)MmMapIoSpace(RegPA,sizeof (WDT_REGS_T), FALSE);
  7.    ETAILMSG(1, (TEXT("GPIO inited!\r\n")));
  8. }
复制代码

头文件部分:
  1. #include

  2. #include
  3. #include
  4. #include
  5. #include
  6. #include
  7. #include
  8. #include
  9. #include
复制代码

编译出现如下错误:
error C2275: 'PHYSICAL_ADDRESS' : illegal use of this type as an expression
error C2146: syntax error : missing ';' before identifier 'RegPA'
error C2065: 'RegPA' : undeclared identifier
error C2224: left of '.QuadPart' must have struct/union type
error C2440: 'function' : cannot convert from 'int' to 'PHYSICAL_ADDRESS'
warning C4024: 'MmMapIoSpace' : different types for formal and actual parameter 1
以下是我的SOURCES

  1. TARGETNAME= watchdog

  2. RELEASETYPE=PLATFORM
  3. DEFFILE=watchdog.def
  4. PREPROCESSDEFFILE=1
  5. TARGETTYPE=DYNLINK
  6. DLLENTRY=DllEntry

  7. TARGETLIBS= \
  8.                 $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ddgpe.lib

  9. SOURCELIBS= \
  10.                 $(_COMMONOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib \
  11.                 $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

  12. INCLUDES= ..\..\inc;$(INCLUDES)
  13. SOURCES= \
  14.     WTD.c \
复制代码

我在其他驱动也都用过MmMapIoSpace这个的,但看门狗这个程序却不知道为什么编译不通过。。。

最新回复

上边的错误已经修改过来,现在出现如下错误 BUILD: [00:0000000056:PROGC ] Building LINK Pass in D:\WINCE600\PLATFORM\LPC32XX\src\drivers\WATCHDOG\ directory. BUILD: [01:0000000067:PROGC ] Linking D:\WINCE600\platform\LPC32XX\target\ARMV4I\debug\watchdog.dll BUILD: [01:0000000086:ERRORE] WTD.obj : error LNK2001: unresolved external symbol dpCurSettings BUILD: [01:0000000087:ERRORE] D:\WINCE600\platform\LPC32XX\target\ARMV4I\debug\watchdog.dll : fatal error LNK1120: 1 unresolved externals 复制代码 我的watchdog.def文件 LIBRARY        watchdog EXPORTS                 WTD_Init                 WTD_Deinit                 WTD_Open                 WTD_Close                 WTD_Read                 WTD_Write                 WTD_Seek                 WTD_IOControl                 WTD_PowerDown                 WTD_PowerUp复制代码  详情 回复 发表于 2008-11-21 18:20
点赞 关注

回复
举报

80

帖子

0

TA的资源

一粒金砂(初级)

沙发
 
问题比较... 有点看不明白~
 
 

回复

69

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
把CEDDK.lib放到TARGETLIBS下面试试?
 
 
 

回复

82

帖子

0

TA的资源

一粒金砂(初级)

4
 
引用 2 楼 hzdysymbol 的回复:
把CEDDK.lib放到TARGETLIBS下面试试?

开始就放那边的,不行才换下边。也都不行。。
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

5
 
你这是C的还是C++的,在PHYSICAL_ADDRESS RegPA;之前是否还有代码?
 
 
 

回复

73

帖子

0

TA的资源

一粒金砂(初级)

6
 
C语言的,是在WTD_Init函数里调用了

  1. DWORD WTD_Init(DWORD dwContext)
  2. {
  3.                 HANDLE  hThread;
  4.                 SLEEP_TIME = 100;
  5.                 PHYSICAL_ADDRESS RegPA;
  6.                
  7.                
  8.                 RETAILMSG(1,(TEXT("!!!!!!!!!!!!!!!!!!!!!!!Go into WTD_Init !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n")));
  9.                
  10.                 if (v_pWTDregs == NULL)
  11.                 {
  12.                         RegPA.QuadPart = WDTIM_BASE;
  13.                         v_pWTDregs = (volatile WDT_REGS_T *)MmMapIoSpace(RegPA,sizeof (WDT_REGS_T), FALSE);
  14.             RETAILMSG(1, (TEXT("WTD inited!\r\n")));
  15.                 }
  16.                 g_OpenCount = 0;
  17. /*
  18.                 //设置watchdog并开启watchdog的程序
  19.                           v_pWTDregs->rWTCON=0x7F81;//定时控制寄存器
  20.               v_pWTDregs->rWTDAT=0x8000;//定时数据寄存器,这个值得在使能定时器前给值
  21.               v_pWTDregs->rWTCON|=1<<5;//使能定时器
  22. */
  23.                 //Disable WDT ,且释放reset
  24.     v_pWTDregs->wdtim_ctrl = 0x00;   
  25.     v_pWTDregs->wdtim_ctrl = 0x02;
  26.     v_pWTDregs->wdtim_ctrl = 0x00;
  27.     Wdtsetup(); //初始化看门狗
  28.     hThread = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)FeedDog,NULL,0,NULL);//创建线程
  29.                 RETAILMSG(1,(TEXT("!!!!!!!!!!!!!!!!!!!!!!!Go into WTD_Init end!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!\n")));
  30.                 return TRUE;               
  31. }
复制代码

 
 
 

回复

78

帖子

0

TA的资源

一粒金砂(初级)

7
 
2. Sources文件

在WinCE BSP中会看到很多sources文件,一般会和源代码放在同一个目录,当然不是绝对的。这些sources文件里面就是定义了一些宏,主要用于告诉Build.exe在编译源代码的时候应该如何编译和链接,告诉Nmake.exe如何编译源代码以及最后生成什么类型的文件。



下面具体介绍一下:



TARGETNAME:最后编译完后生成的目标文件的名字,不包括扩展名。

TARGETTYPE:生成的文件的类型。具体值如下:

        LIBRARY,一个.lib文件

        DYNLINK,一个.dll文件

        PROGRAM,一个.exe文件

RELEASETYPE:该宏设置两个环境变量RELEASEDIR和RELEASELIBDIR,就是设置编译后生成文件存放的路径。具体值如下:

        PLATFORM,生成的文件在PLATFORM\\

        LOCAL,生成的文件在当前路径下

        CUSTOM,生成的文件在TARGETPATH指定的位置

        MANAGED,生成的文件在%_PROJECTROOT%\OAK\\Managed

        OAK, SDK, DDK,生成的文件在%_PROJECTROOT%\Oak\   

TARGETPATH:当上面的RELEASETYPE=CUSTOM的时候,该宏指定路径

SOURCELIBS:静态链接。函数的实体被链接过来,生成一份拷贝

TARGETLIBS:动态链接。函数的地址被链接过来,系统执行时会加载该库

INCLUDES:指定额外的要搜索的头文件的路径

SOURCES:指定要被编译的文件

ADEFINES:指定汇编器要使用的参数

CDEFINES:指定编译器要使用的参数

LDEFINES:指定连接器要使用的参数

RDEFINES:指定资源编译器Rc.exe的参数

DLLENTRY:指定dll的入口函数

DEFFILE:指定该模块的.def文件

EXEENTRY:指定可执行文件的入口函数

SKIPBUILD:不做实际的build操作,直接返回成功

WINCECOD:编译后生成一个.cod的汇编文件,用于查看汇编代码调试

WINCECPU:用于说明为指定的CPU编译,这样被编译出来的目标文件会被放在_TGTCPU环境变量所指定的子目录下面,一般该宏在sources.cmn中定义。

WINCEMAP:编译后生成一个.map文件,用于调试

WINCEOEM:设置该值表示需要使用WinCE下的一些公用的库和头文件,该值一般在BSP中的sources.cmn中定义。

WINCETARGETFILE0:用于告诉编译系统在编译当前路径下的源码文件之前,要先由Build.exe编译的目标文件。

WINCETARGETFILES:用于告诉编译系统在链接当前路径下所有的目标文件之前,要先由Build.exe编译的目标文件。

WINCE_OVERRIDE_CFLAGS:用于定义用户自己的编译器参数取代默认的编译器参数。





举个例子:

TARGETNAME=serial_smdk2410

TARGETTYPE=DYNLINK

RELEASETYPE=PLATFORM

TARGETLIBS=$(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\coredll.lib \

        $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\ceddk.lib



SOURCELIBS=$(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\serpddcm.lib \

        $(_SYSGENOAKROOT)\lib\$(_CPUINDPATH)\com_mdd2.lib



DEFFILE=serial.def

DLLENTRY=_DllEntryCRTStartup



SOURCES= ser_smdk2410.cpp \

        pdds3c2410_ser.cpp



需要编译的文件为ser_smdk2410.cpp和pdds3c2410_ser.cpp,DEF文件为serial.def,DLL的入口函数是_DllEntryCRTStartup,静态连接serpddcm.lib和com_mdd2.lib两个库,动态链接coredll.lib和ceddk.lib两个库,最终编译为dll文件,文件名为serial_smdk2410.dll。





最后总结一下,Dirs文件会和Sources文件配合使用,但是他们不可能存在同一个目录下面。Dirs文件指定编译目录,Sources文件指定如何编译。

——找一个MVP写的博客转给你看看。
 
 
 

回复

57

帖子

0

TA的资源

一粒金砂(初级)

8
 
SLEEP_TIME = 100;
放在 PHYSICAL_ADDRESS RegPA 的后面去.
 
 
 

回复

80

帖子

0

TA的资源

一粒金砂(初级)

9
 
'PHYSICAL_ADDRESS' 是个什么东东?

这明显是编译器没识别这个是啥玩意,所以出错了。
 
 
 

回复

61

帖子

0

TA的资源

一粒金砂(初级)

10
 
引用 7 楼 eagle1597 的回复:
SLEEP_TIME = 100;
放在 PHYSICAL_ADDRESS RegPA 的后面去.

真的傻了。。。竟然把变量声明放在后面。。。我竟然犯了这样的低级错误。。
谢谢你,谢谢大家
 
 
 

回复

86

帖子

0

TA的资源

一粒金砂(初级)

11
 
6楼的,你的资料很详细啊。。不错,也正在找 这个
 
 
 

回复

66

帖子

0

TA的资源

一粒金砂(初级)

12
 
上边的错误已经修改过来,现在出现如下错误

  1. BUILD: [00:0000000056:PROGC ] Building LINK Pass in D:\WINCE600\PLATFORM\LPC32XX\src\drivers\WATCHDOG\ directory.
  2. BUILD: [01:0000000067:PROGC ] Linking D:\WINCE600\platform\LPC32XX\target\ARMV4I\debug\watchdog.dll
  3. BUILD: [01:0000000086:ERRORE] WTD.obj : error LNK2001: unresolved external symbol dpCurSettings
  4. BUILD: [01:0000000087:ERRORE] D:\WINCE600\platform\LPC32XX\target\ARMV4I\debug\watchdog.dll : fatal error LNK1120: 1 unresolved externals
复制代码

我的watchdog.def文件


  1. LIBRARY        watchdog

  2. EXPORTS
  3.                 WTD_Init
  4.                 WTD_Deinit
  5.                 WTD_Open
  6.                 WTD_Close
  7.                 WTD_Read
  8.                 WTD_Write
  9.                 WTD_Seek
  10.                 WTD_IOControl
  11.                 WTD_PowerDown
  12.                 WTD_PowerUp
复制代码
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条
ADI &文晔 探索季第一站,邀您在活动帖跟帖,ADI资深工程师将与您一道寻求解决之道! ...
春晚,最出圈当属穿着棉马甲跳秧歌的机器人”秧Bot”。
转手绢、飞手绢、变换队形,精准度和稳定性甚至超越人类,这背后少不了电机控制技术。

查看 »

 
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
快速回复 返回顶部 返回列表