关于库文件中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_ 了。
TI中文支持网![TMS320F28379D: 导入例程出现故障Description Resource Path Location Type gmake: *** [gridconnectedinvlclfltr.obj] Error 1 gridConnectedInverterLCLFltr C/C++ Problem-TI中文支持网](https://www.ti2k.com/wp-content/uploads/ti2k/DeyiSupport_C2000_pastedimage1752114958744v1.jpg)



