-
-
Notifications
You must be signed in to change notification settings - Fork 9
Arduino RT Thread Library 简介
RT-Thread 的历史比 Arduino 要久,只是长期以来默默无闻,而 Arduino 却从诞生开始一直:fire:到现在。其原因,咱哥们儿以为至少有一条是 Arduino 把编程的门槛儿降得很低。以至于能让一个没有任何基础的人,在一天之内开始享受编程的乐趣。不得不说,这实在:cow::x:!
一开始,咱也不是特别看好 Arduino ,只当它是一个初学者的玩具,琢磨着“八位机能玩儿出什么花儿来?” 😜
然而现实“啪啪”的狠抽了哥们儿的脸蛋子 ——八位机确实能玩儿出花儿来 🌻。这大概正是得益于 Arduino 的低门槛儿,让原本甚至是外行的人都能够通过编程来表达自己的想法,释放出“内行人”无法想象的创意来。🌋
后来有一群 STM 玩儿家,开发了个 STM32 版本的 Arduino。这可能是第一个支持 ARM 处理器的 Arduino 。:boom:
大约与此同时(或更早?),:bear:哥也开始了 ART 项目。这是 RT-Thread 和 Arduino 第一次结合。:tada:
咱哥们开始玩 Arduino 的契机是表妹的毕业设计。:grin: 当在库管理器里发现了 FreeRTOS 库时,觉得 RT-Thread 也应该这样玩儿:搭上 Arduino 的车,让更多人知道有 RT-Thread 这么一号,并且开始享受使用 RT-Thread 的便捷 😉。
- Fork RT-Thread project,暂时移除内核以外的代码。
- 重新组织目录结构和引用(
#include xxx
)以适应 Arduino 的编译步骤。 - 映射 Arduino 的串口 API 到 RT-Thread 驱动
- 使能 console 并放回 FinSH
- 由于不能控制 Arduino 的链接器,所以启动程序要改一改
- 放回更多组件、映射更多驱动
- 翻新一些例程
- 等等
Arduino RT-Thread 库目前支持 ARM 的 Cortex-M3 和 Cortex-M0 处理器,使用 Arduino DUE 和 Arduino MKR Zero 板子做测试。
ARM Cortex-M 的内核中断处理程序,在 Arduino 这边(以 Cortex-M3 为例)大部分都是弱定义,除了 SVC_Handler
、 PendSV_Handler
和 SysTick_Handler
。但是这三个函数也都分别提供了钩子函数:svcHook
、 pendSVHook
和 sysTickHook
,所以移植起来还不算困难。只是刚开始时,由于不熟悉,花了很多时间才搞明白 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 。 👍