JavaScript, Arduino, OS, リアルタイムOS
その他
このページではArduinoをもちいた電子回路,プログラムなどに関する情報を扱います.
ここでは, OSをArduinoIDE上で使用できるようにします.
するべきことは, コアフォルダの追加とボードの追加です.
ここでは, 今回のOS製作で新しく作られるファイルの説明を行います.
OSを作成するにあたっての準備を行います.
OSを作成するにあたって, まずこのOSの使い方を説明します. (まず, 使い方を説明することでOS完成のイメージをつかむことができます.)
RTOSは, 組み込み系のシステムで用いられることが多いです.
一般OSと同様にタスクの切り替えを行う点は同じですが, タスクの切り替え規則に特色があります[1]. タスクの実行可能状態になるまでの時間の最悪値が保証されるように作られています.
ここでは, Canvasの基本的な使い方を説明します. 説明内容は以下のとおりです.
- ファイルの配置
- キャンバスの開始
- 点を打つ
- 文字を書く
- 画像を描く
- 最後に
このキャンバスの特徴は大きく分けて4つあります.
- 応用しやすい関数セット
- 白紙のキャンバスに文字、画像、直線などを描くような操作
- 高い移植性
- 高い描画効率
MelodyPlayerの導入方法を説明します. 説明項目は以下のとおりです.
- ダウンロード
- ファイルの説明
- インクルード
- ピン接続
Arduinoにプログラムを書き込むにはパソコンが必要です. パソコンでプログラムを書きArduinoをパソコンに接続し、スケッチをマイコンボードに書き込みます. 別のプログラムを実行したいとき、またパソコンに接続してスケッチを書き込みます。これは大変労力かかると同時にパソコンなしではプログラムの変更は不可能です.
このページでは、それを解決する一つの方法を提案します。それは, Arduinoが別のArduinoへスケッチを書き込むということです. 詳しく言うと, スケッチをコンパイルした後に作成されるHexFileをSDカードに保存し, そのHexFileをある一つのArduinoが読み込み別のArduinoへスケッチを書き込むということです.
このページで紹介する方法で以下のことができます。
- ArduinoでArduinoにスケッチ書き込み
- 他機能の組み合わせで応用可能
"他機能の組み合わせで応用可能"の例ですが, ある端末を作ったとします。その端末にはグラフィック液晶ディスプレイ、コントローラーが付いています。使用者にグラフィック液晶でスケッチの選択をさせることで、一つの端末で複数のプログラムを実行することができます; パソコンでいちいちスケッチを書き込む必要はありません。
ただし、以下の環境が必要です。
スケッチを書き込まれるArduinoにはブートローダー"optiboot"がかきこまれていること
optibootがかきこまれているArduinoは"Arduino UNO"です。このサイトでもこれを使用しています。
スケッチを書き込むArduinoは16MHzで動作していること
optibootとの通信には115200bpsのシリアル通信が用いられています。8MHzなどの低周波数で動作するArduinoではこの通信がうまくいきません。
Arduinoを用いた電子工作でよく使うものの一つにスイッチがあります. 一つか二つのスイッチを使うのなら問題はないのですが、大量のスイッチを用いた電子工作となるとスイッチ一つに一つのピンを消費するわけにはいかなくなります.
例えば、ちょっとしたゲーム機を作るとしましょう. 十字キー、ABボタンなどで少なくとも6つぐらいのスイッチが必要となります. またグラフィック液晶との接続に13ピンほど使います.ピンが足りません.一つのピンで複数のスイッチ入力を読み取る必要があります.
また別の問題として仮に上の問題を解決―例えば抵抗による分圧方法によって解決―したとしても同時入力ができない問題があります. ゲーム機を作るとしてボタンの同時入力ができないのはかなり大きな問題でしょう.
このページではこれらの問題を解決する一つの方法を説明します。
このページで紹介する方法で以下のことができます。
- 一ピンあたりボタン六個の入力が可能
- 同時入力も可能
ここでは, MelodyPlayerの基本的な使い方を説明します. 説明項目は以下のとおりです.
- 再生
- メロディーの追加方法
ここでは, OSの機能とArduino標準機能と融合していきます. 融合するものとしては, Arduino言語―setup(), loop()―, Arduino標準関数に影響するタイマー割り込み部分です.
OSは日常のあらゆる場所で目にします. パソコンには必ずと言っていいほどOSが走っており, 携帯, ゲーム機などにもOSが走っております. このような普段よく使うOSですが, そのOSの仕組みを分かっていても, 実際どのように作るのかはよく知られておらず気になります.
このページでは, 実際にArduinoで動くOSを作成することで, OSの理解を深めます. 使用するプログラミング言語はC言語です. (作成といいましても, すでに在りますFreeRTOSから必要な機能を抜き出し, Arduinoで動くようにしました.) なお, 今回扱うOSは汎用OSではなくリアルタイムOS(RTOS)と呼ばれるものです. 汎用OSとは, すべてのタスクに等しく優先度が与えられますが, RTOSではタスクごとに優先度を設定できます.
話の進め方ですが, 今回のOS製作では実装に重きを置くため, コードを中心に話を進めていきます. 各コードごとに簡単な説明を行い, その中で特に重要な部分―OSの仕組みに深くかかわる部分―もしくはさらに詳しい説明については別ページで行います. これら別ページ―詳細ページ―は子コンテンツである"仕組み"にまとめられています.
話の流れは次のとおりです.
- RTOSとは
- 目標と使い方
- 準備
- ファイル構成
- スクリプト
- ボードの設定
- 仕組み
対応状況
- Arduino UNO
- Arduino Mega
動作確認済み環境
- Arduino IDE 1.8.10
- Arduino AVR Boards 1.8.1
ここでは, OSには必ずなくてはいけない機能の一つであるタスク管理について説明します.
タスク管理には非常に多くのことが関わっているため以下のように分けていきます.
- タスクコントロールブロック(TCB)
- メモリの構造
- 状態リスト
- コンテクスト
- システム割り込み
TerminalPro4の特徴としては以下があげられます.
- ゲーム機として成り立つ必要最低限の機能
- 迅速なアプリケーション切り替え
- 簡単なソフトウェア開発
Begin | SketchWriterの開始 |
---|---|
End | SketchWriterの終了 |
SetReaetPin | リセット信号を出すピンの設定 |
ResetArduino | Arduinoにリセットをかける |
GetCh | optibootからシリアルデータを受け取る |
Wait | optibootからの処理完了信号-STK_OK-待機 |
GetInSync | optibootからのSTK_INSYNK信号待機 |
VerifySpace | コマンド有効化 |
AppStart | プログラムの開始 |
GetSync | optibootと同期をとる |
GetParameter | optibootからOPTIBOOT_MAJVERまたはOPTIBOOT_MINVERを取得 |
SetAddress | メモリのオフセット値を送信 |
SendData | データの送信 |
SketchWrite | スケッチの書き込み |
SerialClear | シリアルデータ削除 |
SetFileName | 文字列’sketchName’にファイル名を代入 |
SketchLoad | スケッチ-HexFile-の読み込み |
SketchReload | スケッチ-HexFile-の再読み込み |
SketchClose | スケッチ-HexFile-を閉じる |
ReadHexVal | HexFileから1Byteの数値を読み込む |
ReadHexData | HexData読み込み, 配列’hexData’に格納 |
hexData[hexDataBufSize] | 読み込んだHexData |
---|---|
fileEnded | HexFile読み取り位置状態 |
sketchName | ロードしたHexFile名 |
sendDataSize | 一回でoptibootに送るデータサイズ |
hexDataBufSize | 配列’hexData’のサイズ |
ここでは, SketchWriterの基本的な使い方を説明します. 説明項目は以下のとおりです.
- SketchWriterのしくみ
- HexFileの入手
- スケッチの送信
SketchWriterの導入方法を説明します. 説明項目は以下のとおりです.
- ダウンロード
- ファイルの説明
- SDカード、操作したいArduinoと接続
- インクルード, SketchWriterを開始
GLCDControllerの基本的な使い方を説明します. 説明項目は以下のとおりです.
- GLCDControllerのしくみ
- ピン設定とGLCDControllerの開始
- 文字の表示
- 画像の表示
ここでは, GLCDControllerの導入方法を説明します. 説明項目は以下のとおりです.
- ダウンロード
- ファイルの説明
- インクルード