当前位置: 首页 > news >正文

自己建设网站需要哪些百度指数查询入口

自己建设网站需要哪些,百度指数查询入口,wordpress添加原文链接,怎么做网站发布目录 一、背景 1. 要实现的功能2. lvgl 版本 二、简单粗暴的方式 理论上可以这样实现缺陷: 三、lvgl 自身机制支持 3.1 实现思路3.2 初始化缓冲区和注册显示驱动 3.2.1 复制lv_port_disp → lv_port_disp_23.2.2 修改 lv_port_disp_2 文件3.2.3 在应用层调用显示器…

目录

  • 一、背景
    • 1. 要实现的功能
    • 2. lvgl 版本
  • 二、简单粗暴的方式
    • 理论上可以这样实现
    • 缺陷:
  • 三、lvgl 自身机制支持
    • 3.1 实现思路
    • 3.2 初始化缓冲区和注册显示驱动
      • 3.2.1 复制lv_port_disp → lv_port_disp_2
      • 3.2.2 修改 lv_port_disp_2 文件
      • 3.2.3 在应用层调用显示器2初始化程序
    • 3.3 如何切换显示器
      • 3.3.1 切换显示器的 API
      • 3.3.2 如何找到显示器指针
      • 3.3.3 接收显示器指针
        • 定义保存显示器1 指针的变量
        • 接收显示器1 指针
        • 提供 API 供上层访问
      • 3.3.4 另外一种返回显示器指针的实现方式
        • 返回显示器1指针
        • 返回显示器2 指针
      • 3.3.5 应用层切换显示器实现
        • 选择显示器1
        • 选择显示器2
  • 四、参考链接

一、背景

1. 要实现的功能

一个mcu 物理连接两块彩屏,使用一个lvgl内核实现对双显示器的显示驱动。

2. lvgl 版本

V8.3.x

二、简单粗暴的方式

理论上可以这样实现

  • 软件应用层将两款显示器虚拟成一整块显示器。显示器的宽度就是最宽那个显示器的宽度,显示的长度是显示器1 + 显示器2 的长度。
  • 在刷屏打点函数中(disp_flush),根据坐标进行判断,属于显示器1 范围的数据,写到物理显示器1;属于显示器2范围的数据,写到物理显示器2。

缺陷:

  • 可能存在边界数据处理异常问题;
  • 对lvgl 来说,屏幕宽度和高度是虚拟的。如果想实现参考屏幕本身对齐的功能,比较难实现。
  • 在软件编码实现UI时,需要将显示坐标转换成虚拟坐标。不够直观。例如要实现分别在两块显示器的(0,0) 坐标开始位置写数据。写显示器1时,可以写(0,0) 坐标;写显示2时,需要写(0,LCD_SCR1_Y_MAX);

三、lvgl 自身机制支持

3.1 实现思路

  • 为每一个显示器分配并初始化一个缓冲区;
  • 为每一个显示器注册显示驱动;
  • 每次更新显示内容前,先选中当前的显示器

3.2 初始化缓冲区和注册显示驱动

3.2.1 复制lv_port_disp → lv_port_disp_2

显示缓冲区初始化和显示器注册的处理部分都在 lv_port_disp.c 文件中;复制一份 lv_port_disp.clv_port_disp.h)文件,改名为 lv_port_disp_2.c ( lv_port_disp_2.h )负责显示器2的初始化。

3.2.2 修改 lv_port_disp_2 文件

  • 更正显示器2的x,y 坐标范围
  • 将每一个可能因此重定义的变量或函数重命名。例如
    • lv_port_disp_init → lv_port_disp_init_2

3.2.3 在应用层调用显示器2初始化程序

在调用 lv_port_disp_init() 后面,调用 lv_port_disp_init_2()

3.3 如何切换显示器

3.3.1 切换显示器的 API

完成上面步骤之后,就已经完成了显示器缓冲区分配,显示驱动注册。

通过阅读官方帮助文档,我们知道 lv_disp_set_default(disp) 用来切换当前的默认显示器。

void lv_disp_set_default(lv_disp_t * disp)
{disp_def = disp;
}

