https://github.com/feilipu/Arduino_FreeRTOS_Library
这是Richard Berry的freertos 的分支,优化了Arduino AVR器件。
它已经建立了提供访问FreeRTOS的能力,与Arduino环境完全兼容。 使用它更方便,让你接触最少的硬件。
进一步的阅读
信息的标准源的FreeRTOS的网站 在这个网站。入门指南网页是非常有用的。 值得从具有用户,manicbug有一些有趣的例子。 我avrfreertos库有很多这样的例子, 测距眨眼通过对一个合成器。
综合
FreeRTOS有许多配置选项,可以指定在freertosconfig .h文件。 公共所有的Arduino硬件保存选项,一些明智的默认值已。
AVR单片机的看门狗定时器用于产生15ms时间片,但任务完成之前分配的时间将进行回调度。 这不影响任何正常的定时器功能。
时间片可以选择从15ms到500ms。慢的时间切片可以让Arduino单片机睡更长的时间,没有一个空闲的复杂机制。
看门狗时间选项:
- wdto_15ms
- wdto_30ms
- wdto_60ms
- wdto_120ms
- wdto_250ms
- wdto_500ms
注意:定时器分辨率受整除和选择的时间切片的影响。例如要测量100ms,而使用60ms时间片,不会正常工作。
为loop()函数堆栈已被定为192字节。这可以通过调整configidle_stack_size参数配置。 应不小于MINIMAL_STACK_SIZE。如果你有堆栈溢出的问题,就增加它。 用户应该先使用pvPortMalloc()分配较大的结构,数组,或缓冲区,然后在本地堆栈定义他们。
堆的内存是由正常的malloc()功能分配,用pvportmalloc()。 这个选项已被选中,是因为它的自动调节能力各使用设备。 其他堆分配方案是支持FreeRTOS的,他们可以用。
错误
- 堆栈溢出:如果任何堆栈(为loop()或)任何任务的溢出,将有一个缓慢的LED闪烁,4秒的周期。
- 堆溢出:如果任何任务试图分配内存,分配失败,会有一个快速的LED闪烁,100毫秒周期。
勘误表
随着软件串口库测试表明在低波特率一些不兼容(9600),由于时间的延长,这个库禁用全局中断。
兼容性
-
- ATmega328 @ 16MHz : Arduino UNO, Arduino Duemilanove, Arduino Diecimila, etc.
- ATmega328 @ 16MHz : Adafruit Pro Trinket 5V, Adafruit Metro 328, Adafruit Metro Mini
- ATmega328 @ 16MHz : Seeed Studio Stalker
- ATmega328 @ 16MHz : Freetronics Eleven
- ATmega328 @ 12MHz : Adafruit Pro Trinket 3V
- ATmega32u4 @ 16MHz : Arduino Leonardo, Arduino Micro, Arduino Yun, Teensy 2.0
- ATmega32u4 @ 8MHz : Adafruit Flora, Bluefruit Micro
- ATmega1284p @ 24.576MHz : Seeed Studio Goldilocks, Seeed Studio Goldilocks Analogue
- ATmega2560 @ 16MHz : Arduino Mega, Arduino ADK
- ATmega2560 @ 16MHz : Seeed Studio ADK
- ATmegaXXXX @ XXMHz : Anything with an ATmega MCU, really.
文件&配置
- arduino_freertos.h:必须先include。它引用的其他配置文件,并在必要时设置默认。
- freertosconfig.h:包含多种API和环境配置。
- freertosvariant.h:包含此端口FreeRTOS AVR的具体配置。
- heap_3.c:包含基于malloc()堆分配方案。其他方案可供选择,而是取决于用户配置为特定的单片机的选择。
- 使用创建静态任务,详情见pull request# 19。