该笔记为百问网韦东山老师免费课程学习过程的整理,学习过程中,软件架构思想很重要,所以在每学习完一个单元后悔整理一下。由于韦老师在授课过程中的函数名称和变量命名时不太直观,所以我就自己根据软件分离来重新对函数命名。
该课程整体的软件架构:
共有三层结构,最后一层是和硬件相关的Driver层。
中间层是基于Driver层抽象出的软件逻辑层,向上提供与硬件无关的功能函数接口,向下对Driver层接口封装抽象。
最上层是应用层,实现用户级别的软体功能。
简单的说,应用层是研发总监,中间层是主管/部门经理,底层是干货的码农兄弟们。
disp_manager.c是主管的角色,他知道手下每个码农兄弟能做什么,然后以领导化的语言汇总抽象之后向上层的研发总监报告。那么他是怎么知道下面各码农能做什么呢?当然是靠各位码农兄弟们向这位主管报告了!
framebuffer.c作为码农兄弟的角色,他们会向主管们报告自己是谁,能干嘛?在入职的时候他们会填写表格信息(就是g_tFramebufferOpr),上交给主管,通过fb_framebufferInit()向主管注册了自己。主管在用到相应的功能时就会叫对应的码农兄弟去干活,并且会把一些要求的参数给到这位码农兄弟。码农兄弟接到之后,运用他多年修炼的C+V功力去完成任务,并且把结果告诉主管。
数据结构抽象是非常重要的,在项目初期架构师规划好的数据结构会使代码更加健壮。
数据结构抽象可以理解为是一个公司的各种规章制度,各种表格。有全公司的,也有各部门的,也有各码农为了干活方便自己定义的。
include/disp_manager.h中定义了三个数据结构:
typedef struct disp_region
typedef struct disp_dispbuff
typedef struct disp_oper
便于参数在Driver层和中间层间互传。
===========
这里测试程序disp_test也就是应用层了,角色是研发总监。
void lcd_put_ascii(int x, int y, unsigned char c)
int main(int argc, char **argv)
从上到下的函数调用举例如下: