Arduino多任务处理的可能性

时间:2014-12-21 23:50:53

标签: multiprocessing microcontroller android-wifi arduino-uno

我正在尝试用Arduino uno,传感器,LED和WiFi屏蔽做项目。我正在Arduino uno中对传感器数据进行模拟输入。如果传感器值超过阈值水平,基本程序会点亮LED。这个程序运行正常。现在,我希望借助WiFi shield将输入数据上传到Google电子表格。安装WiFi防护罩后,基本功能甚至无法执行。因此,我想知道Arduino微控制器是否支持同时访问两个硬件级组件?

2 个答案:

答案 0 :(得分:2)

https://arduino.stackexchange.com/a/288

  

Protothreads是非常轻量级的无堆栈线程   严重的内存受限系统,如小型嵌入式系统或   无线传感器网络节点。 Protothreads提供线性代码   在C语言中实现的事件驱动系统的执行.Protothreads可以   与或不与底层操作系统一起使用   阻止事件处理程序。 Protothreads提供顺序流动   控制没有复杂的状态机或完整的多线程。

来自protothreads网站的例子:

#include "pt.h"

struct pt pt;
struct timer timer;

PT_THREAD(example(struct pt *pt))
{
  PT_BEGIN(pt);

  while(1) {
    if(initiate_io()) {
      timer_start(&timer);
      PT_WAIT_UNTIL(pt,
         io_completed() ||
         timer_expired(&timer));
      read_data();
    }
  }
  PT_END(pt);
}

但是永远不会在任何高效代码中使用while(1),这会在某些时候锁定你的arduino - 而是创建一个合理的健全性检查并将其放入loopheader,甚至可能放一个IO检查那里你可以通过一个硬件按钮停止程序 - 这不仅是一个很酷的功能,而且还有一些人称之为"良好的编码"

答案 1 :(得分:1)

Arduino UNO微控制器(ATmega328)完全具备多任务处理能力,但这需要脱离Arduino"草图"传统上是结构化的。有许多可能的方法,例如事件驱动编程或甚至传统的抢占式实时内核(RTOS)。我建议看看事件驱动的编程。例如,在Arduino Playground上,你可以找到一个项目" Arduino的QP状态机框架" (见http://playground.arduino.cc/Code/QP)。其中,该项目引用了一个应用笔记:"事件驱动的Arduino编程"在http://www.state-machine.com/arduino/AN_Event-Driven_Arduino-1.5.x.pdf