あなたの天然記念物
ホーム更新雑談Perl鉄ゲタランドナーコースガイド自転車Linuxリンク経歴連絡先

たこルカ12人でΩ_てしっ (2013.08.26)

背景

液晶モジュールが3台になったので並行表示させたい

結果

タスク間の連絡にシグナル

12個のタスクが液晶モジュールのドライバと連絡を取るのにシグナルを使いました。 このシグナル、Cライブラリによくある奴じゃありません。AmigaOSの奴です。 これ↓
AmigaOS - Wikipedia
1タスクが32種類のシグナル待ちができるようにしました。 全部でタスク数×32種類の待ちとなります。 簡単に図解するとこんな感じ。 シグナルの概要

タスク構成

簡単に図解するとこんな感じ。 タスクの構成

タスク削除のルール

FreeRTOSではいきなり削除するけれど、タスクが確保したリソースの解放タイミングを調整できなかったので、 他のタスクから削除要求が来たら、当該タスクに削除要求シグナルを出してタスク自身で終了処理をした後に終了してもらうことにしました。 AmigaOSのコンソール用アプリケーションに対してCTRL+Cを入力するとシグナルを発行してアプリケーション自身が終了処理できます。 これをパクりました(笑)。

今回の鉄ゲタは…

ペリフェラルのドライバもシグナルを使っていて、タスク生成/削除のタイミングとシグナルの作成/削除を同期させるのが超面倒。
FreeRTOSのタスク削除APIは「削除を予約、その後アイドルしたら削除」なので削除APIから戻ってきても削除されていないorz
まあ、どうせ話が通じないと思うので、あとはソース見てください(^^;
yrntrlmnmnt20130826.zip (335,912 バイトをVPSから 00:05 で)