嵌入式面向对象编程

面向对象,是编程界的一个概念。什么叫面向对象呢?编程有两种要素:程序(方法),数据(属性)。例如:一个LED,我们可以点亮或者熄灭它,这叫方法。LED什么状态?亮还是灭?这就是属性。我们通常这样编程:

1
2
3
4
5
u8 ledsta = 0;
void ledset(u8 sta)
{

}

这样的编程有一个问题,假如我们有10个这样的LED,怎么写?这时我们可以引入面向对象编程,将每一个LED封装为一个对象。可以这样做:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
/*
定义一个结构体,将LED这个对象的属性跟方法封装。
这个结构体就是一个对象。
但是这个不是一个真实的存在,而是一个对象的抽象。
*/
typedef struct
{
u8 sta;
void (*setsta)(u8 sta);
}LedObj;
/* 声明一个LED对象,名称叫做LED1,并且实现它的方法drv_led1_setsta*/
void drv_led1_setsta(u8 sta)
{

}

LedObj LED1={

.sta = 0,

.setsta = drv_led1_setsta,

};

/* 声明一个LED对象,名称叫做LED2,并且实现它的方法drv_led2_setsta*/

void drv_led2_setsta(u8 sta)
{

}

LedObj LED2={

.sta = 0,

.setsta = drv_led2_setsta,

};
/* 操作LED的函数,参数指定哪个led*/

void ledset(LedObj *led, u8 sta)
{
led->setsta(sta);
}

是的,在C语言中,实现面向对象的手段就是结构体的使用。上面的代码,对于API来说,就很友好了。操作所有LED,使用同一个接口,只需告诉接口哪个LED。