Toggle navigation
首页
问答
文章
积分商城
专家
专区
更多专区...
文档中心
返回主站
搜索
提问
会员
中心
登录
注册
LittlevGL_LVGL
瑞萨_RA6M4
瑞萨 + LVGL:一次不太成功的尝试
发布于 2022-07-11 15:33:36 浏览:801
订阅该版
[tocm] 关于一次不太成功的尝试的记录。 ## 与 Studio “搏斗” 很奇怪,用 Studio 2.2.4 创建的瑞萨 RA6M4 项目里没有 RT-Thread Settings、Board Information、 RA Smart Configuration 等三个条目。 几番折腾未果后,重新安装 Studio 后问题解决,随后尝试为项目添加 LVGL 软件包。 奇怪的事情再次发生了:滚动条转了几个小时,没有任何进展。报着死马当活马医的想法,安装了 Env 工具。 先 `pkgs --upgrade` 再 `pkgs --update`,LVGL 软件包终于安装成功。 用 Smart Configuration 为项目添加 SPI0。 ## 换用 Keil 受够了 Eclipse 了,使用 `scons --target=mdk5` 命令生成 Keil MDK5 工程。 ## 移植 LVGL 为了本次实验,专门买了一块 [3.5 寸触摸屏](http://www.lcdwiki.com/3.5inch_SPI_Module_ILI9488_SKU:MSP3520) 。 以我拙见,LVGL 应该已经移植到 RT-Thread components/drivers (如 SPI)之上,所有实现了 RT-Thread SPI 接口的芯片都可以直接使用 LVGL。 但是事实上,LVGL 被移植到了 [BSP 之上](https://github.com/RT-Thread/rt-thread/blob/master/bsp/stm32/stm32h750-artpi/board/port/drv_spi_ili9488.c)。 将 `drv_spi_ili9488.c` 添加到项目,好在这个模块是基于 RT-Thread SPI driver 实现, 简化掉一些不需要的内容就完成了移植。 ### LVGL Thread LVGL 在一个单独的 Thread 里运行(这里我们测试 benchmark 示例): ```c void lv_entry(void *_) { lv_port_init(); lv_demo_benchmark(); while (1) { lv_task_handler(); rt_thread_mdelay(2); } } void hal_entry(void) { rt_thread_t tid = rt_thread_create("lvgl", lv_entry, RT_NULL, 4096, RT_MAIN_THREAD_PRIORITY, 20); rt_thread_startup(tid); //... } ``` ### 实现绘制 依据 `lv_port_disp_template.c` 照葫芦画瓢创建 `lv_port_disp.c`。 基于点(`lcd_draw_point_color`)的绘制实现如下: ```c static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { int32_t x; int32_t y; for(y = area->y1; y <= area->y2; y++) { for(x = area->x1; x <= area->x2; x++) { lcd_draw_point_color(x, y, color_p->full); color_p++; } } lv_disp_flush_ready(disp_drv); } ``` 显然,这种绘制方式效率非常低。`drv_spi_ili9488.c` 还提供了另一种批量填充方法 `lcd_fill_array`,利用这个函数重新实现 `disp_flush` 如下: ```c static void disp_flush(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { lcd_fill_array(area->x1, area->y1, area->x2, area->y2, color_p); lv_disp_flush_ready(disp_drv); } ``` RA6M4 使用 DMA 实现 `lcd_fill_array` 所需要的 SPI 数据传输,效率很高。 ## 最后 很遗憾,`lcd_fill_array` 效果很不稳定,可能是杜邦线上的干扰,可能是 BSP 代码有问题。 `lcd_draw_point_color` 效率太低,刷新一次屏幕大概需要半分钟。 大概也只能止步于此了。代码附于后,供各位参考。
3
条评论
默认排序
按发布时间排序
登录
注册新账号
关于作者
FLWX_7778
这家伙很懒,什么也没写!
文章
3
回答
0
被采纳
0
关注TA
发私信
相关文章
1
LittlevGL + DMA2D 显示图案扭曲
2
LittleVGL2RTT软件包还有在维护吗,测试遇到一些问题求解
3
使用littlevgl2rtt软件包实例运行不成功,emwin正常
4
关于littlevgl2rtt软件包刷频慢的解决方案?
5
移植了littlevGUI之后,用动态 线程去跑例程会卡死
6
lvgl的字体、图片文件如何升级?
7
qemu-vexpress-a9bsp下的littvgl工程可以实现触屏操作吗?
8
LVGL控件刷新死机问题
9
在lvgl上设置一个时间显示的label,一段时间后所有控件消失。
10
littlevgl2rtt和littlevgl的pc模拟器源码不兼容吗?
推荐文章
1
RT-Thread应用项目汇总
2
玩转RT-Thread系列教程
3
国产MCU移植系列教程汇总,欢迎查看!
4
机器人操作系统 (ROS2) 和 RT-Thread 通信
5
五分钟玩转RT-Thread新社区
6
【技术三千问】之《玩转ART-Pi》,看这篇就够了!干货汇总
7
关于STM32H7开发板上使用SDIO接口驱动SD卡挂载文件系统的问题总结
8
STM32的“GPU”——DMA2D实例详解
9
RT-Thread隐藏的宝藏之completion
10
【ART-PI】RT-Thread 开启RTC 与 Alarm组件
热门标签
RT-Thread Studio
串口
Env
LWIP
SPI
AT
Bootloader
Hardfault
CAN总线
FinSH
ART-Pi
USB
DMA
文件系统
RT-Thread
SCons
RT-Thread Nano
线程
MQTT
STM32
RTC
FAL
rt-smart
ESP8266
I2C_IIC
UART
WIZnet_W5500
ota在线升级
freemodbus
PWM
flash
cubemx
packages_软件包
BSP
潘多拉开发板_Pandora
定时器
ADC
flashDB
GD32
socket
中断
编译报错
Debug
SFUD
rt_mq_消息队列_msg_queue
msh
keil_MDK
ulog
C++_cpp
MicroPython
本月问答贡献
a1012112796
10
个答案
1
次被采纳
踩姑娘的小蘑菇
4
个答案
1
次被采纳
红枫
4
个答案
1
次被采纳
张世争
4
个答案
1
次被采纳
Ryan_CW
4
个答案
1
次被采纳
本月文章贡献
catcatbing
3
篇文章
5
次点赞
YZRD
2
篇文章
5
次点赞
qq1078249029
2
篇文章
2
次点赞
xnosky
2
篇文章
1
次点赞
Woshizhapuren
1
篇文章
5
次点赞
回到
顶部
发布
问题
投诉
建议
回到
底部