用户工具

站点工具


ocrobot:kit:arduino_star_kit:tutorial028

差别

这里会显示出您选择的修订版和当前版本之间的差别。

到此差别页面的链接

两侧同时换到之前的修订记录前一修订版
ocrobot:kit:arduino_star_kit:tutorial028 [2017/10/04 08:06] 弘毅ocrobot:kit:arduino_star_kit:tutorial028 [2023/06/07 04:23] (当前版本) – 外部编辑 127.0.0.1
行 1: 行 1:
 +======多线程使用入门======
 +<WRAP center round info 100%>
 +这个例程展示了如何通过驱动六颗LED让其以不同的速度闪烁来简单学习一下NilRTOS的基本用法
 +</WRAP>
  
 +RTOS英文全称Real-Time Operating Systems,中文叫做实时操作系统。
 +NilRTOS就是这么一个可以运行在OCROBOT控制板中的简单的操作系统。
 +
 +在NilRTOS中,不能使用标准的delay(),这个会导致操作系统异常。需要使用nilThdSleepMilliseconds来替代delay(),这个需要切记。
 +
 +=====搭建电路=====
 +{{:ocrobot:kit:arduino_star_kit:2014-5-20_17-13-20.png?nolink|}}
 +=====代码=====
 +<code cpp>
 +#include <NilRTOS.h>
 + 
 +int LED_PIN[6] ={ 2,3,4,5,6,7 };
 +int Delay[6] ={ 100,550,900,2000,2800,1500 };
 +/*线程1*/
 +NIL_WORKING_AREA(waThread1, 64);
 +NIL_THREAD(Thread1, arg) {
 +  digitalWrite(LED_PIN[0], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[0], HIGH);
 +    nilThdSleepMilliseconds(Delay[0]);
 +    digitalWrite(LED_PIN[0], LOW);
 +    nilThdSleepMilliseconds(Delay[0]);
 +  }
 +}
 +/*线程2*/
 +NIL_WORKING_AREA(waThread2, 64);
 +NIL_THREAD(Thread2, arg) {
 +  digitalWrite(LED_PIN[1], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[1], HIGH);
 +    nilThdSleepMilliseconds(Delay[1]);
 +    digitalWrite(LED_PIN[1], LOW);
 +    nilThdSleepMilliseconds(Delay[1]);
 +  }
 +}
 +/*线程3*/
 +NIL_WORKING_AREA(waThread3, 64);
 +NIL_THREAD(Thread3, arg) {
 +  digitalWrite(LED_PIN[2], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[2], HIGH);
 +    nilThdSleepMilliseconds(Delay[2]);
 +    digitalWrite(LED_PIN[2], LOW);
 +    nilThdSleepMilliseconds(Delay[2]);
 +  }
 +}
 +/*线程4*/
 +NIL_WORKING_AREA(waThread4, 64);
 +NIL_THREAD(Thread4, arg) {
 +  digitalWrite(LED_PIN[3], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[3], HIGH);
 +    nilThdSleepMilliseconds(Delay[3]);
 +    digitalWrite(LED_PIN[3], LOW);
 +    nilThdSleepMilliseconds(Delay[3]);
 +  }
 +}
 +/*线程5*/
 +NIL_WORKING_AREA(waThread5, 64);
 +NIL_THREAD(Thread5, arg) {
 +  digitalWrite(LED_PIN[4], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[4], HIGH);
 +    nilThdSleepMilliseconds(Delay[4]);
 +    digitalWrite(LED_PIN[4], LOW);
 +    nilThdSleepMilliseconds(Delay[4]);
 +  }
 +}
 +/*线程6*/
 +NIL_WORKING_AREA(waThread6, 64);
 +NIL_THREAD(Thread6, arg) {
 +  digitalWrite(LED_PIN[5], LOW);
 +  while (TRUE) {
 +    digitalWrite(LED_PIN[5], HIGH);
 +    nilThdSleepMilliseconds(Delay[5]);
 +    digitalWrite(LED_PIN[5], LOW);
 +    nilThdSleepMilliseconds(Delay[5]);
 +  }
 +}
 +/*线程列表*/
 +NIL_THREADS_TABLE_BEGIN()
 +NIL_THREADS_TABLE_ENTRY("thread1", Thread1, NULL, waThread1, sizeof(waThread1))
 +NIL_THREADS_TABLE_ENTRY("thread2", Thread2, NULL, waThread2, sizeof(waThread2))
 +NIL_THREADS_TABLE_ENTRY("thread3", Thread3, NULL, waThread3, sizeof(waThread3))
 +NIL_THREADS_TABLE_ENTRY("thread4", Thread4, NULL, waThread4, sizeof(waThread4))
 +NIL_THREADS_TABLE_ENTRY("thread5", Thread5, NULL, waThread5, sizeof(waThread5))
 +NIL_THREADS_TABLE_ENTRY("thread6", Thread6, NULL, waThread6, sizeof(waThread6))
 +NIL_THREADS_TABLE_END()
 + 
 +void setup() {
 +  for( int i = 0;i< 6; i++ )
 +  {
 +    pinMode(LED_PIN[i],OUTPUT);
 +  }
 +  // Start Nil RTOS.
 +  nilSysBegin();
 +}
 + 
 +void loop() {
 +  // Not used.
 +}
 +
 +</code>
 +
 +{{youku>XNzE4ODM0ODcy?900x530}}
 +<WRAP center round download 100%>
 +=====下载=====
 +库:{{:ocrobot:kit:arduino_star_kit:nilrtos.zip|}}
 +</WRAP>
 +
 +
 +[[ocrobot:kit:arduino_star_kit:main|返回上一级]]

Valid HTML5 Valid CSS Driven by DokuWiki