TI中文支持网
TI专业的中文技术问题搜集分享网站

这里我问些基础性的问题。比如结构体指针强制转换

比如在主机Central.c文件中有gapCentralRole_ProcessGAPMsg函数,传来一个gapEventHdr_t *pMsg类型的指针变量。指向gapEventHdr_t结构体。

该结构体的类型申明如下

typedef struct
{osal_event_hdr_t  hdr;//!< GAP_MSG_EVENT and statusuint8 opcode;//!< GAP type of command. Ref: @ref GAP_MSG_EVENT_DEFINES
} gapEventHdr_t;

在该函数下面该死的是有如下回调代码,还强制转换为gapCentralRoleEvent_t结构体。

// Pass event to appif ( pGapCentralRoleCB && pGapCentralRoleCB->eventCB ){pGapCentralRoleCB->eventCB( (gapCentralRoleEvent_t *) pMsg );}

这里补充gapCentralRoleEvent_t结构体申明代码。

typedef union
{gapEventHdr_tgap;//!< GAP_MSG_EVENT and status.gapDeviceInitDoneEvent_t  initDone;//!< GAP initialization done.gapDeviceInfoEvent_tdeviceInfo;//!< Discovery device information event structure.gapDevDiscEvent_tdiscCmpl;//!< Discovery complete event structure.gapEstLinkReqEvent_tlinkCmpl;//!< Link complete event structure.gapLinkUpdateEvent_tlinkUpdate;//!< Link update event structure.gapTerminateLinkEvent_tlinkTerminate;//!< Link terminated event structure.
} gapCentralRoleEvent_t;

讲了那么多无关又好像有关的背景知识后回归主题,现在说出我的困惑。我们追踪代码可以发现这里回调的是simpleBLECentral.c文件下的simpleBLECentralEventCB函数。但是simpleBLECentralEventCB函数和gapCentralRole_ProcessGAPMsg都是通过一个switch分支来选择执行那个分支。那么这样的话,在simpleBLECentralEventCB函数下switch ( pEvent->gap.opcode) 和gapCentralRole_ProcessGAPMsg函数下的switch ( pMsg->opcode )这两个判断条件下的case 常量表达式应该是一样的。。。但是理想很丰满,,,现实让我很矛盾。。。。     

比如simpleBLECentralEventCB函数下有      case GAP_DEVICE_INFO_EVENT:  分支          但是呢我在gapCentralRole_ProcessGAPMsg函数下的switch ( pMsg->opcode )怎么没有看到GAP_DEVICE_INFO_EVENT事件啊。这个理解超出我的脑容量啦啊

求TI大神就我。比如Yan大神,Mark_xu大神

mark_xu:

不同层的应用回调,所用的东西不一样,所以有的回调里面有,有的没有,你可以把没有的添加加进去,然后打印一下,自己测试一下,理论上是一样的……

赞(0)
未经允许不得转载:TI中文支持网 » 这里我问些基础性的问题。比如结构体指针强制转换
分享到: 更多 (0)