在说三层架构之前,先介绍一下串口模块的相关函数,这个模块把串口发送以及接收相关的功能给抽象出来了。我后面将以这个模块为例介绍设计三层架构的方法。之所以要以这个模块为例子,是因为如果介绍3层架构的例子过于简单或者过于复杂都不够实用,而串口模块部分没那么简单也没那么难,比较适合做为讲3层架构的例子。另外学习这个模块还有另一个好处,那就是可以应用在你的实际项目中,比如打印调试信息或者用于普通的串口信息收发等等。因此,搞清楚这个模块还是必要且有用的。
串口模块主要分为两个部分,一个部分函数是用来发送信息。一部分函数用来接收串口信息。因为串口的接收部分相对简单,我先从接收部分开始讲。
串口模块主要放在两个文件中,一个是mid_serial.h,一个是mid_serial.c。
首先看一下mid_serial.h文件,这个文件定义了mid_serial.c中用到的函数以及一些宏定义。各个宏定义的意思会在mid_serial.c中做详细解释。
- #ifndef _MID_UART_
- #define _MID_UART_
- #include "hal.h" //硬件层接口
- #define UART_TX_BUF_LENGTH_1 0
- #define UART_TX_BUF_LENGTH_2 1
- #define UART_TX_BUF_LENGTH_4 3
- #define UART_TX_BUF_LENGTH_8 7
- #define UART_TX_BUF_LENGTH_16 15
- #define UART_TX_BUF_LENGTH_32 31
- #define UART_TX_BUF_LENGTH_64 63
- #define UART_TX_BUF_LENGTH_128 127
- #define UART_TX_BUF_LENGTH_256 255
- //在源码中解释
- #define UART0_RX_TIMEOUT_TIME 3
- //接收缓冲区长度
- #define UART0_RX_FIFO_LENGTH 64
- //在源码中解释
- #define UART0_TX_BUF_COUNT UART_TX_BUF_LENGTH_64
- //设置发送缓冲区长度
- #define UART0_TX_FIFO_LENGTH (UART_TX_BUF_LENGTH_64+1)
- //app_u0_rx_handle() --- 这个函数定义在应用层,用户用来处理串口接收到的数据
- //之所以放到这个文件,是因为要移植这个代码的话把要改的东西统一放到一个文件,
- //这样便于维护.
- #define SERIAL0_RECEIVER_FUNCTION(fifo, len) app_u0_rx_handle(fifo, len)
- //初始化串口模块相关参数
- extern void serial_parameters_init(void );
- //串口的数据接收管理
- extern void serial_u0_receiver_data_manage();
- //将串口数据保存在缓存中
- extern void serial_u0_receiver_data(uint8_t rx_dt);
- //发送十六进制数据
- extern void seria