显示系统
#
1.数据结构抽象显示系统场景:
假设程序是在一个buf里面绘制图片,上层APP在buf里绘制图片,更新某个区域后把这个图片更新到LCD或者WEB上。
定义这个绘制图片的结构体
disp_manager.h
#
2.Framebuffer编程参考01_all_series_quickstart\04_嵌入式Linux应用开发基础知识\source\07_framebuffer
代码:
初始化函数:
打开 LCD 设备节点(open),获取分辨率等参数(ioctl)
通过 mmap 映射 Framebuffer,在 Framebuffer 中写入数据
函数原型:
退出函数:
- munmap取消映射
- close文件句柄
实现如下:
实例化一个结构体及其函数:将fb_var_screeninfo结构体变量var的值保存返回,并直接返回显存地址
#
3.显示管理继续抽象出公共部分,比如支持多个显示方式,Framebuffer或WEB,需要提供一个选择输出方式函数。
我们加入了中间层disp_manager.c, 所以底层Framebuffer需要一个注册函数,把自己的显示操作函数DispOpr g_tFramebufferOpr
注册到上层链表中。
在disp_manager.c中,我们主要实现抽象各种显示方式公共部分,提供给上层APP:
- 显示初始化,让下层注册各自的DispOpr DisplayInit
- 选择默认显示方式函数 SelectDefaultDisplay
- 硬件初始化默认显示设备 InitDefaultDisplay
- 给上层使用的获取显示buffer GetDisplayBuffer
- 绘制一个像素点的函数 PutPixel
- 将buffer刷新到设备 FlushDispalyRegion
先定义一个显示buf结构体与刷新区域结构体:
disp_manager.h
#
disp_manager.c
#
定义全局变量
注册函数:将ptDispOpr结构体指针放入链表
显示初始化(让下层注册结构体),选择默认显示函数:
初始化默认显示方式:调用下层的初始化函数,获取buf、line_width、pixel_width
绘制像素点与刷新函数:
#
4.测试#
上层APP函数参考"01_all_series_quickstart\04_嵌入式Linux应用开发基础知识\source\08_show_ascii\show_ascii.c"
修改lcd_put_ascii函数中的lcd_put_pixel为我们自己像素点绘制函数:
修改主函数:调用我们封装设计的disp_manager
#
总体代码图#
上机设置环境变量-交叉编译工具链
设置完毕后,要执行
命令使其生效,并通过
验证
关闭 qt gui 可以执行/etc/init.d/S99myirhmi2 stop
命令
挂载网络文件系统:
#
错误函数指针
strcmp(字符串1,字符串2)
比较字符串s1和s2。
当s1<s2时,返回为负数 注意不是-1 当s1==s2时,返回值= 0 当s1>s2时,返回正数 注意不是1 即:两个字符串自左向右逐个字符相比(按ASCII值大小相比较),直到出现不同的字符或遇'\0'为止。如:"A"<"B" "a">"A" "computer">"compare"
请点击左侧菜单(移动端为右下角)选择要查看的所有笔记吧。