PEARL621

リポジトリ

リポジトリ

概要

いわゆるRTOSの代表格であるuITRONは、たくさん機能があって、
プログラミング初学者で、独学で学んできた人でも
抵抗なく受け入れられるかは、疑問である。
少なくとも私はダメだった。触ってみて3ヶ月くらい理解できなかった。

通常で用意されている範囲で「こういうことを書いてください」という記事は
ITRON系だと検索してもなかなか出てこない(調べたことないからかも知れないが)。
そもそも、ITRONはベースシステムについては言及しているが、
「実際の製品については、各製品の仕様を見て実装してください」
といったスタイルなので、t-kernel以外は購入するまで分からないままとなる。

元々のシステムにITRONがあって、その実装を真似して書いて覚えることもあるが、
学生や独学で学んでいる方々には、そもそも「元々の実装」というのがなく、
一から自分で準備する必要がある。

そんな状態で実装するのは、あまりにも不安なので、
簡易的に作ったものをリリースしておいたので、
「ITRONのタスクって、そんなに難しくないじゃん。」
と思って戴ければ幸いです。

実装状況

本リポジトリには以下の実装が含まれております。

要求知識

C言語の基礎を網羅してください。
「intが整数型の変数だな」「変数というのは値が移り変わるのだな」
「関数というのは処理を書くことが出来るのだな」
くらいの知識があれば、使う分には問題ありません。

本体解説

初期化処理について

まず最初に、OSを使用する前に、OSの管理モジュールを初期化してください。
初期化関数は「pearl621_init」関数を実行すると実行されます。
int main(void)
{
  //ドライバ初期化(必要であれば)

  //OS初期化
  pearl621_init();

  //OSメイン処理
  tskMainLoop();

  return 0;
}
以上の初期化処理は、タスク以外でも共通です。

動作概要(タスク処理)

タスクの登録

タスクの登録は、タスクそのものの情報をcreateTaskで、
タスクの関数の情報をsetTaskFuncで設定します。
OS内では作成されたタスクの状態を管理しています。


OS内の処理

タスクの処理は、OSメインの処理内で行われます。
大まかな流れとしては、以下のように、
スリープ状態のタスクから、そのタスクの次の関数の起動条件を満たしているかどうか確認を行い、
起動可能状態に遷移し、起動可能状態のタスクを起動待ち配列に格納することで、
タスクの起動待ち配列を作成し、起動待ち配列の先頭から、タスクを起動します。