用XIP方式实现LVGL的Image资源
LVGL是嵌入式设备上GUI图形开发的新晋利器,系统小,效果也很不错。在LVGL中调用图片资源有两种方式,一种是将图片转换为C Array,直接使用,一种是用文件形式。
详见:LVGL官方文档 https://docs.lvgl.io/master/overview/image.html
- C Array的优势在于直接编译到系统中,速度快,使用起来也方便。问题是嵌入式的设备内存有限,图片一多就比较麻烦了。
- 文件形式很显然就是内存占用少,但是读取文件本身速度有些影响,另外在嵌入式系统中不得不引入文件系统(SPIFFS,FATFS)等,系统会变大,而且需要自己去Porting
怎么解决这个问题呢?XIP的解决方法浮出水面。
什么是XIP?
刚开始看见这个单词XIP,也是一头雾水,是文件系统的一种吗?Google之后,了解到就是直接物理地址访问On-Chip的Flash或者SPI Flash上的数据块。
在MCU的嵌入式设备中的内存地址与物理地址不是完全分隔开的,访问On-Chip的Flash或者SPI Flash上的数据是可以直接用物理地址来访问的。
这样我们就可以将LVGL的Image的 C Array内容直接写到Flash上,C Array的指针指向Flash的物理地址就可以了。
怎么将图片的C Array 数据写入Flash上呢?
Flash的数据其实就是Binary数据,方法就是在Host机器上将C Array写入数据文件*.bin中,然后通过J-Flash等工具将bin文件写到Flash的固定地址上,将C Array的指针指向固定地址。
这样做起来就比较麻烦,需要先将图片转换为C Array,然后在Host机器上将C Array的内容保存到.bin文件中,在修改C Array的c文件,在Host机器上编译设备上的可执行文件。
为了解决这些麻烦问题,研究了一下LVGL的Image Convert工具转换成Bin文件形式的格式(其实就是一个图片基本信息+C Array内容),所以就做了一个小工具读取Image Convert转换的Bin文件,
根据bin文件生成使用XIP指定地址的C Array.同时将多个图片的.bin文件合并成一个大的.bin文件,这样方便一次将系统中需要的所有图片文件合并起来Download到Flash上。
使用C Array的代码构成如下:
const LV_ATTRIBUTE_MEM_ALIGN LV_ATTRIBUTE_LARGE_CONST LV_ATTRIBUTE_IMG_IMG_HAND_GREEN uint8_t img_hand_green_map[] = { #if LV_COLOR_DEPTH == 1 || LV_COLOR_DEPTH == 8 /*Pixel format: Blue: 2 bit, Green: 3 bit, Red: 3 bit, Alpha 8 bit */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x04, 0x14, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x47, 0x1c, 0x57, 0x1c, 0x57, 0x18, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x0c, 0x18, 0x74, 0x1c, 0xeb, 0x1c, 0xf0, 0x18, 0xbc, 0x18, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x03, 0x1c, 0x8f, 0x1c, 0xfb, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xec, 0x1c, 0x87, 0x18, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0f, 0x18, 0xcb, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xc4, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xa0, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xf8, 0x1c, 0xa8, 0x14, 0x47, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x4b, 0x1c, 0xff, 0x1c, 0xdb, 0x14, 0x54, 0x14, 0x50, 0x1c, 0xb8, 0x1c, 0xff, 0x1c, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xfb, 0x18, 0xe8, 0x18, 0xe4, 0x18, 0xdc, 0x18, 0xd7, 0x18, 0xd0, 0x18, 0xb3, 0x18, 0xb0, 0x18, 0xaf, 0x18, 0xab, 0x18, 0xa7, 0x18, 0x87, 0x18, 0x84, 0x18, 0x80, 0x18, 0x7f, 0x18, 0x7b, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x18, 0x9c, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x18, 0xa0, 0x1c, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x18, 0x50, 0x18, 0xb7, 0x1c, 0xff, 0x18, 0x8c, 0x10, 0x04, 0x14, 0x0f, 0x1c, 0x37, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xfc, 0x1c, 0xfb, 0x1c, 0xf8, 0x1c, 0xf7, 0x1c, 0xf4, 0x1c, 0xf3, 0x1c, 0xf3, 0x1c, 0xf3, 0x1c, 0xf0, 0x1c, 0xec, 0x1c, 0xeb, 0x1c, 0xeb, 0x1c, 0xeb, 0x1c, 0xeb, 0x1c, 0xe8, 0x18, 0x77, 0x1c, 0xff, 0x1c, 0x8b, 0x14, 0x03, 0x14, 0x14, 0x18, 0x5c, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xff, 0x18, 0xfc, 0x18, 0xf7, 0x18, 0xb7, 0x18, 0xa8, 0x18, 0xa3, 0x18, 0xa3, 0x18, 0xa8, 0x18, 0x93, 0x18, 0x7f, 0x18, 0x6b, 0x1c, 0x5c, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x57, 0x1c, 0x9c, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x18, 0xff, 0x18, 0x90, 0x1c, 0x54, 0x1c, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x18, 0x57, 0x14, 0x53, 0x14, 0x4b, 0x14, 0x44, 0x14, 0x37, 0x14, 0x2f, 0x14, 0x27, 0x14, 0x24, 0x14, 0x24, 0x14, 0x24, 0x10, 0x17, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x30, 0x1c, 0xf4, 0x1c, 0xff, 0x18, 0xff, 0x18, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x18, 0x70, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1c, 0xcc, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xf8, 0x1c, 0xa8, 0x14, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x2b, 0x1c, 0xf3, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xf3, 0x1c, 0x48, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, 0x18, 0x18, 0xd8, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xff, 0x1c, 0xec, 0x1c, 0x87, 0x18, 0x13, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0c, 0x18, 0x5f, 0x18, 0x8c, 0x10, 0x17, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x54, 0x1c, 0x57, 0x1c, 0x57, 0x18, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, #endif }; const lv_img_dsc_t img_hand_green = { .header.always_zero = 0, .header.w = 100, .header.h = 9, .data_size = 900 * LV_IMG_PX_SIZE_ALPHA_BYTE, .header.cf = LV_IMG_CF_TRUE_COLOR_ALPHA, .data = img_hand_green_map, };
使用工具转换后,生成用XIP方式后代码:
#include "assets_xip.h" #define needle_green_map (const uint8_t*)(XIP_ADDR_START + 0x00011604) const lv_img_dsc_t needle_green = { .header.always_zero = 0, .header.w = 100, .header.h = 9, .data_size = 4500, .header.cf = 5, .data = needle_green_map, };
needle_green_map指向的就是FLash上的绝对地址。
还没想好将这个小工具放在哪里合适,有想要这个小工具的爱好者,可以留言找我要。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)