硬汉嵌入式论坛

 找回密码
 立即注册
查看: 745|回复: 8
收起左侧

[emWin] I2C接口的单色液晶屏幕,想上emwin,可以吗?

[复制链接]

41

主题

215

回帖

338

积分

高级会员

积分
338
发表于 2023-6-15 21:18:13 | 显示全部楼层 |阅读模式
单片机f103资源: RAM总共48K,目前还剩下20KB没用, flash是256KB。
实现的功能:简单文本显示,然后有外部物理按键,有弹窗。有校准界面,需要输入浮点数。
请问下,资源够吗?



我编译了以前版主给的单色LED的例子,
第一期:在OLED上面移植STemWin5.20 - uCOS & uCGUI & emWin & embOS & TouchGFX & ThreadX - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)
编译结果:
Total RO  Size (Code + RO Data)                99136 (  96.81kB)    Total RW  Size (RW Data + ZI Data)            126168 ( 123.21kB)    Total ROM Size (Code + RO Data + RW Data)      99312 (  96.98kB)
下面这个函数申请了123KB的RAM,为啥?
/* Define the available number of bytes available for the GUI */#define GUI_NUMBYTES  1024*110/* Define the average block size */#define GUI_BLOCKSIZE 0x80/***********************************************************************       GUI_X_Config** Purpose:*   Called during the initialization process in order to set up the*   available memory for the GUI.***********************************************************************/void GUI_X_Config(void) {        /* 32 bit aligned memory area */        static U32 aMemory[GUI_NUMBYTES / 4];                /*  Assign memory to emWin */        GUI_ALLOC_AssignMemory(aMemory, GUI_NUMBYTES);//        GUI_ALLOC_SetAvBlockSize(GUI_BLOCKSIZE);}

回复

使用道具 举报

25

主题

287

回帖

367

积分

高级会员

积分
367
发表于 2023-6-16 08:46:06 | 显示全部楼层
单色的GUI建议用这个
https://gitee.com/Polarix/simplegui
回复

使用道具 举报

1

主题

60

回帖

63

积分

初级会员

积分
63
发表于 2023-6-16 10:16:33 | 显示全部楼层
记号下,这个gui有人用过的吗?
回复

使用道具 举报

1万

主题

6万

回帖

10万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
106913
QQ
发表于 2023-6-16 10:21:27 | 显示全部楼层
48KB RAM这个空间超大,足够emWin单色屏使用,像RA8875那种800*480分辨率显示屏都没问题。

楼主位的那个例子,用的F4,RAM空间有128KB,所以分配的比较豪。emWin占用资源还是比较小的,单色屏这这种,分配个5-10K即可。


下载.png
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-6-16 18:39:48 | 显示全部楼层
谢谢楼上回复,我也在考虑是simpleGUI,还是emwin。偏向emwin,主要是可以用emwin的图形界面软件,直接拖拽比较方便
回复

使用道具 举报

7

主题

108

回帖

129

积分

初级会员

积分
129
发表于 2023-6-18 14:22:16 | 显示全部楼层
U8G2
回复

使用道具 举报

3

主题

337

回帖

346

积分

高级会员

积分
346
发表于 2023-6-19 09:16:51 | 显示全部楼层
本帖最后由 glory 于 2023-6-19 11:09 编辑

emwin生态更好,文档全资料多,字体、图片工具完善,拥有完善的2D图形绘制函数:抗锯齿,缩放,旋转,各种图形如椭圆、多边形等绘制和填充。
其它小GUI之所以代码少,这些东西都有意无意的省掉了。
回复

使用道具 举报

41

主题

215

回帖

338

积分

高级会员

积分
338
 楼主| 发表于 2023-6-19 21:08:52 | 显示全部楼层
  • 硬件环境,f103,I2C接口,单色液晶(即不是高端的RGB接口),使用的是实体按键(无触摸屏幕)
  • 底层驱动优化问题,硬汉给的答案
为了避免OLED闪烁问题,创建一个128*64bit的显存空间,然后使用emWin的GUI_TIMER_Create创建个100ms的定时器,
     定时器整体刷新OLED即可,平时emWin都是直接对显存的操作,不往OLED里面刷数据。

基于V7的emWin多屏显示方案模板,同时驱动LCD和OLED例程 - STM32H7 - 硬汉嵌入式论坛 - Powered by Discuz! (armbbs.cn)

我的理解是,在操作系统中,是固定时间,例如100mS,最低优先级,单独一个线程,去刷新整个液晶。进一步优化:另外再加一个信号量,有消息就刷单。

问题A:向这个单独的128*64bit的显存空间写数据,正好切任务,会不会有问题。没问题,因为刷新是最低优先级
问题B:平时的画点都是在数组s_ucGRAM[],然后每隔100mS,调用下面两个函数。
如果再优化一点,我看凤舞九天的,再搞一个缓冲,这个缓冲和屏幕上一模一样,把两个缓冲对比,不一样的才打点刷到屏幕上,刷完了,把两个缓存拷贝一致。


void OLED_StartDraw(void)
{
        s_ucUpdateEn = 0;
}


void OLED_EndDraw(void)
{
        s_ucUpdateEn = 1;
        OLED_BufToPanel();
}


总结1:所以给emwin的底层硬件驱动接口,实际上是在mcu内部的数组s_ucGRAM[]里面,不是直接画到液晶上的。
总结2:实体按键怎么结合emwin还没有看。RTOS和emwin结合没有看。


回复

使用道具 举报

335

主题

2037

回帖

3047

积分

版主

Rank: 7Rank: 7Rank: 7

积分
3047
发表于 2023-6-26 15:26:47 | 显示全部楼层
如果界面这么简单,不用gui都可以了。 emwin也可以使用简单模式,不开启控件和窗口。只用gui_xxx函数里面的2D绘图写字类即可。
回复

使用道具 举报

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

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2024-5-9 19:02 , Processed in 0.279166 second(s), 28 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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