100分求助串口驱动问题

ghjkl   2008-8-20 08:38 楼主
小弟在看串口驱动的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的头

回复评论 (10)

楼上的会用souce insight吗
点赞  2008-8-20 08:46
souce insight 能找到定义处的我用在这问吗??
点赞  2008-8-20 09:30
不知道楼主看的是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的头?
点赞  2008-8-20 10:24
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到凌晨了。
哈哈
点赞  2008-8-20 10:40
这个问题还是比较有价值的。
串口驱动可以告一段落了。
老大昨天又叫我做CAmera。

从这个月学习WINCE的曲折过程我体会到,要学好WINCE,
C语言,数据结构以及ARM的体系结构一定要非常了解。
-------------------------------------------------哈哈我以前大学留下来的后遗症。
出来工作一个月最大感受:基础有多扎实,就决定了能走多远!
点赞  2008-8-20 10:51
散分,
这是我看串口的一部分问题,有些没自己查就贴上来了,sorry,最近忙于一个项目
看的时间实在太少
我先慢慢消化一下上面的答案,再接着看完串口
感谢各位高手解答
请各位高手关注:100分求助串口驱动问题2
点赞  2008-8-20 12:00
还有 在MDD层中有个链表,一直看不清它在MDD中的作用,是怎么实现的
恶补了一下链表的知识,但是跟这个总联系不上
点赞  2008-8-20 12:02
引用: 引用 7 楼 wangxin_801115 的回复:
还有 在MDD层中有个链表,一直看不清它在MDD中的作用,是怎么实现的
恶补了一下链表的知识,但是跟这个总联系不上


------------------------哪个链表?贴出来看看。
点赞  2008-8-20 12:48
    EnterCriticalSection(&(pSerialHead->OpenCS));
    InsertHeadList(&pSerialHead->OpenList,
                   &pOpenHead->llist);
点赞  2008-8-20 14:17
请问三楼在哪找到LOOKUP_TBL结构体的定义的??
点赞  2008-8-20 14:28
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复