Arm-2D 本身并非GPU,而是一个 面向微控制器的2DGPU的硬件抽象层 ,支持从Cortex-M0到最新的Cortex-M85等所有的Cortex-M处理器。
Arm-2D提供两种加速方式加速LVGL9: 同步模式(Synchronouse Mode) 和 异步模式(Asynchronous Mode) 。
-
当芯片支持 Helium 或者 ACI(Arm Custom Instruction) 时,推荐使用 同步模式 来加速LVGL;
-
当芯片中存在Arm-2D所支持的2D GPU时,(例如:基于Arm DMAC-350所派生出来的2D GPU),推荐使用 异步模式 来加速LVGL。
上述来源于Arm-2D GPU (Arm-2D 图形处理器) — LVGL 文档
移植过程
配置宏
要使 LVGL 适配 ARM-2D,需要在 lv_conf.h 配置文件中设置相应的宏。根据 LVGL 的文档 ,可以通过以下方式启用 ARM-2D 加速:
在 lv_conf.h 配置文件中,设置宏 LV_USE_GPU_ARM2D 为 1 来启用 ARM-2D 加速。Arm-2D提供两种加速方式加速LVGL,根据需要进行选择:
-
同步模式:如果处理器支持 Helium 或 ACI(Arm Custom Instruction),可以在 lv_conf.h 中将宏 LV_USE_DRAW_ARM2D_SYNC 设置为 1,并把 LV_DRAW_SW_ASM 设置为 LV_DRAW_SW_ASM_HELIUM 来启用 ARM-2D 的同步加速模式。
-
异步模式:如果设备中包含 ARM-2D 支持的 2D GPU(例如基于 Arm DMAC-350 的 2D GPU),可以在 lv_conf.h 中将宏 LV_USE_DRAW_ARM2D_ASYNC 设置为 1 来启用 ARM-2D 的异步加速模式。
代码移植
首先下载Arm-2D代码,下载后是Arm-2D-main包,我将\Arm-2D-main\Library\Source里面的code和cmsis放在一起的,后面打算调整位置。
主要移植了Arm-2D的source code和头文件
还需要将Library\Include\templatearm_2d_cfg.h文件拷贝到lvgl\src\draw\arm2d这个目录
编译
1.下载的arm 2d中使用了restrict
关键字,导致有部分函数出现编译问题,我是将报错的地方关键字去掉的,改项目中的太麻烦。
在 C99 标准中,
restrict
关键字用于告诉编译器,该指针是访问所指内存的唯一方式,这样编译器可以进行更多的优化。如果两个非restrict
指针指向相同的内存,编译器允许它们之间可能的别名;但如果其中一个是restrict
指针,编译器则不允许它们之间有别名,因为这可能导致未定义行为。
2.缺失数学库函数,开启cmsis数学库的宏;
CONFIG_CMSIS_DSP=y
CONFIG_CMSIS_DSP_FASTMATH=y
3.cmsis版本和arm 2d版本没有匹配上,下载了最新版本的cmsis(CMSIS Version 6),替换了部分文件。不记得替换的什么文件了,所以直接用最新的吧。
4.需要开启GNU99
5.有部分函数冲突,如__ROR
函数被重复定义,注释掉none.h中的__ROR
定义