极客工坊

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 54808|回复: 15

亲:给 arduino 装个操作系统吧~~~~~

[复制链接]
发表于 2011-12-28 01:33:06 | 显示全部楼层 |阅读模式
本帖最后由 SS15 于 2011-12-28 09:35 编辑

官网的 playground 简直是个宝藏啊

1、Event:http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1279102180/2
一个非常简洁很容易懂的事件驱动程序框架,使用了函数指针和事件队列来实现事件驱动,但是在事件队列里面没有对事件优先级做出处理。对于要开发自己事件驱动框架的同学,这个例子很具有参考价值。

2、Dduinos:http://code.google.com/p/duinos/
一个基于 freeRTOS 面向 arduino 体系的开源 RTOS。支持多线程和线程调度。我在328和2560下面初步测试通过。文档很少,不过貌似这已经是Arduino平台上最普遍的RTOS。值得深入研究
回复

使用道具 举报

发表于 2011-12-28 08:34:16 | 显示全部楼层
{:soso_e102:}这两个都很帅
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 12:33:39 | 显示全部楼层
本帖最后由 SS15 于 2011-12-28 15:56 编辑

悲剧了,今天测试了一下Duinos对OneWire库的支持,因为Duinos文档里面说至今未实现对它的支持。一试,果然如此,调用OneWire库后程序就凌乱了...

要么加入到开发改进Duinos的行列中去、要么自己重新实现 OneWire,要么等别人的改进

开源的东西,最大问题还是在兼容性上。比较复杂一点的东西,用起来心里还是没底...         
回复 支持 反对

使用道具 举报

发表于 2011-12-28 13:06:22 | 显示全部楼层
在ourdev上看过一个RTOS,但8位机,还是忍了~~~有时序要求的操作,太难调了~
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 17:21:24 | 显示全部楼层
事件驱动做起来比较简单,这个问题倒不大。

问题是有的情况下还真是需要多线程,比方说辅助线程负责界面维护,主线程负责处理运算。

线程间的数据共享,即使放在MFC下面编程也是个麻烦事要小心对待。单片机的多线程尽量不要跟这个有瓜葛

Duinos 不知道是不是停止开发了,从去年去到现在就没有动静了。Duinos实际上已经把arduino的内核设计完全给替换成它自己的了,所以和arduino体系的库可能存在较多的兼容性问题。但是 Duinos的好处在于实现多线程非常简洁明了。

不甘心又去playground当中去翻,找到个 os_wrap,这个直到目前还一直在更新维护着。粗粗看了一下,它似乎是通过对现有arduino内核的封装来实现多任务、事件驱动、消息队列以及内存管理的。程序实现略显繁琐晦涩。功能似乎比Duinos强,但是消耗arduino系统资源比较厉害。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-28 22:04:54 | 显示全部楼层

用328的孩纸们悲剧了,os wrap 本身运行所需的RAM大概是 1.5 K,328有多少RAM呢?2048 byte。

作者也说了,等ARM核心的arduino出来就有足够的运行空间了...

原以为 Duinos 出生于 FreeRTOS 是系出名门,没想 os wrap 来头更大,先是DOS环境中对 VxWork 的封装,然后又导入到 Arduino 当中

源代码注释非常详细规范!
回复 支持 反对

使用道具 举报

发表于 2011-12-28 23:19:00 | 显示全部楼层
SS15 发表于 2011-12-28 22:04
用328的孩纸们悲剧了,os wrap 本身运行所需的RAM大概是 1.5 K,328有多少RAM呢?2048 byte。

作者也说 ...

328有2K,不是够了吗
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-29 00:24:18 | 显示全部楼层
回楼上的,OS wrap 本身用掉大约 1.5K,那么供你程序用的就只有500来byte了...
不过还好,它还有另外两个精简版本:OS wrap Min 和 OS wrap Mini,328没准可以用

-----------------------------------------------------------------------------------
2560上,OS wrap Min 加上 OneWire库,利用 DS018测量温度,多线程测试通过。
回复 支持 反对

使用道具 举报

发表于 2011-12-29 09:50:31 | 显示全部楼层
Duinos的代码我看了,是重写了Arduino的内核部分,库也是重新写的,所以要是有新的库,就得重新实现。
从这条路上来说,工作量太大,不现实,再加上它2010年就停止更新了……

