mango-MQ-R基于Melis移植lvgl
-
1.下载lvgl源码到《D1s-Melis/ekernel/drivers/hal/test/disp2》目录
我使用的源码是https://github.com/lvgl/lv_port_pc_eclipse
,克隆到D1s-Melis/ekernel/drivers/hal/test/disp2
目录。然后在D1s-Melis/ekernel/drivers/hal/test/disp2/lv_port_pc_eclipse》
目录下建立一个Makefile,把全部的C文件都包含进来编译的。这是因为lvgl的所有非必要的C文件都可以通过宏定义配置是否编译。例如lv_bmp.c里面的代码是否编译,取决于 宏定义LV_USE_BMP:
为了简单起见,很多非必要的组件我都没有包含进来,详情见 lv_conf.h 。
/** * @file lv_conf.h * Configuration file for v9.0.0-dev */ /* * Copy this file as `lv_conf.h` * 1. simply next to the `lvgl` folder * 2. or any other places and * - define `LV_CONF_INCLUDE_SIMPLE` * - add the path as include path */ /* clang-format off */ #if 1 /*Set it to "1" to enable content*/ #ifndef LV_CONF_H #define LV_CONF_H #define LV_USE_DEV_VERSION /*==================== COLOR SETTINGS *====================*/ /*Color depth: 1 (1 byte per pixel), 8 (RGB332), 16 (RGB565), 24 (RGB888), 32 (ARGB8888)*/ #define LV_COLOR_DEPTH 32 #define LV_COLOR_CHROMA_KEY lv_color_hex(0x00ff00) /*Enable more complex drawing routines to manage screens transparency. *Can be used if the UI is above another layer, e.g. an OSD menu or video player. *Requires `LV_COLOR_DEPTH = 32` colors and the screen's `bg_opa` should be set to non LV_OPA_COVER value*/ #define LV_COLOR_SCREEN_TRANSP 1 /*========================= STDLIB WRAPPER SETTINGS *=========================*/ /*Enable and configure the built-in memory manager*/ #define LV_USE_BUILTIN_MALLOC 1 #if LV_USE_BUILTIN_MALLOC /*Size of the memory available for `lv_malloc()` in bytes (>= 2kB)*/ #define LV_MEM_SIZE (128U * 1024U) /*[bytes]*/ /*Size of the memory expand for `lv_malloc()` in bytes*/ #define LV_MEM_POOL_EXPAND_SIZE 0 /*Set an address for the memory pool instead of allocating it as a normal array. Can be in external SRAM too.*/ #define LV_MEM_ADR 0 /*0: unused*/ /*Instead of an address give a memory allocator that will be called to get a memory pool for LVGL. E.g. my_malloc*/ #if LV_MEM_ADR == 0 #undef LV_MEM_POOL_INCLUDE #undef LV_MEM_POOL_ALLOC #endif #endif /*LV_USE_BUILTIN_MALLOC*/ /*Enable lv_memcpy_builtin, lv_memset_builtin, lv_strlen_builtin, lv_strncpy_builtin*/ #define LV_USE_BUILTIN_MEMCPY 1 /*Enable and configure the built-in (v)snprintf */ #define LV_USE_BUILTIN_SNPRINTF 1 #if LV_USE_BUILTIN_SNPRINTF #define LV_SPRINTF_USE_FLOAT 0 #endif /*LV_USE_BUILTIN_SNPRINTF*/ #define LV_STDLIB_INCLUDE <stdint.h> #define LV_STDIO_INCLUDE <stdint.h> #define LV_STRING_INCLUDE <stdint.h> #define LV_MALLOC lv_malloc_builtin #define LV_REALLOC lv_realloc_builtin #define LV_FREE lv_free_builtin #define LV_MEMSET lv_memset_builtin #define LV_MEMCPY lv_memcpy_builtin #define LV_SNPRINTF lv_snprintf_builtin #define LV_VSNPRINTF lv_vsnprintf_builtin #define LV_STRLEN lv_strlen_builtin #define LV_STRNCPY lv_strncpy_builtin #define LV_COLOR_EXTERN_INCLUDE <stdint.h> #define LV_COLOR_MIX lv_color_mix #define LV_COLOR_PREMULT lv_color_premult #define LV_COLOR_MIX_PREMULT lv_color_mix_premult /*==================== HAL SETTINGS *====================*/ /*Default display refresh, input device read and animation step period.*/ #define LV_DEF_REFR_PERIOD 33 /*[ms]*/ /*Use a custom tick source that tells the elapsed time in milliseconds. *It removes the need to manually update the tick with `lv_tick_inc()`)*/ #define LV_TICK_CUSTOM 0 #if LV_TICK_CUSTOM #define LV_TICK_CUSTOM_INCLUDE "Arduino.h" /*Header for the system time function*/ #define LV_TICK_CUSTOM_SYS_TIME_EXPR (millis()) /*Expression evaluating to current system time in ms*/ /*If using lvgl as ESP32 component*/ // #define LV_TICK_CUSTOM_INCLUDE "esp_timer.h" // #define LV_TICK_CUSTOM_SYS_TIME_EXPR ((esp_timer_get_time() / 1000LL)) #endif /*LV_TICK_CUSTOM*/ /*Default Dot Per Inch. Used to initialize default sizes such as widgets sized, style paddings. *(Not so important, you can adjust it to modify default sizes and spaces)*/ #define LV_DPI_DEF 130 /*[px/inch]*/ /*======================== * DRAW CONFIGURATION *========================*/ /*Enable the built in mask engine. *Required to draw shadow, rounded corners, circles, arc, skew lines, or any other masks*/ #define LV_USE_DRAW_MASKS 1 #define LV_USE_DRAW_SW 1 #if LV_USE_DRAW_SW /*Enable complex draw engine. *Required to draw shadow, gradient, rounded corners, circles, arc, skew lines, image transformations or any masks*/ #define LV_DRAW_SW_COMPLEX 1 /* If a widget has `style_opa < 255` (not `bg_opa`, `text_opa` etc) or not NORMAL blend mode * it is buffered into a "simple" layer before rendering. The widget can be buffered in smaller chunks. * "Transformed layers" (if `transform_angle/zoom` are set) use larger buffers * and can't be drawn in chunks. */ /*The target buffer size for simple layer chunks.*/ #define LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE (24 * 1024) /*[bytes]*/ /*Used if `LV_DRAW_SW_LAYER_SIMPLE_BUF_SIZE` couldn't be allocated.*/ #define LV_DRAW_SW_LAYER_SIMPLE_FALLBACK_BUF_SIZE (3 * 1024) /*[bytes]*/ /*Allow buffering some shadow calculation. *LV_DRAW_SW_SHADOW_CACHE_SIZE is the max. shadow size to buffer, where shadow size is `shadow_width + radius` *Caching has LV_DRAW_SW_SHADOW_CACHE_SIZE^2 RAM cost*/ #define LV_DRAW_SW_SHADOW_CACHE_SIZE 0 /* Set number of maximally cached circle data. * The circumference of 1/4 circle are saved for anti-aliasing * radius * 4 bytes are used per circle (the most often used radiuses are saved) * 0: to disable caching */ #define LV_DRAW_SW_CIRCLE_CACHE_SIZE 4 /*Default gradient buffer size. *When LVGL calculates the gradient "maps" it can save them into a cache to avoid calculating them again. *LV_DRAW_SW_GRADIENT_CACHE_DEF_SIZE sets the size of this cache in bytes. *If the cache is too small the map will be allocated only while it's required for the drawing. *0 mean no caching.*/ #define LV_DRAW_SW_GRADIENT_CACHE_DEF_SIZE 0 /*Allow dithering the gradients (to achieve visual smooth color gradients on limited color depth display) *LV_DRAW_SW_GRADIENT_DITHER implies allocating one or two more lines of the object's rendering surface *The increase in memory consumption is (32 bits * object width) plus 24 bits * object width if using error diffusion */ #define LV_DRAW_SW_GRADIENT_DITHER 0 #if LV_DRAW_SW_GRADIENT_DITHER /*Add support for error diffusion dithering. *Error diffusion dithering gets a much better visual result, but implies more CPU consumption and memory when drawing. *The increase in memory consumption is (24 bits * object's width)*/ #define LV_DRAW_SW_GRADIENT_DITHER_ERROR_DIFFUSION 0 #endif /*Enable subpixel rendering*/ #define LV_DRAW_SW_FONT_SUBPX 0 #if LV_DRAW_SW_FONT_SUBPX /*Set the pixel order of the display. Physical order of RGB channels. Doesn't matter with "normal" fonts.*/ #define LV_DRAW_SW_FONT_SUBPX_BGR 0 /*0: RGB; 1:BGR order*/ #endif #endif /*Use SDL renderer API*/ #define LV_USE_DRAW_SDL 0 #if LV_USE_DRAW_SDL #define LV_DRAW_SDL_INCLUDE_PATH <SDL2/SDL.h> /*Texture cache size, 8MB by default*/ #define LV_DRAW_SDL_LRU_SIZE (1024 * 1024 * 8) /*Custom blend mode for mask drawing, disable if you need to link with older SDL2 lib*/ #define LV_DRAW_SDL_CUSTOM_BLEND_MODE (SDL_VERSION_ATLEAST(2, 0, 6)) #endif /*===================== * GPU CONFIGURATION *=====================*/ /*Use Arm's 2D acceleration library Arm-2D */ #define LV_USE_GPU_ARM2D 0 /*Use STM32's DMA2D (aka Chrom Art) GPU*/ #define LV_USE_GPU_STM32_DMA2D 0 #if LV_USE_GPU_STM32_DMA2D /*Must be defined to include path of CMSIS header of target processor e.g. "stm32f769xx.h" or "stm32f429xx.h"*/ #define LV_GPU_DMA2D_CMSIS_INCLUDE #endif /*Use GD32 IPA GPU * This adds support for Image Processing Accelerator on GD32F450 and GD32F470 series MCUs * * NOTE: IPA on GD32F450 has a bug where the fill operation overwrites data beyond the * framebuffer. This driver works around it by saving and restoring affected memory, but * this makes it not thread-safe. GD32F470 is not affected. */ #define LV_USE_GPU_GD32_IPA 0 /*Use NXP's PXP GPU iMX RTxxx platforms*/ #define LV_USE_GPU_NXP_PXP 0 #if LV_USE_GPU_NXP_PXP /*1: Add default bare metal and FreeRTOS interrupt handling routines for PXP (lv_gpu_nxp_pxp_osa.c) * and call lv_gpu_nxp_pxp_init() automatically during lv_init(). Note that symbol SDK_OS_FREE_RTOS * has to be defined in order to use FreeRTOS OSA, otherwise bare-metal implementation is selected. *0: lv_gpu_nxp_pxp_init() has to be called manually before lv_init() */ #define LV_USE_GPU_NXP_PXP_AUTO_INIT 0 #endif /*Use NXP's VG-Lite GPU iMX RTxxx platforms*/ #define LV_USE_GPU_NXP_VG_LITE 0 /*Use SWM341's DMA2D GPU*/ #define LV_USE_GPU_SWM341_DMA2D 0 #if LV_USE_GPU_SWM341_DMA2D #define LV_GPU_SWM341_DMA2D_INCLUDE "SWM341.h" #endif /*======================= * FEATURE CONFIGURATION *=======================*/ /*------------- * Logging *-----------*/ /*Enable the log module*/ #define LV_USE_LOG 0 #if LV_USE_LOG /*How important log should be added: *LV_LOG_LEVEL_TRACE A lot of logs to give detailed information *LV_LOG_LEVEL_INFO Log important events *LV_LOG_LEVEL_WARN Log if something unwanted happened but didn't cause a problem *LV_LOG_LEVEL_ERROR Only critical issue, when the system may fail *LV_LOG_LEVEL_USER Only logs added by the user *LV_LOG_LEVEL_NONE Do not log anything*/ #define LV_LOG_LEVEL LV_LOG_LEVEL_WARN /*1: Print the log with 'printf'; *0: User need to register a callback with `lv_log_register_print_cb()`*/ #define LV_LOG_PRINTF 0 /*1: Enable print timestamp; *0: Disable print timestamp*/ #define LV_LOG_USE_TIMESTAMP 1 /*Enable/disable LV_LOG_TRACE in modules that produces a huge number of logs*/ #define LV_LOG_TRACE_MEM 1 #define LV_LOG_TRACE_TIMER 1 #define LV_LOG_TRACE_INDEV 1 #define LV_LOG_TRACE_DISP_REFR 1 #define LV_LOG_TRACE_EVENT 1 #define LV_LOG_TRACE_OBJ_CREATE 1 #define LV_LOG_TRACE_LAYOUT 1 #define LV_LOG_TRACE_ANIM 1 #define LV_LOG_TRACE_MSG 1 #endif /*LV_USE_LOG*/ /*------------- * Asserts *-----------*/ /*Enable asserts if an operation is failed or an invalid data is found. *If LV_USE_LOG is enabled an error message will be printed on failure*/ #define LV_USE_ASSERT_NULL 1 /*Check if the parameter is NULL. (Very fast, recommended)*/ #define LV_USE_ASSERT_MALLOC 1 /*Checks is the memory is successfully allocated or no. (Very fast, recommended)*/ #define LV_USE_ASSERT_STYLE 0 /*Check if the styles are properly initialized. (Very fast, recommended)*/ #define LV_USE_ASSERT_MEM_INTEGRITY 0 /*Check the integrity of `lv_mem` after critical operations. (Slow)*/ #define LV_USE_ASSERT_OBJ 0 /*Check the object's type and existence (e.g. not deleted). (Slow)*/ /*Add a custom handler when assert happens e.g. to restart the MCU*/ #define LV_ASSERT_HANDLER_INCLUDE <stdint.h> #define LV_ASSERT_HANDLER while(1); /*Halt by default*/ /*------------- * Others *-----------*/ /*1: Show CPU usage and FPS count*/ #define LV_USE_PERF_MONITOR 0 #if LV_USE_PERF_MONITOR #define LV_USE_PERF_MONITOR_POS LV_ALIGN_BOTTOM_RIGHT #endif /*1: Show the used memory and the memory fragmentation * Requires `LV_USE_BUILTIN_MALLOC = 1`*/ #define LV_USE_MEM_MONITOR 0 #if LV_USE_MEM_MONITOR #define LV_USE_MEM_MONITOR_POS LV_ALIGN_BOTTOM_LEFT #endif /*1: Draw random colored rectangles over the redrawn areas*/ #define LV_USE_REFR_DEBUG 0 /*Maximum buffer size to allocate for rotation. *Only used if software rotation is enabled in the display driver.*/ #define LV_DISP_ROT_MAX_BUF (10*1024) #define LV_USE_USER_DATA 1 /*Garbage Collector settings *Used if lvgl is bound to higher level language and the memory is managed by that language*/ #define LV_ENABLE_GC 0 #if LV_ENABLE_GC != 0 #define LV_GC_INCLUDE "gc.h" /*Include Garbage Collector related things*/ #endif /*LV_ENABLE_GC*/ /*Default image cache size. Image caching keeps some images opened. *If only the built-in image formats are used there is no real advantage of caching. *With other image decoders (e.g. PNG or JPG) caching save the continuous open/decode of images. *However the opened images consume additional RAM. *0: to disable caching*/ #define LV_IMG_CACHE_DEF_SIZE 0 /*Number of stops allowed per gradient. Increase this to allow more stops. *This adds (sizeof(lv_color_t) + 1) bytes per additional stop*/ #define LV_GRADIENT_MAX_STOPS 2 /* Adjust color mix functions rounding. GPUs might calculate color mix (blending) differently. * 0: round down, 64: round up from x.75, 128: round up from half, 192: round up from x.25, 254: round up */ #define LV_COLOR_MIX_ROUND_OFS 0 /*===================== * COMPILER SETTINGS *====================*/ /*For big endian systems set to 1*/ #define LV_BIG_ENDIAN_SYSTEM 0 /*Define a custom attribute to `lv_tick_inc` function*/ #define LV_ATTRIBUTE_TICK_INC /*Define a custom attribute to `lv_timer_handler` function*/ #define LV_ATTRIBUTE_TIMER_HANDLER /*Define a custom attribute to `lv_disp_flush_ready` function*/ #define LV_ATTRIBUTE_FLUSH_READY /*Required alignment size for buffers*/ #define LV_ATTRIBUTE_MEM_ALIGN_SIZE 1 /*Will be added where memories needs to be aligned (with -Os data might not be aligned to boundary by default). * E.g. __attribute__((aligned(4)))*/ #define LV_ATTRIBUTE_MEM_ALIGN /*Attribute to mark large constant arrays for example font's bitmaps*/ #define LV_ATTRIBUTE_LARGE_CONST /*Compiler prefix for a big array declaration in RAM*/ #define LV_ATTRIBUTE_LARGE_RAM_ARRAY /*Place performance critical functions into a faster memory (e.g RAM)*/ #define LV_ATTRIBUTE_FAST_MEM /*Export integer constant to binding. This macro is used with constants in the form of LV_<CONST> that *should also appear on LVGL binding API such as Micropython.*/ #define LV_EXPORT_CONST_INT(int_value) struct _silence_gcc_warning /*The default value just prevents GCC warning*/ /*Extend the default -32k..32k coordinate range to -4M..4M by using int32_t for coordinates instead of int16_t*/ #define LV_USE_LARGE_COORD 0 /*================== * FONT USAGE *===================*/ /*Montserrat fonts with ASCII range and some symbols using bpp = 4 *https://fonts.google.com/specimen/Montserrat*/ #define LV_FONT_MONTSERRAT_8 1 #define LV_FONT_MONTSERRAT_10 1 #define LV_FONT_MONTSERRAT_12 1 #define LV_FONT_MONTSERRAT_14 1 #define LV_FONT_MONTSERRAT_16 1 #define LV_FONT_MONTSERRAT_18 1 #define LV_FONT_MONTSERRAT_20 1 #define LV_FONT_MONTSERRAT_22 1 #define LV_FONT_MONTSERRAT_24 1 #define LV_FONT_MONTSERRAT_26 1 #define LV_FONT_MONTSERRAT_28 1 #define LV_FONT_MONTSERRAT_30 1 #define LV_FONT_MONTSERRAT_32 1 #define LV_FONT_MONTSERRAT_34 1 #define LV_FONT_MONTSERRAT_36 1 #define LV_FONT_MONTSERRAT_38 1 #define LV_FONT_MONTSERRAT_40 1 #define LV_FONT_MONTSERRAT_42 1 #define LV_FONT_MONTSERRAT_44 1 #define LV_FONT_MONTSERRAT_46 1 #define LV_FONT_MONTSERRAT_48 1 /*Demonstrate special features*/ #define LV_FONT_MONTSERRAT_12_SUBPX 1 #define LV_FONT_MONTSERRAT_28_COMPRESSED 1 /*bpp = 3*/ #define LV_FONT_DEJAVU_16_PERSIAN_HEBREW 1 /*Hebrew, Arabic, Persian letters and all their forms*/ #define LV_FONT_SIMSUN_16_CJK 1 /*1000 most common CJK radicals*/ /*Pixel perfect monospace fonts*/ #define LV_FONT_UNSCII_8 1 #define LV_FONT_UNSCII_16 1 /*Optionally declare custom fonts here. *You can use these fonts as default font too and they will be available globally. *E.g. #define LV_FONT_CUSTOM_DECLARE LV_FONT_DECLARE(my_font_1) LV_FONT_DECLARE(my_font_2)*/ #define LV_FONT_CUSTOM_DECLARE /*Always set a default font*/ #define LV_FONT_DEFAULT &lv_font_montserrat_14 /*Enable handling large font and/or fonts with a lot of characters. *The limit depends on the font size, font face and bpp. *Compiler error will be triggered if a font needs it.*/ #define LV_FONT_FMT_TXT_LARGE 1 /*Enables/disables support for compressed fonts.*/ #define LV_USE_FONT_COMPRESSED 1 /*Enable drawing placeholders when glyph dsc is not found*/ #define LV_USE_FONT_PLACEHOLDER 1 /*================= * TEXT SETTINGS *=================*/ /** * Select a character encoding for strings. * Your IDE or editor should have the same character encoding * - LV_TXT_ENC_UTF8 * - LV_TXT_ENC_ASCII */ #define LV_TXT_ENC LV_TXT_ENC_UTF8 /*Can break (wrap) texts on these chars*/ #define LV_TXT_BREAK_CHARS " ,.;:-_)]}" /*If a word is at least this long, will break wherever "prettiest" *To disable, set to a value <= 0*/ #define LV_TXT_LINE_BREAK_LONG_LEN 0 /*Minimum number of characters in a long word to put on a line before a break. *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ #define LV_TXT_LINE_BREAK_LONG_PRE_MIN_LEN 3 /*Minimum number of characters in a long word to put on a line after a break. *Depends on LV_TXT_LINE_BREAK_LONG_LEN.*/ #define LV_TXT_LINE_BREAK_LONG_POST_MIN_LEN 3 /*The control character to use for signalling text recoloring.*/ #define LV_TXT_COLOR_CMD "#" /*Support bidirectional texts. Allows mixing Left-to-Right and Right-to-Left texts. *The direction will be processed according to the Unicode Bidirectional Algorithm: *https://www.w3.org/International/articles/inline-bidi-markup/uba-basics*/ #define LV_USE_BIDI 1 #if LV_USE_BIDI /*Set the default direction. Supported values: *`LV_BASE_DIR_LTR` Left-to-Right *`LV_BASE_DIR_RTL` Right-to-Left *`LV_BASE_DIR_AUTO` detect texts base direction*/ #define LV_BIDI_BASE_DIR_DEF LV_BASE_DIR_AUTO #endif /*Enable Arabic/Persian processing *In these languages characters should be replaced with an other form based on their position in the text*/ #define LV_USE_ARABIC_PERSIAN_CHARS 1 /*================== * WIDGETS *================*/ /*Documentation of the widgets: https://docs.lvgl.io/latest/en/html/widgets/index.html*/ #define LV_USE_ANIMIMG 1 #define LV_USE_ARC 1 #define LV_USE_BAR 1 #define LV_USE_BTN 1 #define LV_USE_BTNMATRIX 1 #define LV_USE_CALENDAR 1 #if LV_USE_CALENDAR #define LV_CALENDAR_WEEK_STARTS_MONDAY 0 #if LV_CALENDAR_WEEK_STARTS_MONDAY #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"} #else #define LV_CALENDAR_DEFAULT_DAY_NAMES {"Su", "Mo", "Tu", "We", "Th", "Fr", "Sa"} #endif #define LV_CALENDAR_DEFAULT_MONTH_NAMES {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} #define LV_USE_CALENDAR_HEADER_ARROW 1 #define LV_USE_CALENDAR_HEADER_DROPDOWN 1 #endif /*LV_USE_CALENDAR*/ #define LV_USE_CANVAS 1 #define LV_USE_CHART 1 #define LV_USE_CHECKBOX 1 #define LV_USE_COLORWHEEL 1 #define LV_USE_DROPDOWN 1 /*Requires: lv_label*/ #define LV_USE_IMG 1 /*Requires: lv_label*/ #define LV_USE_IMGBTN 1 #define LV_USE_KEYBOARD 1 #define LV_USE_LABEL 1 #if LV_USE_LABEL #define LV_LABEL_TEXT_SELECTION 1 /*Enable selecting text of the label*/ #define LV_LABEL_LONG_TXT_HINT 1 /*Store some extra info in labels to speed up drawing of very long texts*/ #endif #define LV_USE_LED 1 #define LV_USE_LINE 1 #define LV_USE_LIST 1 #define LV_USE_MENU 1 #define LV_USE_METER 1 #define LV_USE_MSGBOX 1 #define LV_USE_ROLLER 1 /*Requires: lv_label*/ #define LV_USE_SLIDER 1 /*Requires: lv_bar*/ #define LV_USE_SPAN 1 #if LV_USE_SPAN /*A line text can contain maximum num of span descriptor */ #define LV_SPAN_SNIPPET_STACK_SIZE 64 #endif #define LV_USE_SPINBOX 1 #define LV_USE_SPINNER 1 #define LV_USE_SWITCH 1 #define LV_USE_TEXTAREA 1 /*Requires: lv_label*/ #if LV_USE_TEXTAREA != 0 #define LV_TEXTAREA_DEF_PWD_SHOW_TIME 1500 /*ms*/ #endif #define LV_USE_TABLE 1 #define LV_USE_TABVIEW 1 #define LV_USE_TILEVIEW 1 #define LV_USE_WIN 1 /*================== * THEMES *==================*/ /*A simple, impressive and very complete theme*/ #define LV_USE_THEME_DEFAULT 1 #if LV_USE_THEME_DEFAULT /*0: Light mode; 1: Dark mode*/ #define LV_THEME_DEFAULT_DARK 0 /*1: Enable grow on press*/ #define LV_THEME_DEFAULT_GROW 1 /*Default transition time in [ms]*/ #define LV_THEME_DEFAULT_TRANSITION_TIME 80 #endif /*LV_USE_THEME_DEFAULT*/ /*A very simple theme that is a good starting point for a custom theme*/ #define LV_USE_THEME_BASIC 1 /*A theme designed for monochrome displays*/ #define LV_USE_THEME_MONO 1 /*================== * LAYOUTS *==================*/ /*A layout similar to Flexbox in CSS.*/ #define LV_USE_FLEX 1 /*A layout similar to Grid in CSS.*/ #define LV_USE_GRID 1 /*==================== * 3RD PARTS LIBRARIES *====================*/ /*File system interfaces for common APIs */ /*API for fopen, fread, etc*/ #define LV_USE_FS_STDIO 0 #if LV_USE_FS_STDIO #define LV_FS_STDIO_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_STDIO_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ #define LV_FS_STDIO_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*API for open, read, etc*/ #define LV_USE_FS_POSIX 0 #if LV_USE_FS_POSIX #define LV_FS_POSIX_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_POSIX_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ #define LV_FS_POSIX_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*API for CreateFile, ReadFile, etc*/ #define LV_USE_FS_WIN32 0 #if LV_USE_FS_WIN32 #define LV_FS_WIN32_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_WIN32_PATH "" /*Set the working directory. File/directory paths will be appended to it.*/ #define LV_FS_WIN32_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*API for FATFS (needs to be added separately). Uses f_open, f_read, etc*/ #define LV_USE_FS_FATFS 0 #if LV_USE_FS_FATFS #define LV_FS_FATFS_LETTER '\0' /*Set an upper cased letter on which the drive will accessible (e.g. 'A')*/ #define LV_FS_FATFS_CACHE_SIZE 0 /*>0 to cache this number of bytes in lv_fs_read()*/ #endif /*PNG decoder library*/ #define LV_USE_PNG 1 /*BMP decoder library*/ #define LV_USE_BMP 1 /* JPG + split JPG decoder library. * Split JPG is a custom format optimized for embedded systems. */ #define LV_USE_SJPG 0 /*GIF decoder library*/ #define LV_USE_GIF 0 /*QR code library*/ #define LV_USE_QRCODE 0 /*Barcode code library*/ #define LV_USE_BARCODE 0 /*FreeType library*/ #define LV_USE_FREETYPE 0 #if LV_USE_FREETYPE /*Memory used by FreeType to cache characters [bytes]*/ #define LV_FREETYPE_CACHE_SIZE (64 * 1024) /*Let FreeType to use LVGL memory and file porting*/ #define LV_FREETYPE_USE_LVGL_PORT 0 /* 1: bitmap cache use the sbit cache, 0:bitmap cache use the image cache. */ /* sbit cache:it is much more memory efficient for small bitmaps(font size < 256) */ /* if font size >= 256, must be configured as image cache */ #define LV_FREETYPE_SBIT_CACHE 0 /* Maximum number of opened FT_Face/FT_Size objects managed by this cache instance. */ /* (0:use system defaults) */ #define LV_FREETYPE_CACHE_FT_FACES 4 #define LV_FREETYPE_CACHE_FT_SIZES 4 #endif /* Built-in TTF decoder */ #define LV_USE_TINY_TTF 1 #if LV_USE_TINY_TTF /* Enable loading TTF data from files */ #define LV_TINY_TTF_FILE_SUPPORT 0 #endif /*Rlottie library*/ #define LV_USE_RLOTTIE 0 /*FFmpeg library for image decoding and playing videos *Supports all major image formats so do not enable other image decoder with it*/ #define LV_USE_FFMPEG 0 #if LV_USE_FFMPEG /*Dump input information to stderr*/ #define LV_FFMPEG_DUMP_FORMAT 0 #endif /*================== * OTHERS *==================*/ /*1: Enable API to take snapshot for object*/ #define LV_USE_SNAPSHOT 1 /*1: Enable Monkey test*/ #define LV_USE_MONKEY 1 /*1: Enable grid navigation*/ #define LV_USE_GRIDNAV 1 /*1: Enable lv_obj fragment*/ #define LV_USE_FRAGMENT 1 /*1: Support using images as font in label or span widgets */ #define LV_USE_IMGFONT 1 #if LV_USE_IMGFONT /*Imgfont image file path maximum length*/ #define LV_IMGFONT_PATH_MAX_LEN 64 /*1: Use img cache to buffer header information*/ #define LV_IMGFONT_USE_IMG_CACHE_HEADER 0 #endif /*1: Enable a published subscriber based messaging system */ #define LV_USE_MSG 1 /*1: Enable Pinyin input method*/ /*Requires: lv_keyboard*/ #define LV_USE_IME_PINYIN 0 #if LV_USE_IME_PINYIN /*1: Use default thesaurus*/ /*If you do not use the default thesaurus, be sure to use `lv_ime_pinyin` after setting the thesauruss*/ #define LV_IME_PINYIN_USE_DEFAULT_DICT 1 /*Set the maximum number of candidate panels that can be displayed*/ /*This needs to be adjusted according to the size of the screen*/ #define LV_IME_PINYIN_CAND_TEXT_NUM 6 /*Use 9 key input(k9)*/ #define LV_IME_PINYIN_USE_K9_MODE 1 #if LV_IME_PINYIN_USE_K9_MODE == 1 #define LV_IME_PINYIN_K9_CAND_TEXT_NUM 3 #endif // LV_IME_PINYIN_USE_K9_MODE #endif /*1: Enable file explorer*/ /*Requires: lv_table*/ #define LV_USE_FILE_EXPLORER 0 #if LV_USE_FILE_EXPLORER /*Maximum length of path*/ #define LV_FILE_EXPLORER_PATH_MAX_LEN (128) /*Quick access bar, 1:use, 0:not use*/ /*Requires: lv_list*/ #define LV_FILE_EXPLORER_QUICK_ACCESS 1 #endif /*================== * DEVICES *==================*/ /*Use SDL to open window on PC and handle mouse and keyboard*/ #define LV_USE_SDL 0 #if LV_USE_SDL #define LV_SDL_INCLUDE_PATH <SDL2/SDL.h> #define LV_SDL_PARTIAL_MODE 0 /*Recommended only to emulate a setup with a display controller*/ #endif /*Driver for /dev/fb*/ #define LV_USE_LINUX_FBDEV 0 #if LV_USE_LINUX_FBDEV #define LV_LINUX_FBDEV_BSD 0 #endif /*Interface for TFT_eSPI*/ #define LV_USE_TFT_ESPI 0 /*================== * EXAMPLES *==================*/ /*Enable the examples to be built with the library*/ #define LV_BUILD_EXAMPLES 1 /*=================== * DEMO USAGE ====================*/ /*Show some widget. It might be required to increase `LV_MEM_SIZE` */ #define LV_USE_DEMO_WIDGETS 1 #if LV_USE_DEMO_WIDGETS #define LV_DEMO_WIDGETS_SLIDESHOW 0 #endif /*Demonstrate the usage of encoder and keyboard*/ #define LV_USE_DEMO_KEYPAD_AND_ENCODER 1 /*Benchmark your system*/ #define LV_USE_DEMO_BENCHMARK 0 #if LV_USE_DEMO_BENCHMARK /*Use RGB565A8 images with 16 bit color depth instead of ARGB8565*/ #define LV_DEMO_BENCHMARK_RGB565A8 0 #endif /*Stress test for LVGL*/ #define LV_USE_DEMO_STRESS 0 /*Music player demo*/ #define LV_USE_DEMO_MUSIC 0 #if LV_USE_DEMO_MUSIC #define LV_DEMO_MUSIC_SQUARE 0 #define LV_DEMO_MUSIC_LANDSCAPE 0 #define LV_DEMO_MUSIC_ROUND 0 #define LV_DEMO_MUSIC_LARGE 0 #define LV_DEMO_MUSIC_AUTO_PLAY 0 #endif /*Flex layout demo*/ #define LV_USE_DEMO_FLEX_LAYOUT 0 /*--END OF LV_CONF_H--*/ #endif /*LV_CONF_H*/ #endif /*End of "Content enable"*/
1.1 修改Makefile
先在
disp2
目录下的Makefile把子目录disp2/lv_port_pc_eclipse
包含进来:subdir-ccflags-y += -I$(srctree)/ekernel/drivers/include \ -I$(srctree)/ekernel/core/rt-thread/include \ -I$(srctree)/ekernel/drivers/drv/source/disp2/soc obj-y += disp_layer_cfg.o disp_mem_hwd.o #disp_mem.o obj-y += disp_layer_alpha_test.o obj-y += disp_layer_scal_test.o obj-y += disp_layer_format_test.o obj-y += disp_lbc_test.o obj-y += lv_port_pc_eclipse/
再将
isp2/lv_port_pc_eclipse
目录下的Makefile改为下面内容(节选):obj-y += \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_alpha16.o \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_argb.o \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_chroma_keyed.o \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_indexed16.o \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_rgb.o \ lvgl/demos/benchmark/assets/img_benchmark_cogwheel_rgb565a8.o \ lvgl/demos/benchmark/assets/lv_font_bechmark_montserrat_12_compr_az.c.o \ lvgl/demos/benchmark/assets/lv_font_bechmark_montserrat_16_compr_az.c.o \ lvgl/demos/benchmark/assets/lv_font_bechmark_montserrat_28_compr_az.c.o \ lvgl/demos/benchmark/lv_demo_benchmark.o \ lvgl/demos/keypad_encoder/lv_demo_keypad_encoder.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_corner_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_list_pause.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_list_pause_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_list_play.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_list_play_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_loop.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_loop_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_next.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_next_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_pause.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_pause_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_play.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_play_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_prev.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_prev_large.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_rnd.o \ lvgl/demos/music/assets/img_lv_demo_music_btn_rnd_large.o \ lvgl/demos/music/assets/img_lv_demo_music_corner_left.o \ lvgl/demos/music/assets/img_lv_demo_music_corner_left_large.o \ lvgl/demos/music/assets/img_lv_demo_music_corner_right.o \ lvgl/demos/music/assets/img_lv_demo_music_corner_right_large.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_1.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_1_large.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_2.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_2_large.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_3.o \ lvgl/demos/music/assets/img_lv_demo_music_cover_3_large.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_1.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_1_large.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_2.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_2_large.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_3.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_3_large.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_4.o \ lvgl/demos/music/assets/img_lv_demo_music_icon_4_large.o \ lvgl/demos/music/assets/img_lv_demo_music_list_border.o \ lvgl/demos/music/assets/img_lv_demo_music_list_border_large.o \ lvgl/demos/music/assets/img_lv_demo_music_logo.o \ lvgl/demos/music/assets/img_lv_demo_music_slider_knob.o \ lvgl/demos/music/assets/img_lv_demo_music_slider_knob_large.o \ lvgl/demos/music/assets/img_lv_demo_music_wave_bottom.o \ lvgl/demos/music/assets/img_lv_demo_music_wave_bottom_large.o \ lvgl/demos/music/assets/img_lv_demo_music_wave_top.o \ lvgl/demos/music/assets/img_lv_demo_music_wave_top_large.o \ lvgl/demos/music/lv_demo_music.o \ lvgl/demos/music/lv_demo_music_list.o \ lvgl/demos/music/lv_demo_music_main.o \ lvgl/demos/stress/lv_demo_stress.o \ lvgl/demos/widgets/assets/img_clothes.o \ lvgl/demos/widgets/assets/img_demo_widgets_avatar.o \ lvgl/demos/widgets/assets/img_lvgl_logo.o \ lvgl/demos/widgets/lv_demo_widgets.o \ lvgl/examples/anim/lv_example_anim_1.o \ lvgl/examples/anim/lv_example_anim_2.o \ lvgl/examples/anim/lv_example_anim_3.o \ lvgl/examples/anim/lv_example_anim_timeline_1.o \ lvgl/examples/assets/animimg001.o \ lvgl/examples/assets/animimg002.o \ lvgl/examples/assets/animimg003.o \ lvgl/examples/assets/emoji/img_emoji_F617.o \ lvgl/examples/assets/img_caret_down.o \ lvgl/examples/assets/img_cogwheel_alpha16.o \ lvgl/examples/assets/img_cogwheel_argb.o \ lvgl/examples/assets/img_cogwheel_chroma_keyed.o \ lvgl/examples/assets/img_cogwheel_indexed16.o \ lvgl/examples/assets/img_cogwheel_rgb.o \ lvgl/examples/assets/img_hand.o \ lvgl/examples/assets/img_skew_strip.o \ lvgl/examples/assets/img_star.o \ lvgl/examples/assets/imgbtn_left.o \ lvgl/examples/assets/imgbtn_mid.o \ lvgl/examples/assets/imgbtn_right.o \ lvgl/examples/event/lv_example_event_1.o \ lvgl/examples/event/lv_example_event_2.o \ lvgl/examples/event/lv_example_event_3.o \ lvgl/examples/event/lv_example_event_4.o \ lvgl/examples/get_started/lv_example_get_started_1.o \ lvgl/examples/get_started/lv_example_get_started_2.o \ lvgl/examples/get_started/lv_example_get_started_3.o \ lvgl/examples/layouts/flex/lv_example_flex_1.o \ lvgl/examples/layouts/flex/lv_example_flex_2.o \ lvgl/examples/layouts/flex/lv_example_flex_3.o \ lvgl/examples/layouts/flex/lv_example_flex_4.o \ lvgl/examples/layouts/flex/lv_example_flex_5.o \ lvgl/examples/layouts/flex/lv_example_flex_6.o \ lvgl/examples/layouts/grid/lv_example_grid_1.o \ lvgl/examples/layouts/grid/lv_example_grid_2.o \ lvgl/examples/layouts/grid/lv_example_grid_3.o \ lvgl/examples/layouts/grid/lv_example_grid_4.o \ lvgl/examples/layouts/grid/lv_example_grid_5.o \ lvgl/examples/layouts/grid/lv_example_grid_6.o \ lvgl/examples/libs/bmp/lv_example_bmp_1.o \ lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_1.o \ lvgl/examples/libs/ffmpeg/lv_example_ffmpeg_2.o \ lvgl/examples/libs/freetype/lv_example_freetype_1.o \ lvgl/examples/libs/gif/img_bulb_gif.o \ lvgl/examples/libs/gif/lv_example_gif_1.o \ lvgl/examples/libs/png/img_wink_png.o \ lvgl/examples/libs/png/lv_example_png_1.o \ lvgl/examples/libs/qrcode/lv_example_qrcode_1.o \ lvgl/examples/libs/rlottie/lv_example_rlottie_1.o \ lvgl/examples/libs/rlottie/lv_example_rlottie_2.o \ lvgl/examples/libs/rlottie/lv_example_rlottie_approve.o \ lvgl/examples/libs/sjpg/lv_example_sjpg_1.o \ lvgl/examples/others/fragment/lv_example_fragment_1.o \ lvgl/examples/others/fragment/lv_example_fragment_2.o \ lvgl/examples/others/gridnav/lv_example_gridnav_1.o \ lvgl/examples/others/gridnav/lv_example_gridnav_2.o \ lvgl/examples/others/gridnav/lv_example_gridnav_3.o \ lvgl/examples/others/gridnav/lv_example_gridnav_4.o \ lvgl/examples/others/ime/lv_example_ime_pinyin_1.o \ lvgl/examples/others/ime/lv_example_ime_pinyin_2.o \ lvgl/examples/others/imgfont/lv_example_imgfont_1.o \ lvgl/examples/others/monkey/lv_example_monkey_1.o \ lvgl/examples/others/monkey/lv_example_monkey_2.o \ lvgl/examples/others/monkey/lv_example_monkey_3.o \ lvgl/examples/others/msg/lv_example_msg_1.o \ lvgl/examples/others/msg/lv_example_msg_2.o \ lvgl/examples/others/msg/lv_example_msg_3.o \ lvgl/examples/others/snapshot/lv_example_snapshot_1.o \ lvgl/examples/porting/lv_port_disp_template.o \ lvgl/examples/porting/lv_port_fs_template.o \ lvgl/examples/porting/lv_port_indev_template.o \ lvgl/examples/scroll/lv_example_scroll_1.o \ lvgl/examples/scroll/lv_example_scroll_2.o \ lvgl/examples/scroll/lv_example_scroll_3.o \ lvgl/examples/scroll/lv_example_scroll_4.o \ lvgl/examples/scroll/lv_example_scroll_5.o \ lvgl/examples/scroll/lv_example_scroll_6.o \ lvgl/examples/styles/lv_example_style_1.o \ lvgl/examples/styles/lv_example_style_10.o \ lvgl/examples/styles/lv_example_style_11.o \ lvgl/examples/styles/lv_example_style_12.o \ lvgl/examples/styles/lv_example_style_13.o \ lvgl/examples/styles/lv_example_style_14.o \ lvgl/examples/styles/lv_example_style_15.o \ lvgl/examples/styles/lv_example_style_2.o \ lvgl/examples/styles/lv_example_style_3.o \ lvgl/examples/styles/lv_example_style_4.o \ lvgl/examples/styles/lv_example_style_5.o \ lvgl/examples/styles/lv_example_style_6.o \ lvgl/examples/styles/lv_example_style_7.o \ lvgl/examples/styles/lv_example_style_8.o \ lvgl/examples/styles/lv_example_style_9.o \ lvgl/examples/widgets/animimg/lv_example_animimg_1.o \ lvgl/examples/widgets/arc/lv_example_arc_1.o \ lvgl/examples/widgets/arc/lv_example_arc_2.o \ lvgl/examples/widgets/bar/lv_example_bar_1.o \ lvgl/examples/widgets/bar/lv_example_bar_2.o \ lvgl/examples/widgets/bar/lv_example_bar_3.o \ lvgl/examples/widgets/bar/lv_example_bar_4.o \ lvgl/examples/widgets/bar/lv_example_bar_5.o \ lvgl/examples/widgets/bar/lv_example_bar_6.o \ lvgl/examples/widgets/btn/lv_example_btn_1.o \ lvgl/examples/widgets/btn/lv_example_btn_2.o \ lvgl/examples/widgets/btn/lv_example_btn_3.o \ lvgl/examples/widgets/btnmatrix/lv_example_btnmatrix_1.o \ lvgl/examples/widgets/btnmatrix/lv_example_btnmatrix_2.o \ lvgl/examples/widgets/btnmatrix/lv_example_btnmatrix_3.o \ lvgl/examples/widgets/calendar/lv_example_calendar_1.o \ lvgl/examples/widgets/canvas/lv_example_canvas_1.o \ lvgl/examples/widgets/canvas/lv_example_canvas_2.o \ lvgl/examples/widgets/chart/lv_example_chart_1.o \ lvgl/examples/widgets/chart/lv_example_chart_2.o \ lvgl/examples/widgets/chart/lv_example_chart_3.o \ lvgl/examples/widgets/chart/lv_example_chart_4.o \ lvgl/examples/widgets/chart/lv_example_chart_5.o \ lvgl/examples/widgets/chart/lv_example_chart_6.o \ lvgl/examples/widgets/chart/lv_example_chart_7.o \ lvgl/examples/widgets/chart/lv_example_chart_8.o \ lvgl/examples/widgets/chart/lv_example_chart_9.o \ lvgl/examples/widgets/checkbox/lv_example_checkbox_1.o \ lvgl/examples/widgets/checkbox/lv_example_checkbox_2.o \ lvgl/examples/widgets/colorwheel/lv_example_colorwheel_1.o \ lvgl/examples/widgets/dropdown/lv_example_dropdown_1.o \ lvgl/examples/widgets/dropdown/lv_example_dropdown_2.o \ lvgl/examples/widgets/dropdown/lv_example_dropdown_3.o \ lvgl/examples/widgets/img/lv_example_img_1.o \ lvgl/examples/widgets/img/lv_example_img_2.o \ lvgl/examples/widgets/img/lv_example_img_3.o \ lvgl/examples/widgets/img/lv_example_img_4.o \ lvgl/examples/widgets/imgbtn/lv_example_imgbtn_1.o \ lvgl/examples/widgets/keyboard/lv_example_keyboard_1.o \ lvgl/examples/widgets/label/lv_example_label_1.o \ lvgl/examples/widgets/label/lv_example_label_2.o \ lvgl/examples/widgets/label/lv_example_label_3.o \ lvgl/examples/widgets/label/lv_example_label_4.o \ lvgl/examples/widgets/label/lv_example_label_5.o \ lvgl/examples/widgets/led/lv_example_led_1.o \ lvgl/examples/widgets/line/lv_example_line_1.o \ lvgl/examples/widgets/list/lv_example_list_1.o \ lvgl/examples/widgets/list/lv_example_list_2.o \ lvgl/examples/widgets/menu/lv_example_menu_1.o \ lvgl/examples/widgets/menu/lv_example_menu_2.o \ lvgl/examples/widgets/menu/lv_example_menu_3.o \ lvgl/examples/widgets/menu/lv_example_menu_4.o \ lvgl/examples/widgets/menu/lv_example_menu_5.o \ lvgl/examples/widgets/meter/lv_example_meter_1.o \ lvgl/examples/widgets/meter/lv_example_meter_2.o \ lvgl/examples/widgets/meter/lv_example_meter_3.o \ lvgl/examples/widgets/meter/lv_example_meter_4.o \ lvgl/examples/widgets/msgbox/lv_example_msgbox_1.o \ lvgl/examples/widgets/obj/lv_example_obj_1.o \ lvgl/examples/widgets/obj/lv_example_obj_2.o \ lvgl/examples/widgets/roller/lv_example_roller_1.o \ lvgl/examples/widgets/roller/lv_example_roller_2.o \ lvgl/examples/widgets/roller/lv_example_roller_3.o \ lvgl/examples/widgets/slider/lv_example_slider_1.o \ lvgl/examples/widgets/slider/lv_example_slider_2.o \ lvgl/examples/widgets/slider/lv_example_slider_3.o \ lvgl/examples/widgets/span/lv_example_span_1.o \ lvgl/examples/widgets/spinbox/lv_example_spinbox_1.o \ lvgl/examples/widgets/spinner/lv_example_spinner_1.o \ lvgl/examples/widgets/switch/lv_example_switch_1.o \ lvgl/examples/widgets/table/lv_example_table_1.o \ lvgl/examples/widgets/table/lv_example_table_2.o \ lvgl/examples/widgets/tabview/lv_example_tabview_1.o \ lvgl/examples/widgets/tabview/lv_example_tabview_2.o \ lvgl/examples/widgets/textarea/lv_example_textarea_1.o \ lvgl/examples/widgets/textarea/lv_example_textarea_2.o \ lvgl/examples/widgets/textarea/lv_example_textarea_3.o \ lvgl/examples/widgets/tileview/lv_example_tileview_1.o \ lvgl/examples/widgets/win/lv_example_win_1.o \ lvgl/src/core/lv_disp.o \ lvgl/src/core/lv_event.o \ lvgl/src/core/lv_group.o \ lvgl/src/core/lv_indev.o \ lvgl/src/core/lv_indev_scroll.o \ lvgl/src/core/lv_obj.o \ lvgl/src/core/lv_obj_class.o \ lvgl/src/core/lv_obj_draw.o \ lvgl/src/core/lv_obj_pos.o \ lvgl/src/core/lv_obj_scroll.o \ lvgl/src/core/lv_obj_style.o \ lvgl/src/core/lv_obj_style_gen.o \ lvgl/src/core/lv_obj_tree.o \ lvgl/src/core/lv_refr.o \ lvgl/src/core/lv_theme.o \ lvgl/src/draw/arm2d/lv_gpu_arm2d.o \ lvgl/src/draw/lv_draw.o \ lvgl/src/draw/lv_draw_arc.o \ lvgl/src/draw/lv_draw_img.o \ lvgl/src/draw/lv_draw_label.o \ lvgl/src/draw/lv_draw_layer.o \ lvgl/src/draw/lv_draw_line.o \ lvgl/src/draw/lv_draw_mask.o \ lvgl/src/draw/lv_draw_rect.o \ lvgl/src/draw/lv_draw_transform.o \ lvgl/src/draw/lv_draw_triangle.o \ lvgl/src/draw/lv_img_buf.o \ lvgl/src/draw/lv_img_cache.o \ lvgl/src/draw/lv_img_decoder.o \ lvgl/src/draw/nxp/lv_gpu_nxp.o \ lvgl/src/draw/nxp/pxp/lv_draw_pxp_blend.o \ lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp.o \ lvgl/src/draw/nxp/pxp/lv_gpu_nxp_pxp_osa.o \ lvgl/src/draw/nxp/vglite/lv_draw_vglite_arc.o \ lvgl/src/draw/nxp/vglite/lv_draw_vglite_blend.o \ lvgl/src/draw/nxp/vglite/lv_draw_vglite_rect.o \ lvgl/src/draw/nxp/vglite/lv_gpu_nxp_vglite.o \ lvgl/src/draw/sdl/lv_draw_sdl.o \ lvgl/src/draw/sdl/lv_draw_sdl_arc.o \ lvgl/src/draw/sdl/lv_draw_sdl_bg.o \ lvgl/src/draw/sdl/lv_draw_sdl_composite.o \ lvgl/src/draw/sdl/lv_draw_sdl_img.o \ lvgl/src/draw/sdl/lv_draw_sdl_label.o \ lvgl/src/draw/sdl/lv_draw_sdl_layer.o \ lvgl/src/draw/sdl/lv_draw_sdl_line.o \ lvgl/src/draw/sdl/lv_draw_sdl_mask.o \ lvgl/src/draw/sdl/lv_draw_sdl_polygon.o \ lvgl/src/draw/sdl/lv_draw_sdl_rect.o \ lvgl/src/draw/sdl/lv_draw_sdl_stack_blur.o \ lvgl/src/draw/sdl/lv_draw_sdl_texture_cache.o \ lvgl/src/draw/sdl/lv_draw_sdl_utils.o \ lvgl/src/draw/stm32_dma2d/lv_gpu_stm32_dma2d.o \ lvgl/src/draw/sw/lv_draw_sw.o \ lvgl/src/draw/sw/lv_draw_sw_arc.o \ lvgl/src/draw/sw/lv_draw_sw_blend.o \ lvgl/src/draw/sw/lv_draw_sw_dither.o \ lvgl/src/draw/sw/lv_draw_sw_gradient.o \ lvgl/src/draw/sw/lv_draw_sw_img.o \ lvgl/src/draw/sw/lv_draw_sw_layer.o \ lvgl/src/draw/sw/lv_draw_sw_letter.o \ lvgl/src/draw/sw/lv_draw_sw_line.o \ lvgl/src/draw/sw/lv_draw_sw_polygon.o \ lvgl/src/draw/sw/lv_draw_sw_rect.o \ lvgl/src/draw/sw/lv_draw_sw_transform.o \ lvgl/src/draw/swm341_dma2d/lv_gpu_swm341_dma2d.o \ lvgl/src/extra/layouts/flex/lv_flex.o \ lvgl/src/extra/layouts/grid/lv_grid.o \ lvgl/src/extra/libs/bmp/lv_bmp.o \ lvgl/src/extra/libs/ffmpeg/lv_ffmpeg.o \ lvgl/src/extra/libs/freetype/lv_freetype.o \ lvgl/src/extra/libs/fsdrv/lv_fs_fatfs.o \ lvgl/src/extra/libs/fsdrv/lv_fs_posix.o \ lvgl/src/extra/libs/fsdrv/lv_fs_stdio.o \ lvgl/src/extra/libs/fsdrv/lv_fs_win32.o \ lvgl/src/extra/libs/gif/gifdec.o \ lvgl/src/extra/libs/gif/lv_gif.o \ lvgl/src/extra/libs/png/lodepng.o \ lvgl/src/extra/libs/png/lv_png.o \ lvgl/src/extra/libs/qrcode/lv_qrcode.o \ lvgl/src/extra/libs/qrcode/qrcodegen.o \ lvgl/src/extra/libs/rlottie/lv_rlottie.o \ lvgl/src/extra/libs/sjpg/lv_sjpg.o \ lvgl/src/extra/libs/sjpg/tjpgd.o \ lvgl/src/extra/lv_extra.o \ lvgl/src/extra/others/fragment/lv_fragment.o \ lvgl/src/extra/others/fragment/lv_fragment_manager.o \ lvgl/src/extra/others/gridnav/lv_gridnav.o \ lvgl/src/extra/others/ime/lv_ime_pinyin.o \ lvgl/src/extra/others/imgfont/lv_imgfont.o \ lvgl/src/extra/others/monkey/lv_monkey.o \ lvgl/src/extra/others/msg/lv_msg.o \ lvgl/src/extra/others/snapshot/lv_snapshot.o \ lvgl/src/extra/themes/basic/lv_theme_basic.o \ lvgl/src/extra/themes/default/lv_theme_default.o \ lvgl/src/extra/themes/mono/lv_theme_mono.o \ lvgl/src/extra/widgets/animimg/lv_animimg.o \ lvgl/src/extra/widgets/calendar/lv_calendar.o \ lvgl/src/extra/widgets/calendar/lv_calendar_header_arrow.o \ lvgl/src/extra/widgets/calendar/lv_calendar_header_dropdown.o \ lvgl/src/extra/widgets/chart/lv_chart.o \ lvgl/src/extra/widgets/colorwheel/lv_colorwheel.o \ lvgl/src/extra/widgets/imgbtn/lv_imgbtn.o \ lvgl/src/extra/widgets/keyboard/lv_keyboard.o \ lvgl/src/extra/widgets/led/lv_led.o \ lvgl/src/extra/widgets/list/lv_list.o \ lvgl/src/extra/widgets/menu/lv_menu.o \ lvgl/src/extra/widgets/meter/lv_meter.o \ lvgl/src/extra/widgets/msgbox/lv_msgbox.o \ lvgl/src/extra/widgets/span/lv_span.o \ lvgl/src/extra/widgets/spinbox/lv_spinbox.o \ lvgl/src/extra/widgets/spinner/lv_spinner.o \ lvgl/src/extra/widgets/tabview/lv_tabview.o \ lvgl/src/extra/widgets/tileview/lv_tileview.o \ lvgl/src/extra/widgets/win/lv_win.o \ lvgl/src/font/lv_font.o \ lvgl/src/font/lv_font_dejavu_16_persian_hebrew.o \ lvgl/src/font/lv_font_fmt_txt.o \ lvgl/src/font/lv_font_loader.o \ lvgl/src/font/lv_font_montserrat_10.o \ lvgl/src/font/lv_font_montserrat_12.o \ lvgl/src/font/lv_font_montserrat_12_subpx.o \ lvgl/src/font/lv_font_montserrat_14.o \ lvgl/src/font/lv_font_montserrat_16.o \ lvgl/src/font/lv_font_montserrat_18.o \ lvgl/src/font/lv_font_montserrat_20.o \ lvgl/src/font/lv_font_montserrat_22.o \ lvgl/src/font/lv_font_montserrat_24.o \ lvgl/src/font/lv_font_montserrat_26.o \ lvgl/src/font/lv_font_montserrat_28.o \ lvgl/src/font/lv_font_montserrat_28_compressed.o \ lvgl/src/font/lv_font_montserrat_30.o \ lvgl/src/font/lv_font_montserrat_32.o \ lvgl/src/font/lv_font_montserrat_34.o \ lvgl/src/font/lv_font_montserrat_36.o \ lvgl/src/font/lv_font_montserrat_38.o \ lvgl/src/font/lv_font_montserrat_40.o \ lvgl/src/font/lv_font_montserrat_42.o \ lvgl/src/font/lv_font_montserrat_44.o \ lvgl/src/font/lv_font_montserrat_46.o \ lvgl/src/font/lv_font_montserrat_48.o \ lvgl/src/font/lv_font_montserrat_8.o \ lvgl/src/font/lv_font_simsun_16_cjk.o \ lvgl/src/font/lv_font_unscii_16.o \ lvgl/src/font/lv_font_unscii_8.o \ lvgl/src/hal/lv_hal_disp.o \ lvgl/src/hal/lv_hal_indev.o \ lvgl/src/hal/lv_hal_tick.o \ lvgl/src/misc/lv_anim.o \ lvgl/src/misc/lv_anim_timeline.o \ lvgl/src/misc/lv_area.o \ lvgl/src/misc/lv_async.o \ lvgl/src/misc/lv_bidi.o \ lvgl/src/misc/lv_color.o \ lvgl/src/misc/lv_fs.o \ lvgl/src/misc/lv_gc.o \ lvgl/src/misc/lv_ll.o \ lvgl/src/misc/lv_log.o \ lvgl/src/misc/lv_lru.o \ lvgl/src/misc/lv_math.o \ lvgl/src/misc/lv_mem.o \ lvgl/src/misc/lv_printf.o \ lvgl/src/misc/lv_style.o \ lvgl/src/misc/lv_style_gen.o \ lvgl/src/misc/lv_templ.o \ lvgl/src/misc/lv_timer.o \ lvgl/src/misc/lv_tlsf.o \ lvgl/src/misc/lv_txt.o \ lvgl/src/misc/lv_txt_ap.o \ lvgl/src/misc/lv_utils.o \ lvgl/src/widgets/lv_arc.o \ lvgl/src/widgets/lv_bar.o \ lvgl/src/widgets/lv_btn.o \ lvgl/src/widgets/lv_btnmatrix.o \ lvgl/src/widgets/lv_canvas.o \ lvgl/src/widgets/lv_checkbox.o \ lvgl/src/widgets/lv_dropdown.o \ lvgl/src/widgets/lv_img.o \ lvgl/src/widgets/lv_label.o \ lvgl/src/widgets/lv_line.o \ lvgl/src/widgets/lv_objx_templ.o \ lvgl/src/widgets/lv_roller.o \ lvgl/src/widgets/lv_slider.o \ lvgl/src/widgets/lv_switch.o \ lvgl/src/widgets/lv_table.o \ lvgl/src/widgets/lv_textarea.o \
1.2 快速测试Makefile修改是否有效
把主函数中和硬件相关的显示,输入等初始化代码屏蔽,main改为lv_main
,并把lv_main
变成一个命令:int lv_main(int argc, char **argv) { //(void *)argc; /*Unused*/ //(void)argv; /*Unused*/ printf("lv_main."); #if 0 /*Initialize LVGL*/ lv_init(); /*Create a default group for keyboard navigation*/ lv_group_set_default(lv_group_create()); /*Initialize the HAL (display, input devices, tick) for LVGL*/ hal_init(); ..... #endif return 0; } static lv_disp_t * hal_init(void ) { #if 0 disp_layer_cfg_def(); static lv_disp_draw_buf_t draw_buf; lv_disp_draw_buf_init(&draw_buf, disp_buf1, disp_buf2, HOR_RES * VER_RES); static lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); ...... lv_disp_drv_register(&disp_drv); #endif lv_disp_t * disp = NULL; return disp; } FINSH_FUNCTION_EXPORT_ALIAS(lv_main, lv_main, lv_main );
编译通过,烧录测试。输入help,可以看到lv_main命令,输入lv_main,打印“lv_main”:
msh />help RT-Thread shell commands: ...... lv_main - lv_main ...... msh />lv_main lv_main
2.移植刷新显示内存函数dummy_flush_cb
只要往显存地址mem = g_disp_mm[mem_id].info_base
里面填写像素数据,就可以得到我们要显示的内容,把这个地址传给一个全局变量,在lvgl中使用这个全局变量即可。
于是我们在disp_mem
源码所在的C文件声明一个全局变量:uint32_t * g_p_mem_base;
把显存地址传给g_p_mem_base:
g_p_mem_base = g_disp_mm[mem_id].info_base;
有了这个地址,我们就可以编写自己的显示回调函数:
#define HOR_RES 800 #define VER_RES 480 extern uint32_t * g_p_mem_base; #define line_length 800 * sizeof(rt_uint32_t) / 4 static void dummy_flush_cb(lv_disp_drv_t * disp_drv, const lv_area_t * area, lv_color_t * color_p) { /*Truncate the area to the screen*/ int32_t act_x1 = area->x1 < 0 ? 0 : area->x1; int32_t act_y1 = area->y1 < 0 ? 0 : area->y1; int32_t act_x2 = area->x2 > (int32_t)HOR_RES - 1 ? (int32_t)HOR_RES - 1 : area->x2; int32_t act_y2 = area->y2 > (int32_t)VER_RES - 1 ? (int32_t)VER_RES - 1 : area->y2; lv_coord_t w = (act_x2 - act_x1 + 1); long int location = 0; /* 32 bit per pixel */ uint32_t *fbp32 = (uint32_t *)g_p_mem_base; uint32_t y; for (y = act_y1; y <= act_y2; y++) { location = act_x1 + y * line_length; rt_memcpy(&fbp32[location], (uint32_t *)color_p, (act_x2 - act_x1 + 1) * 4); color_p += w; } lv_disp_flush_ready(disp_drv); } static lv_color_t disp_buf1[HOR_RES * VER_RES]; static lv_color_t disp_buf2[HOR_RES * VER_RES]; int disp_layer_cfg_def(void); static lv_disp_t * hal_init(void ) { #if 1 disp_layer_cfg_def(); static lv_disp_draw_buf_t draw_buf; lv_disp_draw_buf_init(&draw_buf, disp_buf1, disp_buf2, HOR_RES * VER_RES); static lv_disp_drv_t disp_drv; lv_disp_drv_init(&disp_drv); disp_drv.draw_buf = &draw_buf; disp_drv.flush_cb = dummy_flush_cb; disp_drv.hor_res = HOR_RES; disp_drv.ver_res = VER_RES; lv_disp_drv_register(&disp_drv); #endif lv_disp_t * disp = NULL; return disp; }
再make编译,通过。
3.创建一个定时器调用lvgl心跳lv_tick_inc()
Melis使用rt-thread内核,rt-thread的节拍由宏定义 CONFIG_HZ决定:#define RT_TICK_PER_SECOND CONFIG_HZ
CONFIG_HZ通过 命令 make menuconfig 配置:
这里是200Hz,也就是一个时钟节拍为5ms。
static rt_timer_t timer1; // lv_tick_inc(5); static lv_disp_t * hal_init(void ) { #if 1 /* 创建定时器1 周期定时器 */ timer1 = rt_timer_create("timer1", lv_tick_inc, // 回调函数 5, // 回调函数的传入参数 1, // 一个时钟节拍调用一次回调函数,具体是5ms RT_TIMER_FLAG_PERIODIC); /* 启动定时器1 */ if (timer1 != RT_NULL) rt_timer_start(timer1); disp_layer_cfg_def(); ...... #endif lv_disp_t * disp = NULL; return disp; }
lv_timer_handler()调用间隔是10ms,而lv_tick_inc()调用间隔是5ms,这样比较合理。
4.pack打包出错:
root@SK-JNTINRTMRDZW:/home/book/D1s-Melis-master# pack INFO: temporarily Enter pack directory: "/home/book/D1s-Melis-master/out/d1s-mq/image", will be back when terminated INFO: copying config/boot binary/phoenix plugin files /home/book/D1s-Melis-master/tools/phoenixplugin/Tools.fex ...... ...... INFO: running the function do_finish "sys_partition_nor.bin" partitation file Path=/home/book/D1s-Melis-master/out/d1s-mq/image/sys_partition_nor.bin mbr_name file Path=/home/book/D1s-Melis-master/out/d1s-mq/image/sunxi_mbr_nor.fex download_name file Path=/home/book/D1s-Melis-master/out/d1s-mq/image/dlinfo.fex ERROR: dl file melis_pkg_nor.fex size too large ERROR: filename = melis_pkg_nor.fex ERROR: dl_file_size = 2272 sector ERROR: part_size = 2048 sector ERROR: update mbr file fail ERROR: update_mbr failed
melis_pkg_nor.fex
文件比分配的空间要大,装不下。
修改分区文件D1s-Melis/projects/d1s-mq/configs/sys_partition_nor.fex
第44,45行:
;--------------------------------------------------------------------------------------------------------- ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串 ;--------------------------------------------------------------------------------------------------------- ;-------------------------------------------------------------------------------------------------- ; 固件下载参数配置 ;-------------------------------------------------------------------------------------------------- ;**************************************************** ; mbr的大小, 以Kbyte为单位 ;**************************************************** [mbr] size = 16 ;******************************************************************************************************** ; 分区配置 ; ; ; partition 定义范例: ; [partition] ; //表示是一个分区 ; name = USERFS2 ; //分区名称 ; size = 16384 ; //分区大小 单位: 扇区.分区表示个数最多2^31 * 512 = 2T ; downloadfile = "123.fex" ; //下载文件的路径和名称,可以使用相对路径,相对是指相对于image.cfg文件所在分区。也可以使用绝对路径 ; keydata = 1 ; //私有数据分区,重新量产数据将不丢失 ; encrypt = 1 ; //采用加密方式烧录,将提供数据加密,但损失烧录速度 ; user_type = ? ; //私有用法 ; verify = 1 ; //要求量产完成后校验是否正确 ; ; 注:1、name唯一, 不允许同名 ; 2、name最大12个字符 ; 3、size = 0, 将创建一个无大小的空分区 ; 4、为了安全和效率考虑,分区大小最好保证为16M字节的整数倍 ;******************************************************************************************************** [partition_start] ;[partition] ; name = boot ; size = 6656 ; downloadfile = "boot.fex" ; user_type = 0x8000 [partition] name = bootA ;size = 2048 size = 4096 downloadfile = "melis_pkg_nor.fex" user_type = 0x8000 ;[partition] ; name = bootB ; size = 6144 ; downloadfile = "melis_pkg_nor.fex" ; user_type = 0x8000 ;[partition] ; name = env ; size = 8 ; downloadfile = "env.fex" ; user_type = 0x8000 ;[partition] ; name = env-redund ; size = 8 ; downloadfile = "env.fex" ; user_type = 0x8000 ;rootfs 7616 sector in rootfs.ini make 7616*1024/512=15232 sectors for it. [partition] name = ROOTFS size = 10240 ;size = 20336 downloadfile = "data_udisk.fex" user_type = 0x8000 [partition] name = UDISK ;size = flash size - (boot0 + mbr) size - env - env-redund - ROOTFS ;8(or 16) * 1024 * 2 - 64 * 2 - 5632 - 8 - 8 - 10240 ;size = 20336 ;downloadfile = "data_udisk.fex" user_type = 0x8000
再次pack打包成功。烧录运行,输入lv_main命令:
msh />lv_main
5.设置开机启动
修改startup.sh
(位于目录 D1s-Melis/projects/d1s-mq/data/UDISK/startup.sh):echo "Execute startup script begin.............." #insmod d:\mod\display.mod #insmod d:\mod\orange.mod #insmod d:\apps\desktop.mod lv_main echo "...............Execute startup script end"
6.源码下载
源码没有startup.sh 和 melis_pkg_nor.fex ,这两个文件的修改比较简单。
源码链接:https://gitee.com/huangweide001/linux-d1-h-test/tree/master/disp2
源码包含了可以直接烧录的img文件 melis_d1s-mq_uart0_8Mnor_lvgl.img 。————————————————
本文为CSDN博主「hwd00001」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hwd00001/article/details/130017849 -
@bigfly 厉害,终于看到开整lvgl+melis~~ 另外,这个melis触摸可以如何入坑。有了触摸好玩点~~
Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号