Skip to content

Arduino RT Thread Library 简介

onelife edited this page Jun 23, 2019 · 2 revisions

💥 由来

RT-Thread 的历史比 Arduino 要久,只是长期以来默默无闻,而 Arduino 却从诞生开始一直:fire:到现在。其原因,咱哥们儿以为至少有一条是 Arduino 把编程的门槛儿降得很低。以至于能让一个没有任何基础的人,在一天之内开始享受编程的乐趣。不得不说,这实在:cow::x:!

一开始,咱也不是特别看好 Arduino ,只当它是一个初学者的玩具,琢磨着“八位机能玩儿出什么花儿来?” 😜

然而现实“啪啪”的狠抽了哥们儿的脸蛋子 :goberserk: ——八位机确实能玩儿出花儿来 🌻。这大概正是得益于 Arduino 的低门槛儿,让原本甚至是外行的人都能够通过编程来表达自己的想法,释放出“内行人”无法想象的创意来。🌋

后来有一群 STM 玩儿家,开发了个 STM32 版本的 Arduino。这可能是第一个支持 ARM 处理器的 Arduino 。:boom:

大约与此同时(或更早?),:bear:哥也开始了 ART 项目。这是 RT-Thread 和 Arduino 第一次结合。:tada:

咱哥们开始玩 Arduino 的契机是表妹的毕业设计。:grin: 当在库管理器里发现了 FreeRTOS 库时,觉得 RT-Thread 也应该这样玩儿:搭上 Arduino 的车,让更多人知道有 RT-Thread 这么一号,并且开始享受使用 RT-Thread 的便捷 😉。

👷 移植概述

  1. Fork RT-Thread project,暂时移除内核以外的代码。
  2. 重新组织目录结构和引用( #include xxx)以适应 Arduino 的编译步骤。
  3. 映射 Arduino 的串口 API 到 RT-Thread 驱动
  4. 使能 console 并放回 FinSH
  5. 由于不能控制 Arduino 的链接器,所以启动程序要改一改
  6. 放回更多组件、映射更多驱动
  7. 翻新一些例程
  8. 等等 :bowtie:

:neckbeard: Arduino RT-Thread 库概述

Arduino RT-Thread 库目前支持 ARM 的 Cortex-M3 和 Cortex-M0 处理器,使用 Arduino DUE 和 Arduino MKR Zero 板子做测试。

ARM Cortex-M 的内核中断处理程序,在 Arduino 这边(以 Cortex-M3 为例)大部分都是弱定义,除了 SVC_HandlerPendSV_HandlerSysTick_Handler。但是这三个函数也都分别提供了钩子函数:svcHookpendSVHooksysTickHook ,所以移植起来还不算困难。只是刚开始时,由于不熟悉,花了很多时间才搞明白 Cortex-M0 不能处理地址不对齐得情况。比如,一个指向4字节变量的指针,如果它的值(即变量地址)不是4的整数倍,那么引用时就会造成 Hard Fault 。 💀 (非常痛的领悟。)

目前可用的组件

  • FinSH
  • MSH
  • uLog
  • FAT 文件系统
  • 动态模块

目前可用的驱动

  • SPI
  • IIC
  • SD (SPI)
  • ILI9341 (SPI) 显示屏(使用 Adafruit 2.8" TFT Touch Shield v2 板子做测试)
  • FT6206 (IIC) 触摸传感器(使用 Adafruit 2.8" TFT Touch Shield v2 板子做测试)

目前可用的例程

  • Blink:闪烁 LED,展示 thread
  • RttMutex:展示 mutex
  • DataLogger:记录 ADC 数据并存到 SD ,展示 SD 驱动和 FAT 文件系统
  • FinSH:展示 FinSH 、自定义命令和自定义变量
  • HelloMo:展示动态模块(Arduino App)

以上内容如有更新,请参考项目主页

🎊 结语

RT-Thread 是一款优秀的国产实时系统,Arduino 是一个简单易用、非常适合进行快速验证的平台。希望这样的组合能帮到各位仁兄,祝各位遍程愉快! 🍻

👉 请踊跃加 ⭐ 、提交 Issue 或提交 Pull request 。 👍