第二节 LVGL移植

这篇具有很好参考价值的文章主要介绍了第二节 LVGL移植。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

LVGL移植关键点

第二节 LVGL移植

LVGL移植整体流程

  1. 确定输入、输出设备
    • 输入:触摸屏、鼠标、键盘以及编码器;输出:显示屏
  2. 准备LVGL库、例程
    • 准备V8.2版本的LVGL库文件,还有支持所需功能的例程源码
  3. 添加LVGL库到工程
    • 按需裁剪、修改LVGL库文件,并添加到MDK工程中
  4. 配置输入、输出设备
    • 适配自己的输入和输出设备,添加所需功能(例如系统)
  5. 提供心跳、测试
    • 为LVGL提供时基,写测试代码检测移植是否成功

LVGL移植准备

移植前需要确定的功能

第二节 LVGL移植

LVGL移植课堂代码功能汇总

第二节 LVGL移植

课堂代码下载

链接:https://pan.baidu.com/s/1F_-FytsIUXx35iHGNTdI7Q
提取码:qwer

LVGL移植演示

课堂代码1

课堂代码1:带触摸、裸机、内部SRAM、LVGL自带内存管理

  • 《触摸屏实验》源码
  • 《基本定时器中断实验》源码
  • LVGL库文件

移植步骤1

  • 裁剪LVGL库文件(保留官方demo)
  • 把 lv_conf_template.h 文件名修改成 lv_conf.h
  • 打开 lv_conf.h 文件,修改条件编译指令,把#if 0 修改成#if 1
  • 重命名工程名称为《 LVGL移植课堂代码1 》,添加定时器文件
  • 按以下结构新建文件夹:

第二节 LVGL移植

移植步骤2

  • 把裁剪后的LVGL库文件复制到 Middlewares/LVGL/GUI/lvgl 路径下
  • 打开《 LVGL移植课堂代码1 》工程,编译 ,修改工程名称,再添加分组

第二节 LVGL移植

移植步骤3

  • 添加LVGL相关的.c文件到相应分组,如下:

第二节 LVGL移植

移植步骤4

  • 添加头文件路径:

第二节 LVGL移植

  • 开启C99模式

  • 屏蔽MDK警告(慎用,非必须),在配置界面 C/C++的 Misc Controls 栏中填入(不要有空格):–diag_suppress=68,111,188,223,546,1295

移植步骤5

配置输出(屏幕)

  • 把 lv_port_disp_template.c/h 的条件编译指令 #if 0 修改成 #if 1
  • 包含输出设备驱动头文件
  • 在 disp_init 函数中初始化屏幕设备,设置横屏
  • 配置图形数据缓冲模式
  • 设置屏幕尺寸(默认横屏)
  • 在 disp_flush 函数中配置打点输出

移植步骤6

配置输入(触摸)

  • 把 lv_port_indev_template.c/h 的条件编译指令 #if 0 修改成#if 1
  • 按需裁剪输入设备
  • 包含输入设备驱动头文件
  • 在 touchpad_init 函数中初始化触摸屏
  • 配置触摸检测函数
  • 配置坐标获取函数

移植步骤7

提供时基

  • 添加定时器驱动
  • 在定时器驱动.c文件中包含:#include “lvgl.h”
  • 在定时器中断函数(回调)中调用:lv_tick_inc(x);
  • 初始化定时器时,需保证:进入中断的时间间隔 = x 毫秒

移植步骤8

main函数部分

  1. 在main.c文件中包含头文件:

第二节 LVGL移植

  1. 初始化定时器、LVGL库、输入输出设备:

第二节 LVGL移植

  1. 在while中每隔5ms调用一次lv_timer_handler();
  2. 编写测试代码:

第二节 LVGL移植

移植压力测试示例

  • 把 demos 文件夹复制到 Middlewares/LVGL/GUI_APP 路径下

  • 添加头文件路径,如下:

第二节 LVGL移植

  • 打开 lv_conf.h 文件,找到宏定义 LV_USE_DEMO_STRESS 并设置为 1

  • 新建Middlewares/LVGL/GUI_APP工程组,添加 demos/stress 文件夹下的lv_demo_stress.c 文件

  • main.c文件里包含头文件:#include “lv_demo_stress.h”

  • 初始化官方demo:lv_demo_stress();

第二节 LVGL移植

移植音乐播放器示例

  • 把 demos 文件夹复制到 Middlewares/LVGL/GUI_APP 路径下

  • 添加头文件路径,如下

第二节 LVGL移植

  • 打开 lv_conf.h 文件,找到宏定义 LV_USE_DEMO_MUSIC 并设置为 1

  • 新建Middlewares/LVGL/GUI_APP工程组,添加 demos/music 文件夹下的全部.c 文件

  • 此时编译可能会报错,打开 lv_conf.h 文件,找到相应字体的宏并设置为1即可

  • main.c文件里包含头文件:#include “lv_demo_music.h”

  • 初始化官方demo:lv_demo_music();