参数 disp 就是要设置的显示器指针。

3.3.2 如何找到显示器指针

大致看了一遍相关的源码文件,没看到直接返回显示器1显示器2的相关接口函数。重新研究了一遍注册显示器的过程,发现 lv_disp_drv_register 注册显示驱动函数,会返回当前注册的显示器指针。这个函数在lv_port_disp.c 文件中调用。

由于默认只有一个显示器,所以默认也没接收这个函数的返回值,记录为当前显示器指针。

lv_disp_t * lv_disp_drv_register(lv_disp_drv_t * driver)

3.3.3 接收显示器指针

以显示器1 为例说明。以下代码都是在 lv_port_disp.c 文件中实现。

定义保存显示器1 指针的变量
static lv_disp_t *_local_lv_disp_1;
接收显示器1 指针
_local_lv_disp_1 =  lv_disp_drv_register( &disp_drv );
提供 API 供上层访问
lv_disp_t *lv_port_get_screen_1( void )
{return _local_lv_disp_1;
}

3.3.4 另外一种返回显示器指针的实现方式

查看lv_disp_drv_register 函数,发现函数的第一行实现如下:

lv_disp_t * disp = _lv_ll_ins_head(&LV_GC_ROOT(_lv_disp_ll));

插入一个 接节点到列表LV_GC_ROOT(_lv_disp_ll) 的头部,并返回新插入的节点的指针。列表 LV_GC_ROOT(_lv_disp_ll) 就是物理显示器列表。

那么,我们遍历整个 LV_GC_ROOT(_lv_disp_ll) 列表,就能依次返回物理显示器的指针。由于应用层先注册显示器1,所以显示器1的指针位于队列尾。

返回显示器1指针
lv_disp_t *lv_port_get_screen_1( void )
{return _lv_ll_get_tail( &LV_GC_ROOT( _lv_disp_ll ) );}
返回显示器2 指针
lv_disp_t *lv_port_get_screen_2( void )
{return _lv_ll_get_head( &LV_GC_ROOT( _lv_disp_ll ) );
}

3.3.5 应用层切换显示器实现

选择显示器1
lv_disp_set_default(lv_port_get_screen_1());
选择显示器2
lv_disp_set_default(lv_port_get_screen_2());

四、参考链接

  • LVGL Displays :https://docs.lvgl.io/8.3/overview/display.html
http://www.ds6.com.cn/news/92649.html

相关文章:

  • 站长工具之家seo查询谷歌外链工具
  • 靖江做网站哪家好河南it渠道网
  • 厦门做模板网站的公司百度知道提问
  • 网站引进搜索引擎怎么做百度云搜索引擎入口
  • 网站分为哪些部分组成部分组成咖啡seo是什么意思
  • 免费网站安全软件大全免费下载安装百度小说排行榜2019
  • 深圳罗湖企业网站优化百度竞价排名黑幕
  • 武汉做网站训网站优化+山东
  • 如何用微信支付购物网站山东seo费用多少
  • 网站建设商品的分类百度指数电脑端查询
  • 做征婚网站有哪些推广普通话的意义30字
  • 网站多次提交青岛快速排名
  • 网站建设有什么工作seo页面优化技术
  • 本地安装wordpress账户是什么申泽seo
  • 记事本怎么做网页网络推广seo怎么做
  • 网站做rss wordpress打开百度
  • 网站菜单效果深圳百度推广公司
  • 凡客网站建设怎么样sem是什么公司
  • n加1网站建设长沙seo平台
  • 网站策划与设计网络推广运营推广
  • 江干区住房和城乡建设局网站汕头网站建设方案推广
  • 企业网站源码自适应seo实战密码第三版
  • 做网站用linux哪个版本上海搜索优化推广
  • 马鞍山的网站建设公司如何通过网络营销自己
  • 交友网站美女要一起做外贸百度开户要多少钱
  • 重庆建设工程交易中心网站网络广告投放方案
  • 只做男士衬衫的网站seo薪酬如何
  • 网络推广培训教程南京seo外包平台
  • wordpress淘宝客主题制作鞍山seo公司
  • 旅游网站设计模版品牌网络营销策划书