利用C语言结构体封装函数

C++语言类中可以封装函数,体现了模块操做的整体性,下面代码便是C++语言对串口函数的封装,这样操作便于调用。

class MarlinSerial //: public Stream
{
  public:
    MarlinSerial();
    void begin(long);
    void end();
    int peek(void);
    int read(void);
    void flush(void);
}
调用方法:

MarlinSerial MSerial; //实例化一个对象
MSerial.begin(9600);//设置串口的波特率为9600
这样便实现了串口的初始化。对串口操作函数进行了模块化封装,代码结构清晰。那么C语言是否可以实现这种方式呢?

C语言结构体不能直接封装函数,但可以通过封装函数指针的方式来实现,下面便是我实现的具体方式,可以很方便的移植到任何编译器上测试。

/* serial.h文件 */
//定义封装函数的结构体,并声明外部引用
//对串口操作函数封装。
typedef struct 
{
	void begin(long);
	void end();
	int (*peek)();
	uint8_t (*read)(void);
	void (*flash)();
	int (*availiable)();
	void (*checkRx)();
}MarlinSerial;

extern MarlinSerial MSerial;

/* serial.c文件 */

MarlinSerial MSerial; //定义MarlinSerial类型的结构体MSerial 

Serial_Init()
{
  MSerial.read = &Serial_Read;
}

 uint8_t Serial_Read(void)
{ 
   printf("hello word!"); //在这里仅作测试所用,未列出真正的串口读取函数
} 

/* main.c文件 */
int main(void)
{
    Serial_Init();
    MSerial.read(); //调用串口读取函数,目前功能为打印字符串
    while(1)
    {
       //
    }
}

第一次发帖不知道说的是否清楚,如有疑问欢迎提问,欢迎大家多提宝贵意见!


猜你喜欢

转载自blog.csdn.net/xiaoyuanwuhui/article/details/79062887