第二节 LVGL移植

课堂代码2

课堂代码2:带触摸、FreeRTOS、内部SRAM、LVGL自带内存管理。

  • 《LVGL移植课堂代码1》源码

  • 《LVGL例程2 操作系统移植》源码

移植步骤1

  • 重命名工程名称为《 LVGL移植课堂代码2 》
  • 移植FreeRTOS相关文件:
    第二节 LVGL移植

移植步骤2

  • 打开《 LVGL移植课堂代码2 》工程,添加分组:

第二节 LVGL移植

  • 添加FreeRTOS相关的.c文件到相应分组中:

第二节 LVGL移植

移植步骤3

  • 添加头文件路径(以F429为例):

第二节 LVGL移植

  • 打开HAL库中断相关的.c文件,屏蔽SysTick 中断、SVC 中断、PendSV 中断

第二节 LVGL移植

移植步骤4

  • 修改宏定义__NVIC_PRIO_BITS,由4U改为4即可

第二节 LVGL移植

  • 在lv_conf.h文件中配置自定义时钟源,删除定时器提供时基的部分代码

  • 新建lvgl_demo.c/.h文件,创建OS任务,调用/编写demo

  • 在main.c中包含头文件#include “lvgl_demo.h”,调用lvgl_demo();函数

拓展知识

  • 建立专门存放lvgl用户代码的文件,管理更加方便

  • 编译的时候报内存不够如何处理?

第二节 LVGL移植

  1. 修改lv_conf.h,适当减小分配给LVGL管理的内存

  2. lv_port_disp_timplate.c,适当减小图形缓冲区的大小,同时需要兼顾运行效果

  3. FreeRTOSConfig.h,适当减小分配给FreeRTOS的内存,简单的工程,一般10~20k就够用了

课堂代码3

课堂代码3:带触摸、FreeRTOS、外部SRAM、自研内存管理算法。

  • 《LVGL移植课堂代码2》源码

  • 《内存管理实验》源码

外部SRAM驱动移植

  • 重命名工程名称为《 LVGL移植课堂代码3 》

  • 添加SRAM驱动相关文件:

第二节 LVGL移植

  • 打开工程,添加.c文件到相应分组中:

第二节 LVGL移植

  • 包含外部sram驱动头文件:#include “./BSP/SDRAM/sdram.h” 或 #include"./BSP/SRAM/sram.h"

  • 初始化外部sram:sdram_init();或 sram_init();

外部SRAM使用

  • 场景1:把LVGL管理的内存空间放到外部SRAM(非常不推荐)

    1. 确定外部SRAM首地址,根据需求确定地址偏移
    2. 在lv_conf.h中将LV_MEM_ADR定义到外部SRAM的地址(不一定是首地址)
  • 场景2:把绘图缓冲区放到外部SRAM(内部空间匮乏时可取)

    1. 确定外部SRAM首地址,根据需求确定地址偏移
    2. 在lv_port_disp_template.c中创建全屏分辨率大小的数组,并将其定位到外部SRAM的地址

自研内存管理算法移植

  • 添加内存管理相关文件:

第二节 LVGL移植

  • 打开工程,添加分组和.c文件:

第二节 LVGL移植

  • 包含内存管理算法头文件:#include “./MALLOC/malloc.h”

LVGL中消耗内存的地方

第二节 LVGL移植

注意:不同的项目,内存分配的比例不同,一般分配给LVGL管理的内存为15~40k字节

自研内存管理配置流程

  • 配置需要管理的内存池大小

在malloc.h文件中通过相关的宏来定义,不同板子代码的宏定义不同

  • 初始化需要管理的内存池

调用my_mem_init函数对所需要管理的内存池进行初始化即可

  • 适配自研的内存管理算法

编写LVGL内存分配、内存释放、内存重新分配这三个函数,配置相关宏定义

LVGL自带内存管理配置流程

  • 配置需要管理的内存池大小

通过lv_conf.h中的LV_MEM_SIZE来定义,以字节为单位

  • 创建需要管理的内存池

有3种方式:①大数组、②地址段、③内存分配函数

课堂代码4

课堂代码4:带触摸、FreeRTOS、DMA2D、内部SRAM、LVGL自带内存管理。

  • 《LVGL移植课堂代码2》源码

  • 支持DMA2D的开发板和RGB屏幕

DMA2D使用

  • 重命名工程名称为《 LVGL移植课堂代码4 》

  • 修改lv_conf.h中相关的宏定义,开启DMA2D

  • 在MDK配置中添加对应芯片的定义

  • 配置DMA2D外设

