编程|如何进行有效的嵌入式GUI开发?
文章图片
在所有行业中大规模采用物联网技术的结果是对嵌入式开发技能的需求日益增加 。 然而 , 嵌入式开发在历史上一直是一个相当复杂的领域 , 人们不可能在一夜之间将其添加到技能中 。
幸运的是 , 在过去的十年中 , 硅供应商在简化嵌入式开发方面投入了大量的精力 , 特别是对于在该领域经验很少甚至没有经验的人 。 但根据我的经验 , 至少有一个领域的工作仍然过于繁琐:图形用户界面(GUI)开发 。 许多应用程序至少需要某种图形用户界面:显示器可能很小 , 单色 , 几乎没有任何按钮供用户按下 , 但它仍然是一个用户界面 , 是吗?
在本文中 , 我也将分享一些技巧和一些我用来帮助保持GUI开发愉快的工具 。
硬件集成和可移植性
大多数显示设备都带有示例代码和驱动程序 , 这些代码和驱动程序将使您至少能够显示某些内容 。 但是GUI不仅仅是一个屏幕 , 因为界面也是由输入组成的 , 对吗?那些按钮、触摸屏输入和系统中可能参与交互的其他传感器如何?
这看起来可能不多 , 但在受约束的系统上运行时 , 正确处理简单的硬件输入(如按下的按钮)可能需要大量工作 , 并且您可能很快就不得不处理复杂的定时或中断管理问题 。 由于这些通常涉及低级编程 , 它们往往非常依赖硬件 , 不容易移植 。
很多嵌入式开发都是用C语言完成的 , 因此 , 除了低级的引导代码外 , 嵌入式代码在理论上是相当可移植的 。 然而 , 编写可移植GUI代码是一个完全不同的故事 , 除非您在现有框架(如LVGL或AzureRTOS GUI)的基础上进行构建 , 否则需要花费大量精力来抽象所有硬件依赖项 , 在尝试保持最佳状态时更是如此 。
当然 , 并非总是有必要(或可能)拥有100%可移植的GUI代码 。 然而 , 在这个全球芯片短缺的时代 , 它可以被证明是非常方便的 , 不需要对特定类型的微控制器或LCD显示器有严格的依赖 。
【编程|如何进行有效的嵌入式GUI开发?】内存管理
简而言之:您的图形用户界面可能会占用大量内存 , 您需要更加聪明 , 为实际应用程序留出足够的空间 。 例如 , 节省图形内存的一个快速方法是仔细检查是否可以用矢量等价物替换某些光栅图形(例如图标):当然 , 直接在屏幕上绘制一个简单的32x32px红方块需要更少的代码和RAM , 而不是将其存储为内存中的位图 。
资源管理
正确管理组成GUI项目的各种资源可能很棘手 。 更具体地说 , 您的GUI实体模型都可能由各种图像文件、图标、字体等组成 。 但是 , 在嵌入式开发环境中 , 您通常不能期望能够在代码中直接操作漂亮的透明PNG文件或TrueType字体!首先需要将其转换为允许在嵌入代码中操作的格式 。
事件处理和性能
首先 , C语言仍然是最常用的嵌入式编程语言 , 它并不完全是面向对象的 。 因此 , 即使完全有可能以上面所示的高级API为目标 , 也很有可能在向某个UI元素添加/更新事件处理程序时使用容易出错的函数指针 。
假设您确实找到了一种优雅的方式将事件处理程序与UI的各个部分关联起来 , 那么您仍然需要实现某种类型的事件循环 。 事实上 , 您必须定期处理系统中发生的事件(“按下按钮A”等) , 并将它们发送给适当的事件处理程序 。 嵌入式编程中的一种常见模式是通过所谓的超级循环来实现:程序运行无限循环 , 无限次地调用系统需要执行的每个任务 。
这种方法的一个好处是 , 执行流保持了相当的可读性和直观性 , 并且还避免了复杂的多线程或中断处理可能导致的一些潜在问题 。 但是 , 任何运行时间过长(或崩溃!)的事件处理程序都会影响主应用程序的性能和稳定性 。
- 小米科技|不聊性能只谈拍照!新旗舰反向升级成潮流,拍照手机如何选?
- 搜索引擎|淘宝运营系统出台春节打烊功能,淘宝运营商家该如何选择?
- 小米科技|RTX3060的性能到底如何?相比RTX2060提升有多大?
- 将理论注入深度学习,对过渡金属表面进行可解释的化学反应性预测
- 市值超 1.7 万亿的Netflix是如何做决策的?
- 核桃|核桃编程荣膺“2021中国网·科技企业先锋榜”年度品牌影响力企业
- 快来领取随日本亿万富翁进行月球旅行的免费入场券!仅限前8人
- QQ音乐的2021专辑盘点,是如何征服资深乐迷的
- 饭饭1080°平台分析之生鲜电商平台如何选择ERP系统和SAAS系统
- 在2021大中华区艾菲国际论坛上|玛雅文化施葵:新消费时代,如何助力品牌跑出“破圈”加速度?