想要把GPIO端口和引脚号作为参数传给结构体,可以这样写?

2019-12-13 18:22发布

结构体声明:
typedef struct
{
        GPIO_TypeDef* GPIOx;
        uint16_t GPIO_Pin;
}GPIO_STATUS;

typedef struct
{
        GPIO_TypeDef* GPIOx;
        uint16_t GPIO_Pin;
}GPIO_CHECK;

typedef struct
{
        GPIO_TypeDef* GPIOx;
        uint16_t GPIO_Pin;
}GPIO_CONTROL;

typedef struct _DEVICE_PROPERTY
{
        GPIO_STATUS* GPIO_Status;
        GPIO_CHECK* GPIO_Check;
        GPIO_CONTROL* GPIO_Control;
       
        UINT8 Device_Status;
               
}__attribute__((packed)) DEVICE_PROPERTY;

创建设备并初始化GPIO配置
DEVICE_PROPERTY Main_Light ;
Device_GPIO_Default(&Main_Light,GPIOC,GPIO_Pin_7,GPIOC,GPIO_Pin_6,GPIOC,GPIO_Pin_1);

void Device_GPIO_Default(DEVICE_PROPERTY* device,
                                  GPIO_TypeDef* GPIOX,uint16_t GPIO_PinX,
                                  GPIO_TypeDef* GPIOY,uint16_t GPIO_PinY,
                                  GPIO_TypeDef* GPIOZ,uint16_t GPIO_PinZ )
{
        device->GPIO_Status->GPIOx = GPIOX;
        device->GPIO_Status->GPIO_Pin = GPIO_PinX;       

        device->GPIO_Check->GPIOx = GPIOY;
        device->GPIO_Check->GPIO_Pin = GPIO_PinY;       

        device->GPIO_Control->GPIOx = GPIOZ;
        device->GPIO_Control->GPIO_Pin = GPIO_PinZ;       
}


可以这样写么?很久没写了,希望大神指点,谢谢
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
l4568527193
1楼-- · 2019-12-13 19:52
求大神指点
l4568527193
2楼-- · 2019-12-13 21:38
 精彩回答 2  元偷偷看……
xuxi2009
3楼-- · 2019-12-14 03:16
这样写是可以的,只是最后Device_GPIO_Default参数太多了,建议为“device”类多添加几个方法,例如setStatus getStatus setControl getContol setCheck
l4568527193
4楼-- · 2019-12-14 04:24
xuxi2009 发表于 2019-2-28 10:38
这样写是可以的,只是最后Device_GPIO_Default参数太多了,建议为“device”类多添加几个方法,例如setStat ...

参数那个是小问题,我可以分开配置,但是我现在这的在在线调试的连段选GPIOC都不能赋值成功,Pin赋值的时候,系统就死掉了,求解
xuxi2009
5楼-- · 2019-12-14 10:22
GPIOC之类的是不是没有初始化
Device_GPIO_Default(&Main_Light,GPIOC,GPIO_Pin_7,GPIOC,GPIO_Pin_6,GPIOC,GPIO_Pin_1);
里面应该用&GPIOC取地址传入
l4568527193
6楼-- · 2019-12-14 10:48
xuxi2009 发表于 2019-2-28 11:27
GPIOC之类的是不是没有初始化
Device_GPIO_Default(&Main_Light,GPIOC,GPIO_Pin_7,GPIOC,GPIO_Pin_6,GPIOC, ...

GPIOC是库文件就初始化了的

一周热门 更多>