微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 无线和射频 > TI蓝牙设计交流 > 这里我问些基础性的问题。比如结构体指针强制转换

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

时间:10-02 整理:3721RD 点击:

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

该结构体的类型申明如下

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

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

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

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

typedef union
{
  gapEventHdr_t             gap;                //!< GAP_MSG_EVENT and status.
  gapDeviceInitDoneEvent_t  initDone;           //!< GAP initialization done.
  gapDeviceInfoEvent_t      deviceInfo;         //!< Discovery device information event structure.
  gapDevDiscEvent_t         discCmpl;           //!< Discovery complete event structure.
  gapEstLinkReqEvent_t      linkCmpl;           //!< Link complete event structure.
  gapLinkUpdateEvent_t      linkUpdate;         //!< Link update event structure.
  gapTerminateLinkEvent_t   linkTerminate;      //!< 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大神

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top