1463|2

195

帖子

2

资源

一粒金砂(高级)

【平头哥RVB2601创意应用开发】 第七篇 使用lvgl并解决SRAM内存不足的问题 [复制链接]

一、使用lvgl的步骤

RVB2601开发板上已经移植好了LVGL,可以直接使用,使用步骤如下:

  1. 加入OLED的驱动,可以从"ch2601_gui_demo"中,拷贝出OLED的驱动。如果是复制"ch2601_helloworld"中OLED驱动的话,还需要加入lvgl的注册函数。可以通过比较这两个项目里的oled.c的"oled_init()"函数看出区别。
  2. 引入头文件"lvgl.h"
  3. 调用函数"lv_init()",对lvgl进行初始化
  4. 在周期函数中加入以下两个函数"lv_task_handler()"和"lv_tick_inc()"
int main(void)
{
    board_yoc_init();
    lv_init();
    oled_init();    
    show_page_init();   
    while(1){
        lv_task_handler();      
        aos_msleep(100);
        lv_tick_inc(100);       
    }
}

二、SRAM内存不足的问题

但是在"webplayer_demo"中使用lvgl时,会出现以下错误:

2022-05-03-17-01-09.png

显示SRAM溢出了,因此需要精简一下变量的使用。在"lvgl_conf.h"中,有如下代码:

/* Size of the memory used by `lv_mem_alloc` in bytes (>= 2kB)*/
#  define LV_MEM_SIZE    (32U * 1024U)

可以看出,默认分配了32KB的空间给LVGL,用于动态内存申请。这块空间给的太大了,因此可以将其改小一些,比如改成4KB。这样就不报错了。

三、代码示例

下面是我的初始化页面,全部使用的label控件,使用前记得引入"lvgl.h"和"lv_label.h"头文件:

lv_obj_t * label_temp;
lv_obj_t * label_humity;
lv_obj_t * label_speed;

void show_page_init()
{
	lv_obj_t * label1 = lv_label_create(lv_scr_act(),NULL);
	lv_label_set_long_mode(label1, LV_LABEL_LONG_BREAK);     /*显示模式固定*/ 
	lv_label_set_align(label1, LV_LABEL_ALIGN_CENTER);       /*居中显示*/
    lv_label_set_text(label1,"Smart Fan");            /*显示标签的内容*/
    lv_obj_set_width(label1, 128);                          /*设置显示的宽度*/
    lv_obj_align(label1, NULL, LV_ALIGN_IN_TOP_MID, 0, 0);  /*靠项端居中显示*/
	
	label_temp = lv_label_create(lv_scr_act(),NULL);
	lv_label_set_long_mode(label_temp, LV_LABEL_LONG_BREAK);     /*显示模式固定*/ 
	lv_label_set_align(label_temp, LV_LABEL_ALIGN_LEFT);       /*居中显示*/
	sprintf(temp,"TEMP\t: -- C");
    lv_label_set_text(label_temp,temp);            /*显示标签的内容*/
    lv_obj_set_width(label_temp, 128);                          /*设置显示的宽度*/
    lv_obj_align(label_temp, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 16);  /*靠项端居中显示*/
	
	label_humity = lv_label_create(lv_scr_act(),NULL);
	lv_label_set_long_mode(label_humity, LV_LABEL_LONG_BREAK);     /*显示模式固定*/ 
	lv_label_set_align(label_humity, LV_LABEL_ALIGN_LEFT);       /*居中显示*/
	sprintf(humity,"RH\t: -- %%");
    lv_label_set_text(label_humity,humity);            /*显示标签的内容*/
    lv_obj_set_width(label_humity, 128);                          /*设置显示的宽度*/
    lv_obj_align(label_humity, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 32);  /*靠项端居中显示*/
	
	label_speed = lv_label_create(lv_scr_act(),NULL);
	lv_label_set_long_mode(label_speed, LV_LABEL_LONG_BREAK);     /*显示模式固定*/ 
	lv_label_set_align(label_speed, LV_LABEL_ALIGN_LEFT);       /*居中显示*/
	sprintf(fan_speed,"Speed\t: 0");
    lv_label_set_text(label_speed,fan_speed);            /*显示标签的内容*/
    lv_obj_set_width(label_speed, 128);                          /*设置显示的宽度*/
    lv_obj_align(label_speed, NULL, LV_ALIGN_IN_TOP_LEFT, 0, 48);  /*靠项端居中显示*/
	
}

效果如下:

2022-05-04-15-25-10.png


回复

2149

帖子

3

资源

版主

可以解决内存不足的问题就好,我前面就是因为这个放弃了LVGL。

回复

12

帖子

0

资源

一粒金砂(中级)

很好,讲的不错。很好,讲的不错。很好,讲的不错。很好,讲的不错。很好,讲的不错。很好,讲的不错。


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

相关帖子
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
    推荐帖子
    请问ep1c3t100的原理图库怎么找

    请问ep1c3t100的原理图库怎么找

    ST FOC2.0中RevPark_Circle_Limitation中关于circle_limit_table的制作求大神指导

    首先,从电流环出来的Ud,Uq可能会使得电压矢量过调制,为防止这种情况发生,ST给出了具有物理意义很明确的计算方法,就是把 ...

    嵌入式软件工程师(联想/联通投资企业、华为生态合作伙伴)

    企业直聘(坐标:北京;有意者请联系或发简历至87441443@qq.com)岗位职责:1. 负责公司智能硬件的嵌入式系统的开发、调试和验证 ...

    一张纸就可以让5G毫米波信号“翻车”?

    最近5G毫米波的信号覆盖能力差,引起了行业的争议。一片树叶、一张纸、甚至是一滴水的遮挡,就可以让毫米波5G信号彻底“翻 ...

    【补充名单】涂鸦智能三明治Wi-Fi&BLE SoC NANO主控板

    活动详情:>>点此查看 由于之前公布的入选名额中有网友弃权,故补录一名,入选者为: @LoveStu 恭喜!请 ...

    关于低电压检测的问题,请教一下。

    请教一下, lvd_che_low2dot3V这个函数是用于 检测 锂电池电压(初始时3V), 当设备中用于控制电机开关阀时,检测 电压低于2.3V ...

    关闭
    站长推荐上一条 1/9 下一条

    About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

    站点相关: 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

    北京市海淀区知春路23号集成电路设计园量子银座1305 电话:(010)82350740 邮编:100191

    电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2022 EEWORLD.com.cn, Inc. All rights reserved
    快速回复 返回顶部 返回列表