第 2 章 - GUIX 的安装和使用

本章介绍了与安装、设置和使用高性能用户界面产品 GUIX 相关的各种问题。

主机注意事项

嵌入式开发通常在 Windows 或 Linux (Unix) 主机上进行。 在主机上编译、链接应用程序并生成可执行文件之后,应用程序将下载到目标硬件,以便执行。

通常,目标下载是在开发工具的调试器内完成的。 在下载后,调试器负责提供目标执行控件(“执行”、“暂停”、“断点”等)以及对内存和处理器寄存器的访问。

大多数开发工具调试器通过 JTAG (IEEE 1149.1) 和后台调试模式 (BDM) 等芯片调试 (OCD) 连接与目标硬件进行通信。 调试器还通过线路内仿真 (ICE) 连接与目标硬件进行通信。 OCD 和 ICE 连接提供可靠的解决方案,并在目标常驻软件上进行最小入侵。

对于主机上使用的资源,GUXI 的源代码以 ASCII 格式提供,需要大约 30 MB 的主机硬盘空间。

目标注意事项

GUIX 要求目标有 5 KB 到 80 KB 只读内存 (ROM)。 GUIX 线程堆栈和其他全局数据结构要求目标另外有 5 到 10 KB 的随机存取内存 (RAM)。

此外,GUIX 要求使用 ThreadX 计时器和 ThreadX 互斥对象。 这些设施用于 GUIX 中的定期处理需求和线程保护。

产品分发

可以从我们的公共源代码存储库获取 Azure RTOS GUIX,网址为:https://github.com/azure-rtos/guix/

下面列出了大多数产品分发版共有的重要文件:

文件名 说明
gx_api.h 此 C 头文件包含所有系统等式、数据结构和服务原型。
gx_port.h 此 C 头文件包含所有特定于目标和特定于开发工具的数据定义和结构。
gx.a(或 gx.lib) 这是 GUIX C 库的二进制版本。 这通常是通过对提供的 GUIX 库源文件进行编译和归档生成的,但此库也可能以预生成形式提供,具体取决于你的硬件目标和许可证类型。

重要

所有文件都采用小写文件名,这样就可以很容易地将命令转换为 Linux (Unix) 开发平台命令。

GUIX 安装

可以通过将 GitHub 存储库克隆到本地计算机来安装 GUIX。 下面是用于在电脑上创建 GUIX 存储库的克隆的典型语法:

    git clone https://github.com/azure-rtos/guix

也可以使用 GitHub 主页上的下载按钮来下载存储库的副本。

还可以在联机存储库的首页上找到有关如何生成 GUIX 库的说明。

注意

应用程序软件需要访问 NetX 库文件(通常称为 nx.a(或 nx.lib))和 C include 文件 nx_api.h 和 nx_port.h。 为实现此目的,可以设置开发工具的相应路径,或者将这些文件复制到应用程序开发区域。

使用 GUIX

使用 GUIX 很容易。 基本上来说,应用程序代码在编译期间必须包括 gx_api.h,并且必须与 GUIX 库 gx.a(或 gx.lib)链接。

构建 GUIX 应用程序需要四个简单的步骤:

步骤 说明
步骤 1: 在所有使用 GUIX 服务或数据结构的应用程序文件中包括 gx_api.h 文件。
步骤 2: 通过从 tx_application_define 函数或应用程序线程调用 gx_system_initialize 来初始化 GUIX 系统。
步骤 3: 创建一个显示实例,创建用于显示的画布,并创建根窗口以及所需的任何其他窗口或小组件。
步骤 4: 编译应用程序源代码并与 GUIX 运行时库 gx.a(或 gx.lib)链接。 生成的图像可下载到目标并执行!

疑难解答

每个 GUIX 端口都提供了一个在特定显示硬件上执行的演示应用程序。 所有版本的 GUIX 中都提供了相同的基本演示。 首先运行演示系统始终是一个不错的主意。

如果演示系统无法正常运行,请执行以下操作来缩小问题范围:

  1. 确定演示的运行量。

  2. 通过更改编译时常量 GX_THREAD_STACK_SIZE 并重新编译 GUIX 库,增大 GUIX 线程的堆栈大小

  3. 使用配置选项部分列出的合适调试选项重新编译 GUIX 库。

  4. 观察所有 API 调用的返回状态。

  5. 通过在函数 _gx_system_error_process 处设置断点确定是否存在内部系统错误。 应该可以通过错误代码和调用方提供的线索来了解哪些方面可能有问题。

  6. 暂时跳过最近所做的任何更改,看看问题是否消失或有所变化。 此类信息对于 Microsoft 支持工程师非常有用。

请按照“我们需要你提供的信息”部分所述的过程,发送在故障排除步骤中收集的信息。

配置选项

使用 GUIX 构建 GUIX 库和应用程序时,有几个配置选项。 这些选项用于优化库大小和功能集,最大程度地满足应用程序要求。 例如,如果你的应用程序将只有一个使用 GUIX API 服务的线程,则应定义配置标志 GX_DISABLE_MULTITHREAD_SUPPORT,以消除与保护关键代码段不被多个线程抢占相关的开销。 可以在应用程序源代码中、在命令行上或者在 gx_user.h include 文件中定义各种配置标志。

每当修改 GUIX 库配置标志时,都需要重新生成 GUIX 库和应用程序模块,才能使配置更改生效。

“附录 H:GUIX 生成时配置标志”介绍了配置标志的完整列表。

GUIX 版本 ID

当前版本的 GUIX 在运行时可供用户和应用程序软件使用。 程序员可以通过检查 gx_port.h 文件来获取 GUIX 版本。 此外,此文件还包含相应端口的版本历史记录。应用程序软件可以通过检查 gx_port.h 中的全局字符串 _gx_version_id 获取 GUIX 版本。

应用程序软件还可以从 gx_api.h 中定义的如下常量中获取发布信息。这些常量通过名称和产品的主要版本和次要版本来标识当前产品版本

#define __PRODUCT_GUIX__

#define __GUIX_MAJOR_VERSION__

#define __GUIX_MINOR_VERSION__