使用EEZ Studio移植lvgl项目到stm32-移植ui到codeblock(一)

EEZ Studio是同squareline类似的,可以进行lvgl图形界面编辑器,目前的0.16.0版本支持lvgl9.0及以上版本,且目前还在更新。

详情见官网,笔者不在这里详细介绍EEZ Studio

在外网这方面的资料非常少,大部分都是移植到arduino或者ESP32上,并且教程较少,所以只能自行摸索。

EEZ中有“flow”功能,就笔者这两天学习,大概就是和squareline中类似进行行为设置的选项。

里面有很多actions,可以不通过代码编辑即可实现变量值判断,比较,以及换页操作。

具体界面介绍可以看b站这位up的介绍EEZ Studio教程基于LVGL9.0

不过actions笔者也没太搞明白,后续继续了解会出这部分教程

——————————————————————————————————

好了,那么不废话了,这一期会将先编写的程序一直到codeblock模拟器上。

codeblock移植EEZ

在完成你的lvgl的界面设计后,使用bulid将工程编译保存在ui文件夹中

(有点坑的是如果你把EEZ Studio界面拖到副屏上,这个设置按钮可能会消失,wwww)

以下是正常的工具栏界面

文件夹路径可以在Settings -> Bulid中设置

移植部分只需要src路径下的ui文件夹即可

如何在codeblock添加文件在此不作介绍。

笔者在这里出现了两类错误,一个精度丢失,另外一个也许是gcc编辑器的版本不同导致的错误。

错误解决办法

(官方文件是这样写的)

更换编辑器版本感觉费时费力,因此这里将宏定义直接更改

将对应内容填写进去,因为是字符串拼接,不会有影响(大概= =||),不过笔者在后面通过编译后和预期内容相符

这个丢失精度的错误ui\eez-flow.cpp|5427|error: cast from 'void*' to 'uint32_t' {aka 'unsigned int'} loses precision [-fpermissive]|

可以使用uintptr_t 避免精度丢失。

最终效果

运行正常。

补充(调用)

忘记说如何在c中调用ui文件了

codeblock程序是基于正点原子的,其他教程的代码也类似

调用很简单,将初始化和tick函数添加进去即可


/**
 * @file main
 *
 */

/*********************
 *      INCLUDES
 *********************/
#include <stdlib.h>
#include <unistd.h>

#include "lvgl/lvgl.h"
#include "lv_demos/src/lv_demo_widgets/lv_demo_widgets.h"
#include "lv_drivers/win32drv/win32drv.h"
#include "lv_demos/src/lv_demo_base/lv_demo_base.h"

#include <windows.h>
#include "my_gui.h"

/*********************
 *      DEFINES
 *********************/

/**********************
 *      TYPEDEFS
 **********************/

/**********************
 *  STATIC PROTOTYPES
 **********************/
static void hal_init(void);
static int tick_thread(void *data);

/**********************
 *  STATIC VARIABLES
 **********************/

/**********************
 *      MACROS
 **********************/

/**********************
 *   GLOBAL FUNCTIONS
 **********************/
int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLine, int nCmdShow)
{
    /*Initialize LittlevGL*/
    lv_init();

    /*Initialize the HAL for LittlevGL*/
    lv_win32_init(hInstance, SW_SHOWNORMAL, 800, 480, NULL);

    /*Output prompt information to the console, you can also use printf() to print directly*/
    LV_LOG_USER("LVGL initialization completed!");
    ui_init();
    /*Run the demo*/
   //lv_demo_widgets();
    lv_mainstart();
    while(!lv_win32_quit_signal) {
        /* Periodically call the lv_task handler.
         * It could be done in a timer interrupt or an OS task too.*/
         ui_tick();
        lv_task_handler();
        usleep(10000);       /*Just to let the system breath*/
    }
    return 0;
}

如果这对您有帮助,那请点个赞再走吧!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值