2026.7.21 经验分享会
2026年7月21日下午,上海实邦电子科技有限公司开展了一次经验交流会,由陈工和崔工一起分享了他们在工作中积累的一些经验。
首先是崔工分享了----KiCad 原理图生成平台分享
先说结论:它负责加速,不负责签字

完整流程只有一个原则-----先确认,再进入下一步
陈工分享了----嘉立创在线&SGL图形库
立创eda多人协同
多人协同可以多人一起画PCB,依赖于在线版本
1. 切换为在线版本并登录
2. 创建团队
3. 创建工程

4. 添加成员

5.调整成员权限-设置为开发者

6. 结束-打开工程开发
任何一方修改以后必须手动保存来同步,软件不会实时同步。
任何一方选中以后会高亮提示,另一方不要去同步操作。
SGL图形库介绍
SGL(Small Graphics Library)是一个非常轻量的GUI图形库,其设计的初衷就是针对低端处理器市场提供一个现代化的图形框架,它符合现代化审美设计,其设计思想来源于LVGL图形库,具有抗锯齿,圆角,边框等关键UI设置项,同时具有图层概念,不同控件有不同的层次,可设置透明度,控件同样有父子关系,子控件可继承部分父控件属性。代码采用面向对象的思想,文件结构清晰,非常适合应用于性能以及内存有限的单片机,控件有:圆角矩形、标签、开关、进度条、圆环、列表等。
SGL UI库特点:
• 轻量级,最小只需要 3KBytes RAM 和 15KBytes ROM 即可运行
• 部分帧缓冲支持,最小只需要一行屏幕分辨率的缓冲即可
• 包围盒 + 贪心算法的脏矩形算法
• 支持帧缓冲控制器,直接向帧缓冲控制器写入数据,零拷贝
• 颜色深度支持: 8bit, 16bit, 24bit, 32bit
• 现代化的字体取模工具
脏矩阵简介:
脏矩形是增量局部渲染优化算法,几乎所有 UI 库(包括LVGL、MiniGUI)的底层渲染核心。核心逻辑:界面大部分区域静止不动,只重绘发生视觉变化的小块区域,放弃全屏刷新
脏矩形合并策略:脏矩阵数量通常是有限的,一帧内会产生大量零散小矩形(比如多个控件发生变化),如果有限的矩阵被消耗殆尽会合并矩阵,形成一个大矩阵。
SGL图形库对比LVGL区别是什么?
目前LVGL图形库是好用,但是对单片机要求特别高,如果使用无UI框架的方式,性能以及内存占用确实小,但做出来的效果又特别差劲,做出来的产品够用,但缺乏竞争力。110k
(1)flash占用大:LVGL可以对功能进行裁剪,但由于其设计框架的原因,裁剪过后的代码对内存占用也十分大,SGL是高度可裁剪,裁剪过后的功能,一定不会被编译(直接或间接)。
(2)ram占用大:对于LVGL来说,每个控件对RAM的占用都是很大的,LVGL是为了功能的丰富,但SGL的定位是为了更加轻量级,因此,对于RAM的使用,作者严格地控制每一个字节的占用,尽可能保证功能的前提下做到最小占用。20k 48k
(3)代码框架差:当不使用任何框架时,散装的代码,某宝卖家配套的代码,CSDN下载的测试代码,这类代码不考虑程序可读性,可维护性,功能可扩展性,用这种代码测试是可以,用于实际项目开发是灾难性的。SGL是完全没有这些问题的,源代码文件目录分类清晰,函数API风格统一,同样有配置文件,初始化简单,配套资料文档齐全。
项目移植
这里以电脑PC模拟器为准,实际硬件移植方法一样。
模拟器有移植好的工程,不用重新移植
环境安装这里不展开讲,参考LVGL的即可
pc端使用vs code模拟需要安装3个环境:cmake,Mingw64,SDL2,其过程和LVGL运行一模一样,可参考LVGL的移植
1. 下载源码&解压放到合适位置
虽然只用的到source文件夹下的内容,但为了省心方便,不要删除任何文件
(1). Source文件夹介绍
2. 添加库文件
Source文件夹按需添加,include只需要包含根目录和include文件夹。
必须添加的有:核心内核、绘制内核、内存管理算法、字体(字体也可以不用它的自己取),控件(可以按需添加)
3. 配置文件介绍
4. 初始化
注册帧缓冲区设备,屏幕buffer,刷屏函数实现
注册日志接口
注册心跳接口
调用sgl初始化
5. main函数中调用
调用封装过的sgl初始化(内部包含了所有需要的初始化)
调用sgl任务处理函数
6. 移植完成测试效果
编写测试代码:创建一个扩展类型图片和标签控件
SGL的控件所有可设置的效果(颜色,大小,边框,字体等)全部都在各自控件的.h文件之中,与LVGL区别比较大,作者这么做是为了减少内存占用,减小复杂度。LVGL设置全部是走的set_style相关函数,通常散落在控件本身的.h和风格相关的.h中,使用相对比较麻烦。SGL只需要打出前缀,所有可设置的API都会展示出来。
对于简单的项目,常用控件:button、switch、img、label、bar、progress、slider、dropdown。
上位机的技术栈:
个人比较推荐使用前端那一套来开发的,python,QT,JAVA都不太适合跨平台以及快速开发,推荐使用web相关的技术栈。去年我推荐了使用html中内置JavaScript,这种方式优点是快,代码体积小,但缺陷是会暴露源码,还会有效率问题,其实只要打包成exe就行了,通常web开发打包exe有很多方法,通常用electron或者tauri。前者功能非常强大,体积也会非常大,通常在200M以上,后者是轻量级的架构,通常在10M左右,我们只是做一个工具,没必要用太强大的框架。
LVGL字体和SGL字体对比
1.LVGL字体源文件会有很多额外的参数,SGL只保留必须要的参数。
2.取模工具支持图标的可视化选中
LVGL取模工具是没有这个功能的。
3.字体支持压缩
LVGL也支持压缩,但通常压缩效果不是很好(压缩率,解压速度方面),基本没人用压缩。
压缩和字体大小,字符总数量有关,越大,越多,获益越大,如此处只获益2K字节。
字体渲染的原理是什么
MCU的内存通常是有限的,不可能去使用矢量字体,一般都是使用点阵字体,在现代化GUI中,最关键的需求就是:抗锯齿、解码速度快、ROM占用小。
渲染一个字体,最根本的构成如下:
字模位图信息:包含所有取模的二进制字模
字形描述表:描述每一个文字宽度、高度、x轴偏移、y轴偏移、在位图中的位置
码点范围:用于字库查询
字体信息总描述对象:基本的一些信息
SGL魔改后的只包含最根本的信息,同时减少了很多嵌套,嵌套会导致解码的速度下降的很厉害。
抗锯齿是如何实现的?取模的时候会有1bit 2bit 4bit各种抗锯齿级别,越大效果越好,这个bit数就是每个像素点的深度信息,比如1bit,只有亮和暗两种状态,升级到2bit 4bit有更多的中间状态,这个深度信息就是前景色和背景色的一个混色比例。例如4bit抗锯齿,背景是白色,字体是黑色,深度信息为0x07,差不多一半,那么就是灰色,这就是过渡色,更加平滑的过渡,使观感更加好一点。
如下图:

字体绘制总共简化分为4步(可以单击查看底层算法,简约高效):
utf-8转unicode
unicode码点查询
字符绘制
索引下一个字符
SGL是目前除了LVGL以外,做的占用最小的一个UI库,比不上LVGL的功能强大,但对于轻量级场景,LVGL绝对比不过,本次只是简单介绍了脏矩阵,字体以及图片相关的设计哲学,作者还有很多设计巧妙的地方,有兴趣的自己可以阅读源码,实际使用感受一下。
- 上一篇:没有啦
- 下一篇:2026.6.26 经验分享会 2026/6/29
