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

关于库函数中结构体指针问题

关于库文件中typedef 结构体指针定义出现了好几种不同的定义方法:

以Hal结构体定义为例:

typedef struct _HAL_Obj_
{ADC_HandleadcHandle;//!< the ADC handleCLK_HandleclkHandle;//!< the clock handleCPU_HandlecpuHandle;//!< the CPU handleDRV8305_Handle drv8305Handle;//!< the drv8305 interface handleDRV8305_Objdrv8305;//!< the drv8305 interface object

} HAL_Obj;


//! \briefDefines the HAL handle
//! \detailsThe HAL handle is a pointer to a HAL object.  In all HAL functions
//!the HAL handle is passed so that the function knows what peripherals
//!are to be accessed.
//!
typedef struct _HAL_Obj_ *HAL_Handle;

在HAL初始化函数中:

HAL_Handle HAL_init(void *pMemory,const size_t numBytes)
{
uint_least8_t cnt;
HAL_Handle handle;
HAL_Obj *obj;

if(numBytes < sizeof(HAL_Obj))
return((HAL_Handle)NULL);

// assign the handle
handle = (HAL_Handle)pMemory;

// assign the object
obj = (HAL_Obj *)handle;

// initialize the watchdog driver
obj->wdogHandle = WDOG_init((void *)WDOG_BASE_ADDR,sizeof(WDOG_Obj));

// disable watchdog
HAL_disableWdog(handle);

// initialize the ADC
obj->adcHandle = ADC_init((void *)ADC_BASE_ADDR,sizeof(ADC_Obj));

return(handle);
}

HAL_Handle handle;
HAL_Obj *obj;
这两种有什么区别?

handle和obj难道不都是两个结构体指针吗?为什么要定义两个?而且同样是两个,为什么还要采用两种不同的形式?

还有关于GPIO的结构体指针中还出现了其他版本:

第一个版本是FOC的28027的foc的lab例程中的

typedef struct _GPIO_Obj_
{volatile uint32_t GPACTRL;//!< GPIO A Control Registervolatile uint32_t GPAQSEL1;//!< GPIO A Qualifier Select 1 Registervolatile uint32_t GPAQSEL2;//!< GPIO A Qualifier Select 2 Register
} GPIO_Obj;

//! \brief Defines the general purpose I/O (GPIO) handle
//!
typedef struct _GPIO_Obj_ *GPIO_Handle;

下面一个是F28027的controlSUITE的V2.30库函数中的:

typedef struct _GPIO_Obj_
{volatile uint32_t GPACTRL;//!< GPIO A Control Registervolatile uint32_t GPAQSEL1;//!< GPIO A Qualifier Select 1 Registervolatile uint32_t GPAQSEL2;//!< GPIO A Qualifier Select 2 Register
} GPIO_Obj;

//! \brief Defines the general purpose I/O (GPIO) handle
//!
typedef struct GPIO_Obj*GPIO_Handle;

这两种定义方式又有什么区别呢?了

typedef structGPIO_Obj *GPIO_Handle;这么定义是不是应该去掉一个struct,因为GPIO_Obj就相当于struct _GPIO_Obj_ 了。

 

 

赞(0)
未经允许不得转载:TI中文支持网 » 关于库函数中结构体指针问题
分享到: 更多 (0)