Toppers-Contest2017
部門： がじぇるねIoT部門
作品のタイトル ：初心者向け、プログラムを同時に動かすとはチーム名：ひぐらし発表者の紹介
森脇 秀樹• 概歴 還暦を迎えた、78系が大好き
自称システムエンジニア
角田 米弘• 概歴 ARMがソフトバンクに買収されショックを受けているTK-80で育ったおじさん

概要
コンピュータは、プログラムを順次に、高速に、実行するように設計された道具ですが同時に違う動作のプログラムを動作させるためには、どのように考えればよいのでしょうか？

使用ボード GR-PARCH
GR-PARCHには、いろいろな機能が満載ですが今回は、SWとLEDを使用します。
SWと内部のカウンタ（タイマー）で、時間制御を行い各LEDを点滅します。
プログラムの中で使用する名前は自由に付けることができますが、次のように付けてありますので、これに従います。

接続機能端子 入力
UserSWはポート６の0に入力として接続されています。
押すと’0’が読めます。
（普段は’1’です）
プログラムの中では、 UserSW を PIN_SWと呼んでいます。

接続機能端子 出力
User ledは ポート６の12に出力として、RGB ledのそれぞれの色はR（赤）ポート６の13の出力としてG（緑）ポート６の14の出力としてB（青）ポート６の15の出力として接続されています。
’0’で消灯、’1’で点灯します。

接続機能端子 出力呼び名
プログラムの中では、User led を PIN_USER_LED
RGB ledの赤 を PIN_LED_RED
RGB ledの緑 を PIN_LED_GREEN
RGB ledの青 を PIN_LED_BLUEと呼んでいます。

サンプルプログラムsp1
がじぇるねページのアイテムのGR-PEACH下方に用意されている（ http://gadget.renesas.com/ja/product/peach.html ）、プログラム作成 特設ページ
Arduinoライクなスケッチ peach_sp1.html

http://gadget.renesas.com/ja/
スケッチを実行してください（スケッチの実行方法）がじぇるねホームページにて http://gadget.renesas.com/ja/

プログラム説明/* GR-PEACH Sketch Template V2.00 */#include <Arduino.h>#define INTERVAL 100
void setup(){
pinMode(PIN_LED_RED , OUTPUT);
pinMode(PIN_LED_GREEN ,OUTPUT);
pinMode(PIN_LED_BLUE , OUTPUT);
pinMode(PIN_LED_USER , OUTPUT);
pinMode(PIN_SW, INPUT);}

void loop(){
while(digitalRead(PIN_SW) == 0){
digitalWrite(PIN_LED_USER, 1);delay(INTERVAL);
digitalWrite(PIN_LED_USER, 0);delay(INTERVAL);}
digitalWrite(PIN_LED_RED, 1);delay(INTERVAL);
digitalWrite(PIN_LED_RED, 0);
digitalWrite(PIN_LED_GREEN, 1);delay(INTERVAL);
digitalWrite(PIN_LED_GREEN, 0);
digitalWrite(PIN_LED_BLUE, 1);delay(INTERVAL);
digitalWrite(PIN_LED_BLUE, 0);}①②プログラム変更
プログラムの作りを少し変更して、while を if にする
修正して、コンパイルして、実行してみてください。
よく動きを、観察してみてください。
点滅間隔が、息継ぎをしていませんか？

コーヒーブレイク？
コンピュータは、本来プログラムで記述されている命令を順番に、1つずつ実行する機械です。
順番に実行するのですから、多数の事を同時には行いません。
ただし命令実行速度が、高速な場合、外部から見ていると、同時に多数の処理をこなしているように見えます。

作り方
なにかないかなー
ありました！！！！

GR-PEACH用TOPPERS リアルタイムOS
テンプレート（Ver V1.03)
http://gadget.renesas.com/ja/product/peach_sp5.html

サンプルプログラム
RenesasWebCompilerのGR-PEACH用TOPPERS リアルタイムOS
テンプレート（Ver V1.03)を選んでマルチタスクなArduinoスケッチを参考にして動作させてみてください。

（スケッチの実行方法）
がじぇるねホームページにて http://gadget.renesas.com/ja/

プログラム修正#include <kernel.h>#include <t_syslog.h>#include <t_stdlib.h>#include "syssvc/serial.h"#include "syssvc/syslog.h"#include "kernel_cfg.h"#include "arduino_app.h"#include "arduino_main.h"void loop(){
while(digitalRead(PIN_SW) == 0){
digitalWrite(PIN_LED_USER, 1);delay(INTERVAL);
digitalWrite(PIN_LED_USER, 0);delay(INTERVAL);}}
void loop1(){
digitalWrite(PIN_LED_BLUE, 1);delay(INTERVAL_BLUE);
digitalWrite(PIN_LED_BLUE, 0);delay(INTERVAL_BLUE);
digitalWrite(PIN_LED_RED, 1);delay(INTERVAL_RED);
digitalWrite(PIN_LED_RED, 0);delay(INTERVAL_RED);
digitalWrite(PIN_LED_GREEN, 1);delay(INTERVAL_GREEN);
digitalWrite(PIN_LED_GREEN, 0);delay(INTERVAL_GREEN);/* GR-PEACH Sketch Template V1.00 */#include <Arduino.h>#define INTERVAL
100#define INTERVAL_RED 100#define INTERVAL_BLUE 150#define INTERVAL_GREEN 200}

void setup()void loop2(){{/*}
pinMode(PIN_LED_RED , OUTPUT);
pinMode(PIN_LED_GREEN , OUTPUT);
pinMode(PIN_LED_BLUE , OUTPUT);
pinMode(PIN_LED_USER , OUTPUT);
pinMode(PIN_SW, INPUT);
}

*/

/*
* Cyclic Handler** This handler is called every 10 [ms] as specified in* multitask_arduino.cfg.
*/
void cyclic_handler(intptr_t exinf) {irot_rdq(LOOP_PRI); /* change the running loop. */}まとめ
いかがでしたか、簡単に、同時に別々の動作を行わせるプログラム記述を行えたことでしょう
マルチタスクに興味がわいてきたら理論であるTOPPERSを学んでみてください御清聴ありがとうございます