NuttX 实时操作系统

什么是 NuttX?

NuttX 是一个成熟且安全的实时操作系统 (RTOS),注重技术标准的合规性和小体积。 它可扩展到从 8 位到 64 位的微控制器和微处理器,并符合可移植操作系统接口 (POSIX) 和美国国家标准协会 (ANSI) 标准,同时支持许多类 Linux 子系统。 可以将 NuttX 看作是微控制器上的一个小型 Unix/Linux 系统。

NuttX 的亮点

  • 小巧 - 可在仅 32 kB Flash 和 8 kB RAM 的微控制器上运行。

  • 兼容 - 力求尽可能与 POSIX 和 Linux 兼容。

  • 多功能 - 支持多种架构(ARM、ARM Thumb、AVR、MIPS、OpenRISC、RISC-V 32 位和 64 位、RX65N、x86-64、Xtensa、Z80/Z180 等)。

  • 模块化 - 模块化设计允许开发人员仅选择真正需要的功能,并通过模块添加新功能。

  • 流行 - NuttX 被全球许多公司使用。您可能已经使用过运行 NuttX 的产品而不自知。

  • 可预测 - NuttX 是一个可抢占的实时内核,因此您可以使用它创建用于实时控制的可预测应用程序。


为什么选择 NuttX + LVGL?

尽管 NuttX 有自己的图形库 NX,但 LVGL 是一个很好的替代方案,因为用户可以找到更多吸引人的演示,并且可以重用以前项目中的代码。 LVGL 是一个面向对象的组件化高级 GUI 库,非常适合具有高级功能的 NuttX 这样的 RTOS。 LVGL 使用 C 语言实现,其 API 也是用 C 编写的。

在 NuttX 中使用 LVGL 的一些优势

  • 首先在 Linux 中开发 GUI,完成后只需为 NuttX 编译即可。无需浪费时间。

  • 通常,低级 RTOS 的 GUI 开发需要多次迭代才能完成,每次迭代包括 更改代码 > 构建 > 烧录 > 运行。 使用 LVGL、Linux 和 NuttX,您可以减少此过程,只需在计算机上测试一切,完成后在 NuttX 上编译即可。

NuttX + LVGL 可用于

  • GUI 演示以展示您的板卡图形能力。

  • 用于 MVP(最小可行产品)演示的快速原型 GUI。

  • 在板卡上直接轻松地可视化传感器数据,而无需使用计算机。

  • 无触摸屏的 GUI 最终产品(例如,使用旋转编码器输入数据的 3D 打印机界面)。

  • 带触摸屏的最终产品(以及各种附加功能)。


如何开始使用 NuttX 和 LVGL?

NuttX 主线 中有许多支持 LVGL 的板卡。 让我们以 STM32F429IDISCOVERY 为例,因为它是一块非常流行的板卡。

首先需要在系统上安装先决条件

让我们使用 Windows Subsystem for Linux

$ sudo apt-get install automake bison build-essential flex gcc-arm-none-eabi gperf git libncurses5-dev libtool libusb-dev libusb-1.0.0-dev pkg-config kconfig-frontends openocd

现在让我们创建一个工作区来保存文件

$ mkdir ~/nuttxspace
$ cd ~/nuttxspace

克隆 NuttX 和 Apps 仓库:

$ git clone https://github.com/apache/incubator-nuttx nuttx
$ git clone https://github.com/apache/incubator-nuttx-apps apps

配置 NuttX 以使用 stm32f429i-disco 板卡和 LVGL 演示

$ ./tools/configure.sh stm32f429i-disco:lvgl
$ make

如果一切顺利,您现在应该有一个 nuttx.bin 文件可以烧录到您的板卡上:

$ ls -l nuttx.bin
-rwxrwxr-x 1 alan alan 287144 Jun 27 09:26 nuttx.bin

使用 OpenOCD 将固件烧录到板卡:

$ sudo openocd -f interface/stlink-v2.cfg -f target/stm32f4x.cfg -c init -c "reset halt" -c "flash write_image erase nuttx.bin 0x08000000"

重置板卡并使用 'NSH>' 终端启动 LVGL 演示:

nsh> lvgldemo

我可以在哪里找到更多信息?