LVGL移植相关文件介绍

LVGL移植相关的文件如下:

第二节 LVGL移植

lv_conf.h是一个用户级别的文件,不同工程可以有不同的 lv_conf.h

lv_conf.h文件内容介绍

第二节 LVGL移植文章来源地址https://www.toymoban.com/news/detail-458512.html

到了这里,关于第二节 LVGL移植的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Mediapipe人脸关键点检测

    MediaPipe是由google制作的开源的、跨平台的机器学习框架,可以将一些模型部署到不同的平台和设备上使用的同时,也能保住检测速度。 从图中可以发现,能在Python上实现的功能包括人脸检测(Face Detection)、人脸关键点(Face Mesh),手部关键点(Hands)等。利用C++能实现更丰富

    2024年02月02日
    浏览(39)
  • 解剖学关键点检测方向论文翻译和精读:基于热力图回归的CNN融入空间配置实现关键点定位

    Abstract: In many medical image analysis applications, only a limited amount of training data is available due to the costs of image acquisition and the large manual annotation effort required from experts. Training recent state-of-the-art machine learning methods like convolutional neural networks (CNNs) from small datasets is a challenging task. In this wo

    2024年02月09日
    浏览(100)
  • 关键点检测SIFT算法笔记

            SIFT(Scale Invariant Feature Transform),尺度不变特征变换。具有旋转不变性、尺度不变性、亮度变化保持不变性,是一种非常稳定的局部特征。在目标检测和特征提取方向占据着重要的地位。         SIFT算法所查找到的关键点是一些很突出,不因光照、仿射变换和噪

    2024年02月16日
    浏览(48)
  • OpenCV实现人脸关键点检测

    目录 实现过程 1,代码解读 1.1 导入工具包 1.2导入所需图像,以及训练好的人脸预测模型 1.3 将 dlib 的关键点对象转换为 NumPy 数组,以便后续处理 1.4图像上可视化面部关键点 1.5# 读取输入数据,预处理 1.6进行人脸检测 1.7遍历检测到的框 1.8遍历每个面部 2,所有代码 3,结果

    2024年04月23日
    浏览(58)
  • MediaPipe人体姿态、手指关键点检测

    Mediapipe是google的一个开源项目,用于构建机器学习管道 提供了16个预训练模型的案例:人脸检测、Face Mesh、虹膜、手、姿态、人体、人物分割、头发分割、目标检测、Box Tracking、Instant Motion Tracking、3D目标检测、特征匹配、AutoFlip、MediaSequence、YouTube-8M 肢体识别本质上还是分类

    2024年02月08日
    浏览(52)
  • 关键点匹配——商汤LoFTR源码详解

    源码地址见文末         首先,进入目录,使用pip install -r requirements.txt配置环境。         首先,对于demo的运行,首先需要准备好需要用于关键点匹配的数据,提供的代码中置于了image文件夹下,然后是训练的权重,代码中下载了室内场景和室外场景的训练权重。  配置参

    2024年02月07日
    浏览(39)
  • Pytorch+Python实现人体关键点检测

    用Python+Pytorch工程代码对人体进行关键点检测和骨架提取,并实现可视化。 物体检测为许多视觉任务提供动力,如实例分割、姿态估计、跟踪和动作识别。它在监控、自动驾驶和视觉答疑中有下游应用。当前的对象检测器通过紧密包围对象的轴向包围框来表示每个对象。然后

    2024年02月09日
    浏览(43)
  • 更新贝尔金路由器的关键点介绍

    一、升级之前首先要核实你所使用产品的硬件版本号和现有的固件版本号,因为不同的硬件版本会对应于不同的固件版本,这些信息可以在产品外包装盒底部的白色标签上,或者在产品本身背面的白色标签处看到。 如果是英文字体,则请查看最后一行含有H/WVer:**F/WVer:**中

    2024年02月05日
    浏览(54)
  • MMPose姿态估计+人体关键点识别效果演示

    1.1 背景 首先姿态估计属于计算机视觉领域的一个基础研究方向。MMPose是基于Pytorch的姿态估计开源算法库,功能全,涵盖的算法多。 1.2 姿态估计的任务分类 维度 :预测的是2D还是3D姿态。 输入格式 :图片 or 视频 姿态的表示形式 :关键点 or 形状等 目标类型 :全身 or 人脸

    2024年01月20日
    浏览(45)
  • 基于yoloV7添加关键点训练记录

    yoloV7已经开源有一段时间了,近期已经基于yoloV7-pose的关键点算法进行了研究和修改。目前已经将该工程修改为,多分类+任意数量关键点:修改详细请看博客:基于yoloV7-pose添加任意关键点 + 多类别分类网络修改,修改代码已经开源:github地址,如果对大家有帮助也希望可以

    2024年01月17日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包