Navigation

    全志在线开发者论坛

    • Register
    • Login
    • Search
    • Categories
    • Tags
    • 在线文档
    • 社区主页

    mango-MQ-R基于Melis移植lvgl

    MR Series
    2
    2
    1811
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • B
      bigfly LV 5 last edited by q1215200171

      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:
      215a6283b1c54e7dba2ac8c5047e3020.png

      为了简单起见,很多非必要的组件我都没有包含进来,详情见 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;
      

      66d07899ccb64e378c1f03b5efecaa02.png

      有了这个地址,我们就可以编写自己的显示回调函数:

      00a3008912034438b7cd5bfb5298e43a.png

      #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 配置:
      20e381ae48f042bba968cbaea018f188.png

      这里是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行:
      7ee7954291004b149ebf5be03d803c39.png

      ;---------------------------------------------------------------------------------------------------------
      ; 说明: 脚本中的字符串区分大小写,用户可以修改"="后面的数值,但是不要修改前面的字符串
      ;---------------------------------------------------------------------------------------------------------
      
      
      ;--------------------------------------------------------------------------------------------------
      ;                                   固件下载参数配置
      ;--------------------------------------------------------------------------------------------------
      ;****************************************************
      ;    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
      

      4422f994a95841b9bfb83aebccf15a71.gif

      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

      S 1 Reply Last reply Reply Quote Share 0
      • S
        soso90 LV 7 @bigfly last edited by

        @bigfly 厉害,终于看到开整lvgl+melis~~ 另外,这个melis触摸可以如何入坑。有了触摸好玩点~~

        1 Reply Last reply Reply Quote Share 0
        • 1 / 1
        • First post
          Last post

        Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

        行为准则 | 用户协议 | 隐私权政策