嵌入式软件架构四

前言: 本文是通过学习韦东山老师的嵌入式开发框架系列课程第四课,主要说明各个任务、各个系统直接如何分层实现,让整个系统实现双向解耦,即纵向、横向解耦,这样实现的代码后期维护起来非常方便,代码可读性也很强,扩展性非常好。
韦东山老师视频学习链接

嵌入式软件架构一
嵌入式软件架构二
嵌入式软件架构三
1、本文通过学习嵌入式系统的分层思想结合自身工作中的经验分享以NB-IoT模块为例的分层思想,一般在系统设计中可将系统按照业务功能分为功能模块,也就是分为子系统或者模块,再将模块进行横向分层,可分为驱动层、中间管理层、业务逻辑层
2、驱动层主要实现板级操作,比如硬件初始化、数据收发的配置方法等。
3、中间管理层主要实现此功能模块的常见业务,比如NB-IoT设备中间层需要提供被业务层调用的初始化,此初始化会调用驱动层的硬件初始化,这一层屏蔽了同一类模块不同品牌或者不同芯片厂家的差异,业务逻辑层不关心到底用的是什么型号的,就只知道我调用你提供的接口我能够实现我的业务。比如NB模组现在市面上有很多中信号,有移远的,有方的,不同厂家可能驱动不一样,那我们就实现不一样的驱动,具体最终使用了哪一个,就在中间管理层来调用。
4、业务逻辑层主要调用中间管理层提供的标准的API来实现功能即可;
5、这样将来如果业务有变动,那么只改动业务逻辑层,而中间层管理层及以下都不需要改变,若模组厂商更换了,需要给新的模组增加驱动,将新的驱动注册到中间管理层中,而中间管理层和业务逻辑层都不需要改变。这就是分层的好处。
6、关于NB模组涉及到了数据收发,与串口驱动有数据交互,为了方便移植,屏蔽了MCU的差异,所以此时又引入了适配层,适配层主要的作用是承上启下,上面将命令封装成模组想要的AT指令,下面调用串口驱动进行数据收发。这样就完全解耦了,移植的时候只需要根据不同的芯片选择不同的串口驱动方法。
7、适配层的头文件如下:

#ifndef _MIDAT_H_
#define _MIDAT_H_

#define MAX_STR_LEN		60
#define MAX_BUFF_LEN	60
#define MAX_RSP_LINE	2

#define AT_OK_RSP		"OK"
#define AT_ERR_RSP		"ERROR"
#define AT_ZERO_RSP		"0"
#define AT_AUTO_RSP		"AUROCONNECT,TRUE"

typedef enum
{
	AT_TEST_REQ = 0,		//AT测试请求
	AT_READ_REQ,			//AT读请求
	AT_SET_REQ,				//AT设置请求
	AT_EXECUTE_REQ			//AT执行请求
}AT_REQ_TYPE;

typedef struct
{
	char data[MAX_STR_LEN];
}RSP_LINE;

typedef struct
{
	RSP_LINE Line[MAX_RSP_LINE];
}AT_RSP_DATA;

//AT模块系统初始化
int MID_ATSysInit(INTU8 Chn,INT8U Bps);
//AT模块发送扩展命令
int MID_ATSendExtCmd(INT8U Chn,INT8U Type,char *pFun,char *pData,int Len);
//AT基本格式命令
int MID_ATSendBaseCmd(INT8U Chn,char *pFun,char *pData,int Len);
int MID_ATRequstCmd(INT8U Chn,INT8U Type,char *pFun,char *pSnd,int SndLen,AT_RSP_DATA *pRsp,int Time);
int MID_ATRecvCmd(INT8U Chn,AT_RSP_DATA *pRsp);



#endif 

8、驱动层的头文件如下:

#ifndef __DRVNBIOT_H__
#define __DRVNBIOT_H__

//定义BC35端口

#define BC35_PWR_EN_DIR		P1DIR
#define BC35_PWR_EN_OUT		P1OUT
#define BC35_PWR_EN_BIT		BIT1

//定义BC35的操作方式
#define BC35_PWR_SET_DIR	BC35_PWR_EN_DIR |= BC35_PWR_EN_BIT
#define BC35_PWR_ON			BC35_PWR_EN_OUT |= BC35_PWR_EN_BIT
#define BC35_PWR_OFF		BC35_PWR_EN_OUT &=~BC35_PWR_EN_BIT


//NB电源开关控制
int DRV_NBIOTPower_Switch(enPowerSwitch pFlag);
//NB复位
int DRV_NBIOTReset(void);

int DRV_NBIOTSetProperty(UART_BPS Bps);
//AT发送扩展格式命令
int DRV_NBIOTSendExtCmd(INT8U Type,char *pFun,char *pData,int Len);
//AT测试命令请求
int DRV_NBIOTRequstCmd(INT8U Type,char *pFun,char *pSnd,int SndLen,AT_RSP_DATA *pRsp,int Time);
//接收数据
int DRV_NBIOTRecvCmd(AT_RSP_DATA *pRsp);
//驱动系统初始化
int DRV_NBIOTSysInit(INT8U UartChn);

#endif

若想获取完整的NB-IoT的驱动代码,请点此处下载。

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
嵌入式Linux架构是指将Linux操作系统应用于嵌入式设备的一种系统架构。嵌入式设备是指那些在特定功能下运行的小型电子设备,如智能手机、家电、车载系统等。嵌入式Linux架构经过特殊的定制和优化,使其适应嵌入式设备的资源限制和实时性需求。 嵌入式Linux架构主要包括以下几个要素: 1. 内核(Kernel):嵌入式Linux使用定制的内核,可以根据设备的需求进行精简和优化,减少内存和处理器的占用。嵌入式设备通常需要实现快速启动和实时响应,因此内核需要有较高的性能和稳定性。 2. 文件系统(File System):嵌入式Linux使用定制的文件系统,一般采用轻量级的文件系统,如YAFFS、JFFS2等。这些文件系统具有高效的读写速度和可靠的数据存储,适用于嵌入式设备的特殊需求。 3. 驱动程序(Device Drivers):嵌入式Linux需要针对设备硬件编写相应的驱动程序,以实现设备与操作系统的交互。嵌入式设备通常需要集成多种不同的硬件设备,因此驱动程序的开发非常重要。 4. 应用程序(Applications):嵌入式Linux支持各种应用程序的运行,如网络应用、多媒体应用、图形界面应用等。开发者可以根据需要定制和开发自己的应用程序,使嵌入式设备具备更强的功能和更好的用户体验。 嵌入式Linux架构具有灵活性、稳定性和可靠性等优点,可以为嵌入式设备提供强大的操作系统支持。同时,嵌入式Linux的开源性和庞大的开发者社区也为开发者提供了大量的资源和技术支持,使得嵌入式Linux架构成为目前广泛应用于各种嵌入式设备的首选系统架构
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HeartRain_大西瓜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值