最新教程下载:http://www.armbbs.cn/forum.php?mod=viewthread&tid=98429
第3章 ThreadX GUIX和GUIX Studio介绍
本章主要介绍GUIX和GUIX Studio的基础知识。
3.1 初学者重要提示
3.2 Express Logic公司介绍
3.3 GUIX简介
3.4 GUIX Studio简介
3.5 GUIX性能测试
3.6 GUIX论坛
3.7 总结
3.1 初学者重要提示
- GUIX通过了医疗认证IEC-62304 Class C,汽车认证IEC-61508 ASIL D,工业认证IEC-61508 SIL 4和运输/铁路认证EN50128,表明GUIX可用于安全关键型系统
3.2 Express Logic公司介绍
ThreadX的作者是William lamie(同样是Nucleus RTOS的原始作者,于1990年发布)。1996的时候成立了Express Logic,并于1997发布首版ThreadX RTOS。
- ThreadX4发布于2001年,ThreadX5发布于2005年,ThreadX6发布于2020年。
- FileX – ThreadX的嵌入式文件系统于1999年发布首版。
- NetX – ThreadX的嵌入式TCP / IP网络协议栈于2002年发布首版。
- USBX – ThreadX的嵌入式USB协议栈于2004年发布首版。
- 2009年推出了适用于SMP多核环境的ThreadX。
- 2011年发布支持动态应用加载的ThreadX Modules。
- GUIX – ThreadX的嵌入式UI于2014年发布首版。
- Microsoft在2019年4月18日以未公开的价格购买了Express Logic。
3.2.1 ThreadX内核
ThreadX几乎是小型RTOS的巅峰之作,不管你之前用的那个OS,如果有精力建议还是学习下。62亿电子设备采用,是其它RTOS无法逾越的高山。ThreadX的产品涵盖了各种领域,包括NASA的多个太空探测项目,飞机自动驾驶仪系统,火星侦察轨道器等。
ThreadX及其所有中间件的安全认证等级,至今没有一款小型RTOS可以与其匹敌。这么多安全认证,公司要入大量财力,人力和物力才可以完成,早前Micrium的一篇文章还谈过这个问题,投入了太多资金和人力了,还与风河的VxWorks做了简单对比。
(1)医疗 - FDA510(k),IEC-62304 Class C,IEC-60601,ISO-14971
(2)工业 - UL-1998,IEC-61508 SIL 4
(3)运输/铁路 - EN50128 SIL 4,BS50128, 49CFR236,IEC-61508
(4)航空航天设备 - DO-178B,ED-12B,DO-278
(5)汽车 - IEC-61508 ASIL D
(6)核应用 - IEC-61508
(7)家电 - UL/IEC 60730/60335
规格如下:
更详细的介绍地址:https://rtos.com/solutions/threadx/real-time-operating-system/ 。
3.2.2 FileX文件系统
ThreadX的文件系统非常强劲,通过了各行各业的高等级安全认证。其它文件系统别说安全认证了,安全措施都不多,甚至没有。
规格如下:
再看API,一个文件系统竟然提供了230多个,仅异常处理的API就有20个(一个文件一个API)
更详细的介绍看此贴:https://rtos.com/solutions/filex/embedded-file-system/。
3.2.3 NetX网络协议栈
ThreadX的网络协议栈对其它网络协议栈几乎是碾压性优势。一张图,几乎涵盖了我们日常项目大部分应用:
各个行业的安全认证:
物联网协议方向安全认证:
加密库也做了认证:
更多介绍可以看此贴:https://rtos.com/solutions/netx-duo/embedded-network-stack/ 。
3.2.4 USBX协议栈
USB协议栈也不错,日常用的功能也齐全
规格如下:
更多介绍可以看此贴:https://rtos.com/solutions/usbx/embedded-usb/
3.2.5 LevelX擦写均衡保护层
LevelX为NAND和NOR型Flash提供擦写均衡支持,并且对于NAND型,还支持ECC校验和坏块管理。
由于NAND和NOR型Flash擦除次数是有限的,因此均匀分配闪存使用至关重要。这通常称为擦写均衡,LevelX为此而生。LevelX向用户提供一个逻辑扇区阵列,这些逻辑扇区映射到LevelX内部的物理闪存。应用程序可以将LevelX与FileX结合使用,也可以直接读取/写入逻辑扇区。LevelX专为容错而设计。Flash更新是分多个步骤进行的,每个步骤都可以中断。在下一次操作期间,LevelX自动恢复到最佳状态。
3.3 GUIX简介
GUIX是微软的高级工业级GUI解决方案,专门针对深度嵌入式,实时和IoT应用程序而设计。微软还提供了名为GUIX Studio的桌面开发工具,该工具允许开发人员在桌面上设计其GUI并生成GUIX代码,然后可以将其导出到目标。
GUIX通过了医疗认证IEC-62304 Class C,汽车认证IEC-61508 ASIL D,工业认证IEC-61508 SIL 4和运输/铁路认证EN50128。表明GUIX可用于安全关键型系统。
3.3.1 基础介绍
直观一致的API
- 名词动词命名约定。
- 所有API都有gx_前缀,方便识别GUIX的函数。
- 事件驱动模式。
- 需要时,支持直接canvas画布绘制。
- 方便与GUIX Studio交互。
- API支持绘制直线,矩形,多边形等。
- API支持圆圈,圆弧,饼图,弦图和椭圆绘制。
- API支持文本绘制和位置调整。
- 支持抗锯齿,纹理填充和实体填充。
- 支持创建和修改屏幕和控件。
控件库
- 预定义,但是可以自定义的一组通用接口元素。
- 小巧,紧凑且高效。
- 库包括按钮、仪表、列表,窗口,滚动条,滑块,进度条等
- 完全可定制的绘制和外挂。
- 完全可定制的操作和事件管理。
- 只有控件的使用与应用代码关联。
数学和实用功能
- 支持sin,cos,arcsin,arccos,tan和平方根、
- 支持操作屏幕区域。
- 系统配置和启动
- 内存池定义。
- 定时器管理、
- 动画管理。
- Dirty列表维护(即需要绘制的区域)
图像处理
- 支持jpeg和png解码。
- 支持抖动和颜色格式转换。
- 支持图像旋转。
- 支持图像放缩。
- 支持图像混合。
事件处理
- 空闲时自动挂起GUIX线程。
- UI设计中流行的事件驱动编程模型。
- 将驱动程序与GUIX绘制任务隔离。
- 发送和接收事件功能。
- 所有GUIX小控件的预定义事件类型。
- 用户自定义事件。
Canvas画布处理
- 裁剪和Z序处理。
- 控件和硬件隔离。
- 应用和硬件隔离。
- 自动刷新Dirty区域。
- 支持多图层画布的混合。
- 可以由应用程序直接调用。
输入设备驱动
- 定制硬件支持,GUIX和硬件隔离。
- 支持电阻式,电容式和实体键盘。
- 输入事件传递到GUIX事件队列。
显示驱动和目标硬件
- 各种颜色格式和颜色深度支持。
- 可以定制图形加速,通过底层接口函数实现。
- 几乎任何支持图形输出的屏,都可以使用GUIX。
- 支持多屏显示。
3.3.2 内存需求
对于集成了内部GRAM和自刷新技术的显示屏,可以不需要canvas画布支持。这种情况下,GUIX需要的最小Flash是13.2KB,RAM是4KB。
所需画布大小的计算公式如下:
Canvas RAM (bytes) = (x * y * (bpp/8))
其中x和y分别是画布的长和宽,而bpp是画布的颜色深度,比如RGB565,颜色深度bpp就是16bit,即两字节。
另外大多数应用还会用到图形资源和字库,这个占用大小由实际应用而定。
3.3.3 API命名规则
GUIX的函数命名规则是:Noun-verb naming convention (名词动词命名约定)。根据这个命名规格,我们实际看下个API,比如:gx_widget_front_move ,前缀gx,名词widget_front_,动词move。再看下面API截图(部分函数截图):
基本也都符合这个要求。
3.3.4 快速执行
Azure RTOS GUIX是专门用C编写的,旨在提高速度。Azure RTOS GUIX具有最小的内部函数调用分层。
此外,Azure RTOS GUIX还提供了优化的剪辑,绘制和事件处理。所有这些以及通用的面向性能的设计理念可帮助Azure RTOS GUIX实现最快的性能。
3.3.5 安全认证
GUIX通过了医疗认证IEC-62304 Class C,汽车认证IEC-61508 ASIL D,工业认证IEC-61508 SIL 4和运输/铁路认证EN50128。表明GUIX可用于安全关键型系统。
注:SGS-TUV公司由德国SGS集团和TUV合资企业组成,现已成为领先的认证公司,致力于测试,审核,验证和认证全球安全相关的嵌入式软件。
3.3.6 简单易用
GUIX的使用非常方便,利用GUIX Studio可以让开发人员在桌面上方便的生成目标板运行的C代码,从而使其变得更加容易。然后,用户可以添加自己的自定义事件处理和绘图功能,以完成其GUI。
使用Azure RTOS GUIX API也很方便。GUIX API既直观又功能强大。API名称是用真实的单词构成的,而不是一些无意义的单词。所有GUIX API都有前导gx_并遵循名词-动词命名约定。此外,整个API都具有功能一致性。例如,所有初始化控件控制块的API均命名为<widget_type> _create,并且每种控件的创建函数形参始终以相同的顺序定义。
3.3.7 支持的控件种类
GUIX默认支持的控件类型如下,当然。GUIX也支持用户自定义各种控件。
- Accordion Menu
- Button
- Checkbox
- Circular Gauge
- Drop Down List
- Horizontal List
- Horizontal Scrollbar Window
- Icon
- Icon Button
- Line Chart
- Menu
- Multi Line Text Button
- Multi Line Text Input
- Multi Line Text View
- Numeric Pixelmap Prompt
- Numeric Prompt
- Numeric Scroll Wheel
- Pixelmap Button
- Pixelmap Prompt
- Pixelmap Slider
- Pixelmap Sprite
- Progress Bar
- Prompt
- Radial Progress Bar
- Radio Button
- Scroll Wheel
- Single Line Text Input
- Slider
- String Scroll Wheel
- Text Button
- Tree View
- Vertical List
- Vertical Scrollbar
3.3.8 完善的底层绘图API
Azure RTOS GUIX提供了强大的画布绘图API,允许应用程序实现复杂的图形形状。
所有功能都支持高颜色深度目标设备的抗锯齿,并且所有形状都可以填充轮廓,包括实心和像素图案填充。当以16 bpp和更高的色深运行时,所有绘图均支持alpha。绘图功能包括:
- Arc Draw
- Circle Draw
- Line Draw
- Pie Draw
- Pixelmap Blend
- Pixelmap Tile
- Polygon Draw
- Text Draw
- Chord Draw
- Ellipse Draw
- Pixel Draw
- Pixelmap Draw
- Pixelmap Rotate
- Rectangle Draw
- Text Blend
3.3.9 免费字体
GUIX提供了一组免费的TrueType矢量字体。开发人员可以根据需要添加其他TrueType字体。GUIX字体格式支持8bpp抗锯齿,4bpp抗锯齿和1bpp单色字体。对于大多数资源受限的应用程序,使用GUIX Studio将TrueType字体预先渲染为压缩的位图格式。
- 免费字体搜集贴:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=98594 。
3.3.10 支持的颜色格式和触摸
GUIX支持的颜色类型也比较丰富,常用的颜色类型,从单色到32bit颜色格式,都支持了:
- GX_COLOR_FORMAT_MONOCHROME 1
- GX_COLOR_FORMAT_MONOCHROME_INVERTED 2
- GX_COLOR_FORMAT_2BIT_4GRAY 3
- GX_COLOR_FORMAT_2BIT_GRAY_INVERTED 4
- GX_COLOR_FORMAT_4BIT_GRAY 5
- GX_COLOR_FORMAT_4BIT_GRAY_INVERTED 6
- GX_COLOR_FORMAT_4BIT_VGA 7
- GX_COLOR_FORMAT_8BIT_GRAY 8
- GX_COLOR_FORMAT_8BIT_GRAY_INVERTED 9
- GX_COLOR_FORMAT_8BIT_PALETTE 10
- GX_COLOR_FORMAT_8BIT_PACKED_PIXEL 11
- GX_COLOR_FORMAT_15BIT_BGR 12
- GX_COLOR_FORMAT_15BIT_RGB 13
- GX_COLOR_FORMAT_16BIT_RGB 14
- GX_COLOR_FORMAT_16BIT_ARGB 15
- GX_COLOR_FORMAT_16BIT_BGRA 16
- GX_COLOR_FORMAT_16BIT_BGR 17
- GX_COLOR_FORMAT_24BIT_RGB 18
- GX_COLOR_FORMAT_24BIT_BGR 19
- GX_COLOR_FORMAT_24BIT_XRGB 20
- GX_COLOR_FORMAT_24BIT_BGRX 21
- GX_COLOR_FORMAT_32BIT_ARGB 22
- GX_COLOR_FORMAT_32BIT_RGBA 23
- GX_COLOR_FORMAT_32BIT_ABGR 24
- GX_COLOR_FORMAT_32BIT_BGRA 25
而触摸方面,电阻屏,电容屏和实体按键全都支持。
3.3.11 GUIX模拟器
GUIX提供了VS2019模拟器版本,位于GUIX Studio安装目录的如下路径(路径里面的6.01是版本号,随着以后的升级,版本号会递增):
使用VS2019打开这些例子,就可以直接编译运行。
注意:GUIX Studio V6.00版本里面案例可以直接打开运行,V6.01版本要注意此贴的问题:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=98923 。
3.3.12 支持的硬件平台
GUIX手册中罗列了一批GUIX支持的硬件平台,实际上,凡是裸机能够驱动的LCD,都可以移植GUIX(满足GUIX最小RAM和最小Flash需求即可)。
3.4 GUIX Studio简介
使用GUIX Studio,完全可以让美工前期做好各种界面效果,后期工程师添加操作流程和触发事件。的确是做的非常成熟,可以添加设置各种主题,各种界面效果,各种字体展示,各种图片格式设置,使用GUIX Studio,基本可以实现GUI设计一条龙。
GUIX Studio生成的文件
- 自动生成ANSI C文件。
- 让用户应用设计与界面设计隔离开。
- 包含设计所需的字体和图像。
- 生成的代码可以和用户应用代码一起编译。
- 界面更新不影响用户应用逻辑。
- 资源ID保证创建的语言和主题独立性。
- 用户可以提供自定义绘图和事件处理能力。
下面这些效果,都是在GUIX上设计完成的:
GUIX提供了应用案例界面效果展示:
智能家居:
医疗类:
家电:
汽车电子:
工业控制:
3.5 GUIX性能测试
ThreadX GUIX在STM32上的刷屏流畅度展示,效果顶呱呱:
http://www.armbbs.cn/forum.php?mod=viewthread&tid=98185 。
3.6 GUIX论坛
针对ThreadX GUIX,专门建立了论坛版块:
http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12。
当然,大家也可以上GUIX的官方Github开源地址提交问题:
https://github.com/azure-rtos 。
3.7 总结
关于ThreadX GUIX就跟大家介绍这么多,更详细的可以上我们的论坛进一步讨论。