PEARL621
リポジトリ
リポジトリ
概要
いわゆるRTOSの代表格であるuITRONは、たくさん機能があって、
プログラミング初学者で、独学で学んできた人でも
抵抗なく受け入れられるかは、疑問である。
少なくとも私はダメだった。触ってみて3ヶ月くらい理解できなかった。
通常で用意されている範囲で「こういうことを書いてください」という記事は
ITRON系だと検索してもなかなか出てこない(調べたことないからかも知れないが)。
そもそも、ITRONはベースシステムについては言及しているが、
「実際の製品については、各製品の仕様を見て実装してください」
といったスタイルなので、t-kernel以外は購入するまで分からないままとなる。
元々のシステムにITRONがあって、その実装を真似して書いて覚えることもあるが、
学生や独学で学んでいる方々には、そもそも「元々の実装」というのがなく、
一から自分で準備する必要がある。
そんな状態で実装するのは、あまりにも不安なので、
簡易的に作ったものをリリースしておいたので、
「ITRONのタスクって、そんなに難しくないじゃん。」
と思って戴ければ幸いです。
実装状況
本リポジトリには以下の実装が含まれております。
- タスク動作機能 (超簡易バージョン)
- OSカウンタ (割込関数と数えたりリセットしたりするだけ)
- チャタリングシステム (ちょっとしたツール)
要求知識
C言語の基礎を網羅してください。
「intが整数型の変数だな」「変数というのは値が移り変わるのだな」
「関数というのは処理を書くことが出来るのだな」
くらいの知識があれば、使う分には問題ありません。
本体解説
初期化処理について
まず最初に、OSを使用する前に、OSの管理モジュールを初期化してください。
初期化関数は「pearl621_init」関数を実行すると実行されます。
int main(void)
{
//ドライバ初期化(必要であれば)
//OS初期化
pearl621_init();
//OSメイン処理
tskMainLoop();
return 0;
}
以上の初期化処理は、タスク以外でも共通です。
動作概要(タスク処理)
タスクの登録
タスクの登録は、タスクそのものの情報を
createTaskで、
タスクの関数の情報を
setTaskFuncで設定します。
OS内では作成されたタスクの状態を管理しています。
OS内の処理
タスクの処理は、OSメインの処理内で行われます。
大まかな流れとしては、以下のように、
スリープ状態のタスクから、そのタスクの次の関数の起動条件を満たしているかどうか確認を行い、
起動可能状態に遷移し、起動可能状態のタスクを起動待ち配列に格納することで、
タスクの起動待ち配列を作成し、起動待ち配列の先頭から、タスクを起動します。