typedef enum
{
ON = 0,
OFF
}LED_MODE;
typedef enum
{
LED0,
LED1
}led_t;
void bsp_led_contrl(led_t led, LED_MODE mode)
{
GPIO_TypeDef* GPIOx;
uint16_t GPIO_Pin;
switch(led)
{
case LED0:
GPIOx = GPIOB;
GPIO_Pin = GPIO_Pin_5;
break;
case LED1:
GPIOx = GPIOE;
GPIO_Pin = GPIO_Pin_5;
break;
default:
break;
}
if(mode == ON)
{
GPIO_SetBits(GPIOx, GPIO_Pin);
}
else
{
GPIO_SetBits(GPIOx, GPIO_Pin);
}
}
在进行项目开发时,对于同一类的事件,进行统一的管理。 而不是一个LED使用一个控制函数,那样会导致用户调用时,还要去寻找其他函数。
道友请留步,在下看道友似乎另有想法,不妨说出来我等一起探讨一番。
//2024-01-23
typedef struct {
write write;
}opst_t;
const opst_t led_ops = {led_write};
//创建一个对象led
typedef struct {
char* name;
const ops_t ops;
struct node* next;
}led_t
led_t led = {
.name = "led1",
.ops = &led_ops,
};
//将led挂到链表里面
register(&led);
通过链表获取对象led1, 然后来操作led, 这样就将驱动和应用层就分开了, 他们就是通过链表来组织起来的,如果去掉led模块, 那么注册就失效了, 也就找不到了.