对于一个driver程序,比如ADC,timer模块,都可以利用三个文件来描述。
利用C++面向对象的特性,每个模块都是一个具有属性的物体,都有自己的方法。
模板包括一下三个文件:
Template.c, Template.h, Template_Init.h
Template_Init.h文件:该文件提供driver模块的接口函数,以及相关属性。
-
/**
-
\file
-
\brief
-
-
-
\project{}
-
\component{ }
-
-
$lastChangedDate: $
-
$Revision: $
-
$Author: $
-
-
-
*/
-
#ifndef __TEMPLATE_INIT_H__
-
#define __TEMPLATE_INIT_H__
-
-
/*******************************************************************************
-
* INCLUDE FILES
-
*******************************************************************************/
-
#include "Template.h"
-
-
-
-
/*******************************************************************************
-
* C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
extern "C" {
-
#endif
-
-
-
/*************************************************************************
-
* FUNCTIONS
-
*************************************************************************/
-
//const B_Chg_Interface_t *B_Chg_GetInterface(void);
-
-
-
-
-
/*******************************************************************************
-
* END OF C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
}
-
#endif
Template.h: driver模块底层的包含头文件
-
/**
-
\file
-
\brief
-
-
-
\project{}
-
\component{ }
-
-
$lastChangedDate: $
-
$Revision: $
-
$Author: $
-
-
-
*/
-
-
-
#ifndef _TEMPLATE_H_
-
#define _TEMPLATE_H_
-
-
-
/*******************************************************************************
-
* INCLUDE FILES
-
*******************************************************************************/
-
-
-
/*******************************************************************************
-
* C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
extern "C" {
-
#endif
-
-
-
-
/*******************************************************************************
-
* CONSTANTS, MACROS, TYPEDEFS
-
*******************************************************************************/
-
-
-
-
/*******************************************************************************
-
* END OF C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
}
-
#endif
-
-
-
-
#endif
Template.C 文件: Driver模块的功能真正实现文件
-
/**
-
\file
-
-
-
\project{}
-
\component{}
-
-
$lastChangedDate: $
-
$Revision: $
-
$Author: $
-
-
-
*/
-
-
/*********************************************************************
-
* INCLUDES
-
*/
-
#include "Template_Init.h"
-
-
/*********************************************************************
-
* MACROS
-
*/
-
-
-
/*********************************************************************
-
* CONSTANTS
-
*/
-
-
/*********************************************************************
-
* LOCAL VARIABLES
-
*/
-
-
/*********************************************************************
-
* LOCAL FUNCTIONS
-
*/
-
-
-
/*********************************************************************
-
* EXPORTED INTERFACE FUNCTIONS
-
*/
-
-
/********************************************************************
-
* IRSs
-
*/
-
-
/********************************************************************
-
* GLOBAL FUNCTIONS
-
*/
简单例子说明:
一个充电模块
1> B_Chg_Init
.h:
该文件为外部文件所调用,所以提供了接口函数和一些相关的宏定义。
-
/**
-
\file B_Chg_Init.h
-
\brief charger module driver header file
-
-
-
\project{}
-
\component{B_Chg, charger module driver component}
-
-
$lastChangedDate: $
-
$Revision: $
-
$Author: $
-
-
-
*/
-
#ifndef _B_CHG_INIT_H_
-
#define _B_CHG_INIT_H_
-
-
-
/*******************************************************************************
-
* INCLUDE FILES
-
*******************************************************************************/
-
#include "B_Chg.h" // 包含头文件
-
-
// 宏定义
-
#define CHG_LED_ON() (CHG_LED_PORT &=~ BIT(CHG_LED_PIN))
-
#define CHG_LED_OFF() (CHG_LED_PORT |= BIT(CHG_LED_PIN))
-
#define CHG_LED_FLASHING() (CHG_LED_PORT ^= BIT(CHG_LED_PIN))
-
-
/*******************************************************************************
-
* C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
extern "C" {
-
#endif
-
-
-
/*************************************************************************
-
* FUNCTIONS
-
*************************************************************************/
-
const B_Chg_Interface_t *B_Chg_GetInterface(void); // 接口函数的定义
-
-
-
-
-
/*******************************************************************************
-
* END OF C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
}
-
#endif
-
-
-
#endif
2> B_Chg
.h: 底层驱动的头文件
-
/**
-
\file B_Chg.h
-
\brief charger module driver header file
-
-
-
\project{}
-
\component{B_Chg, charger module driver component}
-
-
$lastChangedDate: $
-
$Revision: $
-
$Author: $
-
-
-
*/
-
-
#ifndef _B_CHG_H_
-
#define _B_CHG_H_
-
-
-
/*******************************************************************************
-
* INCLUDE FILES
-
*******************************************************************************/
-
#include "bsp.h"
-
-
-
/*******************************************************************************
-
* C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
extern "C" {
-
#endif
-
-
-
-
/*******************************************************************************
-
* CONSTANTS, MACROS, TYPEDEFS
-
*******************************************************************************/
-
typedef enum B_Chg_Status_t
-
{
-
B_Chg_noChg =0,
-
B_Chg_chging,
-
B_Chg_full,
-
B_Chg_failure,
-
B_Chg_invalid,
-
-
}B_Chg_Status_t;
-
-
-
typedef enum B_Chg_IndicatorStatus
-
{
-
B_Chg_IndicatorStatus_ON,
-
B_Chg_IndicatorStatus_OFF,
-
B_Chg_IndicatorStatus_FLASHING,
-
-
}B_Chg_IndicatorStatus;
-
-
// 定义结构体,封装函数接口
-
typedef struct B_Chg_Interface_t
-
{
-
void (*B_ChgCtrl_PinInit)(void);
-
B_Chg_Status_t (*B_ChgCtrl_ReadStatus)(void);
-
-
void (*B_ChgIndicator_PinInit)(void);
-
void (*B_ChgIndicator_Output)(B_Chg_Status_t);
-
-
int8_t endOfList;
-
-
}B_Chg_Interface_t;
-
-
-
-
/*******************************************************************************
-
* END OF C++ DECLARATION WRAPPER
-
*******************************************************************************/
-
#ifdef __cplusplus
-
}
-
#endif
3> B_Chg
.c: 驱动实现函数
上层应用:
在main函数中,
-
-
static B_Chg_Interface_t * s_B_Chg_Intf = NULL;
-
-
static void Sys_Interface_Init(void)
-
{
-
/* 1. get interface */
-
s_B_Chg_Intf = B_Chg_GetInterface(); // 获取接口
-
s_C_Motor_Intf = C_Motor_GetInterface();
-
s_D_HtSensor_Intf = D_HtSensor_GetInterface();
-
-
-
/* 2. gpio initialization */
-
s_B_Chg_Intf->B_ChgCtrl_PinInit();
-
s_B_Chg_Intf->B_ChgIndicator_PinInit();
-
s_C_Motor_Intf->C_MotorCtrl_PinInit();
-
s_C_Motor_Intf->C_MotorIndicator_PinInit();
-
......省略......
-
-
}
结构体中为什么要用const来修饰呢,可以参考这一篇:
const介绍
阅读(1037) | 评论(0) | 转发(0) |