OpenEdv-开源电子网

 找回密码
 立即注册
查看: 2950|回复: 0

基于littlevgl的多窗口程序实现工装下载

[复制链接]

221

主题

221

帖子

0

精华

高级会员

Rank: 4

积分
762
金钱
762
注册时间
2021-5-18
在线时间
28 小时
发表于 2021-11-15 13:45:10 | 显示全部楼层 |阅读模式
实现思路
1、我在工位发现了一个开发板,GD的一个单片机开发板GD32F450Z-EVAL 2016-10 V1.1,MCU是GD32F450ZKT6。带触摸屏,带SDRAM。性能强悍,资源丰富。
2、首先肯定要是有图形界面的,因为开发板上按键也不多,如果用命令行,那还不如杀了我和其他同事。然后,要使用SD卡,因为要支持所有产品,那么需要保存所有的boot程序,如果后期有新产品,增加boot程序,不希望更改我的程序,而是直接从SD卡读取配置文件和boot程序,实现灵活的调整。最后,已经使用大容量的SD卡,而且文件内容挺多的,我就不想自己管理数据了,就再加一个文件系统吧。
3、综上,使用了图形界面和用户交互,文件系统管理众多的数据。经过筛选,图形界面选择Littlvgl,文件系统使用Fatfs。Littlevgl从没接触过,但是我看到正点原子有littevgl的教程,我也用的控件也不多,所以应该不是很难。Fatfs正点原子也有教程,我之前学过且看过实现代码,所以这个也不难。ok,问题解决。开干。
4、使用流程,按照四个界面流转。
1.png
(1)第一个界面,提示支持的功能。

从母卡读取数据。这个功能是为了从已有的产品获取数据,省去用电脑下载数据的操作。母卡也是正常产品,只是因为从他这读取数据,他就叫母卡,不能白用人家不是!!
给产品写数据。从母卡读回来的数据写入新的产品,这个产品可能刚做回来,没有程序。也可能数据有损坏,无法正常使用了。
只给产品的flash写数据。有时只需要下载flash内容,满足这个需求。
只给产品的MCU下载boot程序。满足只下载boot的需求。
(2)选择配置文件。从SD卡的配置文件目录读取文件,显示在该界面。
(3)确认是否选择该配置文件。因为可能误触摸,所以要有一个确认界面,如果确认,就开始下载程序。如果点否,返回第二个界面,重新选择配置文件。
(4)等待界面。下载程序时,干看着也不行,要让用户有事干,知道当前下载进度,此界面显示当前下载进度。当下载结束后,返回第一个界面,开始新的循环。

目前效果
以上功能都实现了,但是速率很不理想,需要继续优化。

程序实现
首先说界面实现吧
全程使用label控件,原因是,大小,位置,显示内容,子对象,回调函数,我需要的他都有,没必要使用更高级的控件了。
void win_1_start(void)
{
        lv_obj_t *src;
       
        lv_obj_t  *label_title;                //title label的对象指针
        lv_obj_t  *label_Master;        //from Master label的对象指针
        lv_obj_t  *label_Target;        //to Target label的对象指针
        lv_obj_t  *label_Mcu;                //to Mcu boot label的对象指针
        lv_obj_t  *label_Flash;                //to Flash label的对象指针
        msg_attr_t  msg_attr;
       
       
        pcfg_opt.is_running = 0;
        pcfg_opt.program_bytes = 0;
        pcfg_opt.process_percent = 0;
        pcfg_opt.opt = NO_OPT;
        memset(pcfg_opt.pcfg_file_name, 0, _MAX_LFN);        //工装操作信息的初始值设置为0
        memset(pcfg_opt.pcfg_boot_name, 0, _MAX_LFN);        //boot.bin文件名
       
       
        src = lv_scr_act();
        desktop_1 = lv_obj_create(src, src);
       
       
        msg_attr.P_parent = desktop_1;
        msg_attr.P_obj = label_title;
        msg_attr.width = 320;
        msg_attr.y_mod = 0;
        msg_attr.msg_str = "Card:\0";
        msg_attr.callback_func = label_1_event_handler;
        win_1_box_show(&msg_attr);        //显示title label

        msg_attr.P_obj = label_Master;
        msg_attr.width = 200;
        msg_attr.y_mod = 100;
        msg_attr.msg_str = "from Mater\0";
        msg_attr.opt_msg = FROM_MASTER_OPT;
        msg_attr.callback_func = label_Master_event_handler;
        win_1_box_show(&msg_attr);        //显示from Master label
       
        msg_attr.P_obj = label_Target;
        msg_attr.width = 200;
        msg_attr.y_mod = 150;
        msg_attr.msg_str = "to Target\0";
        msg_attr.opt_msg = TO_TARGET_OPT;
        msg_attr.callback_func = label_Master_event_handler;
        win_1_box_show(&msg_attr);        //显示to Mcu boot label
每个label显示时调用的win_1_bos_show是自己写的函数,因为显示显示属性相似,不想重复粘贴,而且那么写也不好看所以做成了函数。
原文链接:http://bj.dyrs.com.cn/story/202111/1166001

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-6-9 04:07

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表