OS_Wrap再去看看,按SS15的描述,我觉得它应该是最好的选择。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-29 10:58:49 | 显示全部楼层
额,悲剧了....

前面说错了,OS_Wrap 不是来源于 VxWork,而是为了将代码移植到dos或是VxWork上的一个封装。现在,OS_Wrap又来到了 Arduino上

但是,上面所说的不是悲剧,真正的悲剧是:OS_Wrap按照我的理解,并不是一个真正的RTOS,OS_Wrap开两个线程(task)、其中一个是具有阻塞性质,非常耗时的操作,结果:整个程序就挂掉了...粗略看了下OS_Wrap的实现,其多线程(它称之为task)的实现其实就是靠通过函数指针依次调用函数来实现的,这不是真正的多线程!

当然啦,如果对实时性的要求不严格,我觉得OS_Wrap还算是一个非常完善的程序框架,具备了很多诸如Windows系统中具有的特性,将会给程序总体框架设计带来很多方便,除了实时性!

Duinos的悲剧在于,它在实现它的时间片轮换机制时,应该是占用Atmel芯片中的Timer1(我没仔细研究),但是Timer1在Arduino体系当中的重要性是不言而喻的,这就造成了Duinos和N多Arduino库产生严重的冲突。甚至,Duinos在面对1280/2560这两种极其相近的芯片时也存在兼容性问题,因为它们的计时器位数是不一样的。

可能,将Duinos当中使用的Timer1换作其他定时器,可能可以解决兼容性问题,但只是可能而已。



回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-31 01:28:08 | 显示全部楼层
前天用了大半天时间看了看 OS_Wrap,看了它的消息、消息队列、优先级、多任务(task)、事件、定时器,信号量没看,反正一时半会用不上。总体感觉 OS_Wrap是一个简洁、轻量级、相对安全的应用程序框架。功能很强大,使用很简单。

但是,它本质上还是一个传统单线程应用程序框架。它只是在应用程序级别实现了“多任务”的封装,而不是在内核级别。这样做的好处是相对安全可靠,对Arduino软件体系的兼容性非常好。缺点是它不能实现真正意义上的多线程。

我觉得,如果只是需要实现清晰优美的程序总体结构,降低程序结构设计难度,那么 OS_Wrap是一个非常好的选择。但如果对真正意义上的多线程非常渴求,那么OS_Wrap是不适合的。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2011-12-31 01:36:45 | 显示全部楼层
难道如有的人所言,真正意思上的RTOS与Arduino就无缘了吗?我也一度如此认为。直到碰见了ChibiOS(http://www.chibios.org/dokuwiki/doku.php?id=start)

初步测试,在Arduino 2560下,ChibiOS建立两个线程,主线程点亮/熄灭LED,写串口;Idle线程实现各串口读写、OneWire总线读 DS018温度传感器、看门狗定时器、进入Idle休眠状态及唤醒、1602液晶显示、按钮读取等。

初步测试通过

相对轻量级的 OS_Wrap,ChibiOS恐怕可以用博大精深来形容了,目前我正在进一步研究中。

回复 支持 反对

使用道具 举报

发表于 2012-9-8 23:47:00 | 显示全部楼层
SS15 发表于 2011-12-31 01:36
难道如有的人所言,真正意思上的RTOS与Arduino就无缘了吗?我也一度如此认为。直到碰见了ChibiOS(http://ww ...

楼主能否写一写如何将该os移植至arduino的?进程堆栈的切换怎样实现的?
回复 支持 反对

使用道具 举报

发表于 2013-5-20 02:05:13 | 显示全部楼层
大顶楼主
正郁闷A板抢占式带优先级任务的设计问题
好好研究下
回复 支持 反对

使用道具 举报

发表于 2013-9-17 12:35:21 | 显示全部楼层
SS15 发表于 2011-12-31 01:36
难道如有的人所言,真正意思上的RTOS与Arduino就无缘了吗?我也一度如此认为。直到碰见了ChibiOS(http://ww ...

nil 就很不错了。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|联系我们|极客工坊

GMT+8, 2026-6-16 22:27 , Processed in 0.041453 second(s), 25 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表