小弟在看串口驱动的PDD层时,有以下问题不清楚,请高手帮助解决一下
先谢谢啦
1.LOOKUP_TBL 是否结构体,具体定义是什么
2.PHYSICAL_ADDRESS 是否结构体,具体定义是什么
3.HalTranslateBusAddress
4.为什么ioPortBase=(PUCHAR)MmMapIoSpace(ioPhysicalBase,size,FALSE)
后又在else中 ioPortBase=(PHCHAR)ioPhysicalBase.lowPart;
5.PS2410_UART_INFO
6.SETREG CLEARREG
7.RegQueryValueEx
8.对dwDatasize赋值的意义
PC_REG_DEVINDEX_VAL_LEN
PC_REG_IRQ_VAL_LEN
PC_REG_IOBASE_VAL_LEN
PC_REG_IOLEN_VAL_LEN
9.if(regError==ERROR_SUCCESS)有三个
dwDataSize赋值3次
10.pHWHead是什么指针
看LocalAlloc PSER_INFO PHWHead
11.ppBootArgs作用是什么?
pHWHead为什么可以指到ppBootArgs:pHWHead->ppBootArgs
12.PHYSICAL_ADDRESS phySicalAddress.LowPart
13.为什么在ser2410_ser.c中调用了ser2410_hw.c的函数,但是ser2410_ser.c却没有包含ser2410_hw.c的头
souce insight 能找到定义处的我用在这问吗??
不知道楼主看的是wince5还是wince6还是什么代码。但这么多分,我还是很感兴趣的。
1.LOOKUP_TBL 是否结构体,具体定义是什么
是结构体,定义如下:
typedef struct __LOOKUP_TBL {
ULONG Size;
PPAIRS Table;
} LOOKUP_TBL, *PLOOKUP_TBL;
2.PHYSICAL_ADDRESS 是否结构体,具体定义是什么
是
typedef union _LARGE_INTEGER {
struct {
DWORD LowPart;
LONG HighPart;
};
struct {
DWORD LowPart;
LONG HighPart;
} u;
typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
3.HalTranslateBusAddress
干什么?
4.为什么ioPortBase=(PUCHAR)MmMapIoSpace(ioPhysicalBase,size,FALSE)
后又在else中 ioPortBase=(PHCHAR)ioPhysicalBase.lowPart;
什么地方的代码?能提供路径嘛?
5.PS2410_UART_INFO
6.SETREG CLEARREG
7.RegQueryValueEx
8.对dwDatasize赋值的意义
PC_REG_DEVINDEX_VAL_LEN
PC_REG_IRQ_VAL_LEN
PC_REG_IOBASE_VAL_LEN
PC_REG_IOLEN_VAL_LEN
在PB里面肯定可以找到定义的
9.if(regError==ERROR_SUCCESS)有三个
dwDataSize赋值3次
10.pHWHead是什么指针
看LocalAlloc PSER_INFO PHWHead
11.ppBootArgs作用是什么?
pHWHead为什么可以指到ppBootArgs:pHWHead->ppBootArgs
12.PHYSICAL_ADDRESS phySicalAddress.LowPart
13.为什么在ser2410_ser.c中调用了ser2410_hw.c的函数,但是ser2410_ser.c却没有包含ser2410_hw.c的头
只要包含.h就可以了吧,为什么非要包含.c的头?
1.LOOKUP_TBL 是否结构体,具体定义是什么
-----------------我没有去找LOOKUP_TBL 所在的位置,但是从下表可以看出BaudPairs[BAUD_TABLE_SIZE]是结构体数组,所以LOOKUP_TBL 一定是个结构体变量或者结构体指针(把源文件的头文件一个个打开,一定可以找到LOOKUP_TBL 这个东西)
PAIRS BaudPairs[BAUD_TABLE_SIZE] = {-------------结构体数组
{50, 2307},
{75, 1538},
{110, 1049},
{135, 858},
{150, 769},
{300, 384},
{600, 192},
{1200, 96},
{1800, 64},
{2000, 58},
{2400, 48},
{3600, 32},
{4800, 24},
{7200, 16},
{9600, 12},
{12800, 9},
{14400, 8},
{19200, 6},
{23040, 5},
{28800, 4},
{38400, 3},
{57600, 2},
{115200, 1}
};
2.PHYSICAL_ADDRESS 是否结构体,具体定义是什么
-----------------C:\WINCE500\PUBLIC\COMMON\DDK\INC\ceddk.h有如下定义
------------------typedef LARGE_INTEGER PHYSICAL_ADDRESS, *PPHYSICAL_ADDRESS;
3.HalTranslateBusAddress
--------------同上一个ceddk.h有如下定义
NTHALAPI
BOOLEAN
HalTranslateBusAddress(
IN INTERFACE_TYPE InterfaceType,
IN ULONG BusNumber,
IN PHYSICAL_ADDRESS BusAddress,
IN OUT PULONG AddressSpace,
OUT PPHYSICAL_ADDRESS TranslatedAddress
);
4.为什么ioPortBase=(PUCHAR)MmMapIoSpace(ioPhysicalBase,size,FALSE)
后又在else中 ioPortBase=(PHCHAR)ioPhysicalBase.lowPart;
--------------不同的条件,自然有不同的内存分配方法
5.PS2410_UART_INFO
--------------------------在该文件所包含的一个头文件中,是个结构体指针,具体在哪里楼主一个一个找找。
6.SETREG CLEARREG
------------------在s2410.h中
#define SETREG(pInfo, reg, value) (pInfo->s2410SerReg->reg |= value)
#define CLEARREG(pInfo, reg, value) (pInfo->s2410SerReg->reg &= ~value)
7.RegQueryValueEx
-----------------------看看mSDN
8.对dwDatasize赋值的意义
PC_REG_DEVINDEX_VAL_LEN
PC_REG_IRQ_VAL_LEN
PC_REG_IOBASE_VAL_LEN
PC_REG_IOLEN_VAL_LEN
-----------------------------------ser2410.h
// Here are the names of the values stored in the registry
#define PC_REG_IRQ_VAL_NAME TEXT("IRQ")
#define PC_REG_IRQ_VAL_LEN sizeof( DWORD )
#define PC_REG_IOBASE_VAL_NAME TEXT("IoBase")
#define PC_REG_IOBASE_VAL_LEN sizeof( DWORD )
#define PC_REG_IOLEN_VAL_NAME TEXT("IoLen")
#define PC_REG_IOLEN_VAL_LEN sizeof( DWORD )
#define PC_REG_CONFIGBASE_VAL_NAME TEXT("ConfigBase")
#define PC_REG_CONFIGBASE_VAL_LEN sizeof( DWORD )
#define PC_REG_CONFIGLEN_VAL_NAME TEXT("ConfigLen")
#define PC_REG_CONFIGLEN_VAL_LEN sizeof( DWORD )
#define PC_REG_DMA_VAL_NAME TEXT("DMA")
#define PC_REG_DMA_VAL_LEN sizeof( DWORD )
#define PC_REG_DEVINDEX_VAL_NAME TEXT("DeviceArrayIndex")
#define PC_REG_DEVINDEX_VAL_LEN sizeof( DWORD )
9.if(regError==ERROR_SUCCESS)有三个
dwDataSize赋值3次
-------------------------------------------------------------
每一次赋值之后都出现如下函数,这就是原因。
regError = RegQueryValueEx(
hKey,
PC_REG_DEVINDEX_VAL_NAME,
NULL,
NULL,
(LPBYTE)(&pHWHead->dwDevIndex),
&dwDataSize);
10.pHWHead是什么指针
看LocalAlloc PSER_INFO PHWHead
----------------------------------希望楼主看看包含的头文件,不再赘述
11.ppBootArgs作用是什么?
pHWHead为什么可以指到ppBootArgs:pHWHead->ppBootArgs
-----------------------------
// Now map the bootargs structure itself
PhysicalAddress.LowPart = (DWORD) *ppBootArgs;
12.PHYSICAL_ADDRESS phySicalAddress.LowPart
---------------------------结构体成员!
13.为什么在ser2410_ser.c中调用了ser2410_hw.c的函数,但是ser2410_ser.c却没有包含ser2410_hw.c的头
----------------------------起初我也对这个问题纳闷。
昨晚我重新看了代码,发现这几个文件都包含了#include ;这个就是巧妙所在,这个头文件把各个文件的某些函数联系起来。
------------------楼主,昨晚回去玩游戏了。网速又慢,不知道怎么回事,eeworld登陆超慢。我上不了就和同事玩CS到凌晨了。
哈哈
这个问题还是比较有价值的。
串口驱动可以告一段落了。
老大昨天又叫我做CAmera。
从这个月学习WINCE的曲折过程我体会到,要学好WINCE,
C语言,数据结构以及ARM的体系结构一定要非常了解。
-------------------------------------------------哈哈我以前大学留下来的后遗症。
出来工作一个月最大感受:基础有多扎实,就决定了能走多远!
散分,
这是我看串口的一部分问题,有些没自己查就贴上来了,sorry,最近忙于一个项目
看的时间实在太少
我先慢慢消化一下上面的答案,再接着看完串口
感谢各位高手解答
请各位高手关注:100分求助串口驱动问题2
还有 在MDD层中有个链表,一直看不清它在MDD中的作用,是怎么实现的
恶补了一下链表的知识,但是跟这个总联系不上
引用: 引用 7 楼 wangxin_801115 的回复:
还有 在MDD层中有个链表,一直看不清它在MDD中的作用,是怎么实现的
恶补了一下链表的知识,但是跟这个总联系不上
------------------------哪个链表?贴出来看看。
EnterCriticalSection(&(pSerialHead->OpenCS));
InsertHeadList(&pSerialHead->OpenList,
&pOpenHead->llist);
请问三楼在哪找到LOOKUP_TBL结构体的定义的??