嵌入式开发者社区

标题: 纯C的问题 ,结构体的 [打印本页]

作者: 新手上路    时间: 2016-6-7 09:13
标题: 纯C的问题 ,结构体的
EMIFANANDInit(NandInfo_t *nandInfo)
{
nandTimingInfo = (EMIFANANDTimingInfo_t *) nandInfo->hNandCtrlInfo->hNandTimingInfo;
}
这句话怎么理解呢?谁能给小弟详细解释一下,谢谢
下面是对应的结构体
& z! E9 q# }+ X* x0 q8 C% V5 @
" T% D8 U  m8 W* X/ S. }

2 y9 L  v- `; t. O6 B& h8 ^
typedef struct _EMIFA_NAND_TIMING_INFO_      
{unsigned int writeSetup;
    unsigned int writeStrobe;
    unsigned int writeHold;
    unsigned int readSetup;
    unsigned int readStrobe;
    unsigned int readHold;
    unsigned int turnAround;
}
EMIFANANDTimingInfo_t;
typedef struct _NAND_INFO_
{
    unsigned int dataRegAddr;
    /* ADDR Register address */
    unsigned int addrRegAddr;
    /* CMD Register address */
    unsigned int cmdRegAddr;
    /* Pointer to Memory Controller Structure */
    struct _NAND_CTRL_INFO_ *hNandCtrlInfo;
    /* Pointer to ECC Structure */
    struct _NAND_ECC_INFO_ *hNandEccInfo;
    /* Pointer to DMA Structure */
    struct _NAND_DMA_INFO_ *hNandDmaInfo;
}
NandInfo_t;

! V5 T/ e5 O' m7 e
typedef struct _NAND_CTRL_INFO_
{
    unsigned int (*WaitPinStatusGet)(NandInfo_t *nandInfo);
    /* Timing info for the device and the controller */
    void *hNandTimingInfo;
    /* Base address of the controller */
    unsigned int baseAddr;
    /* ECC supported by the controller */
    unsigned int eccSupported;
    /* Wait pin where NAND dev R/B pin is connected  */  
    unsigned int chipSelectBaseAddr[NAND_MAX_CHIP_SELECTS];

1 @6 P3 o0 `0 ^( S$ F
}
NandCtrlInfo_t;

# g. M0 T! C4 F& w
* u& v6 \6 |) M! o, R4 L

作者: Jackindata    时间: 2016-6-8 16:31
提取结构体中的 hNandTimingInfo 到一个临时变量,结构体中的这个值结构体声明里有注释解释了。: m4 l/ _3 s! y5 g7 y" o

5 P) @3 u. }- ]2 U# e: {其实不是很确定你的疑问是什么。
作者: 新手上路    时间: 2016-6-8 16:37
Jackindata 发表于 2016-6-8 16:31
! l  d6 Z# N( o: `* F$ o提取结构体中的 hNandTimingInfo 到一个临时变量,结构体中的这个值结构体声明里有注释解释了。
4 X+ m4 ?$ }: B9 X" w! C+ a  ?) b8 h/ E5 o
其实不是 ...

, |+ c# Z. C* k; v; V9 E+ |9 M% q您能给我解释一下 赋值运行的过程吗, 越详细越好 ,谢谢
作者: Jackindata    时间: 2016-6-8 17:11
(EMIFANANDTimingInfo_t *) nandInfo->hNandCtrlInfo->hNandTimingInfo;
+ P7 @) H' I( u
这里箭头符号
->
用于结构体指针访问结构体成员,而 hNandCtrlInfo 也是一个结构体指针,可以继续访问其结构体成员 hNandTimingInfo。4 @! Q& K! G. @# q

: y9 J( M4 d$ u7 Z这个语句也可以这样写:* k6 Q( q# Y; B7 f$ {+ G
  1. ; u+ ^( |* D, Z) Z2 O+ |
  2. struct _NAND_CTRL_INFO_ *val1 = (EMIFANANDTimingInfo_t *) nandInfo->hNandCtrlInfo;9 V5 X/ ~. C$ y+ q/ Z% e) o: {
  3. void *val2 = val1->hNandTimingInfo;
复制代码

作者: 希望缄默    时间: 2016-6-11 11:40
Jackindata 发表于 2016-6-8 17:11, A+ F) \7 Q9 s% |+ K- E
这里箭头符号用于结构体指针访问结构体成员,而 hNandCtrlInfo 也是一个结构体指针,可以继续访问其结构体 ...
& _. G( O6 X+ _) B5 E8 d5 t' Y8 W3 ~





欢迎光临 嵌入式开发者社区 (https://www.51ele.net/) Powered by Discuz! X3.4