面向对象写单片机程序-程序分层

面向对象写单片机程序-程序分层

  • 管理层
typedef struct InputDevice {
	char *name;
	int (*GetInputEvent)(PInputEvent ptInputEvent);
	int (*DeviceInit)(void);
	int (*DeviceExit)(void);
	struct InputDevice *pNext;
}InputDevice, *PInputDevice;

static PInputDevice g_ptInputDevices;

void InitInputDevices(void)
{
	PInputDevice pDev = g_ptInputDevices;
	while(pDev)
	{
		pDev->DeviceInit();
		pDev = pDev->pNext;
	}
}
......
  • 设备层
static int GPIOKeyInit(void)
{
	KAL_GPIOKkeyInit();
	return 0;
}

static InputDevice g_tKeyDevice = {
	"gpio_key",
	NULL,
	GPIOKeyInit,
	NULL,
};
  • KAL(Kernel Abstract Layer):设备抽象层
void KAL_GPIOKkeyInit(void)
{
#if defined(CONFIG_NOOS)	
	/* 对于裸机: 注册中断 */
	CAL_GPIOKkeyInit();
#elif defined(CONFIG_FREERTOS)	
	FreeRTOS_GPIOKkeyInit();
#elif defined(CONFIG_RTTHREAD)	
	RTTread_GPIOKkeyInit();
#endif
	/* 对于RTOS: 创建任务 */
}
  • CAL(Chip Abstract Layer):芯片抽象层
void CAL_GPIOKkeyInit(void)
{
	/* 调用芯片相关的代码,注册GPIO中断 */
#if defined(CONFIG_ST_HAL)
	/* 对于ST芯片 */
	KEY_GPIO_ReInit();
#else
	MY_KEY_GPIO_ReInit
#endif
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值