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
我可以在哪里找到更多信息?¶
这篇博客文章:LVGL on LPCXpresso54628
NuttX 邮件列表:Apache NuttX Mailing List