狠狠撸

狠狠撸Share a Scribd company logo
TOPPERS/SSP を用いた教育訓練カ
リキュラムカーネルの自作およびカ
スタマイズ
アライブビジョンソフトウェア株式会社
高橋和浩
https://www.facebook.com/firstandlastandallways
TOPPERS プロジェクト 特別会員(個人)
? アイデアアプリケーションコンテスト
? アイデア部門 入賞
バックグランド(それまでの経緯)
? ルネサスエレクトロニクスの
RTOS(μITRON カーネル ) のおよそ 8 年
ほど受託開発。  M32C M16C R32C RX
など
? ポリテクセンター兵庫にて、在職者向け
コース( μITRON) を担当 (H24 より実
施)
動機
? ITRON を使うセミナから作るセミナにし
たい
? 受講生からの要望
? オープンソースの OS を使う以上、中身の
理解の必要性
? 入り口として、もっとも手軽なもの 最少
セットカーネル
? Linux のカーネルに読破にくじけた人にも
? OS 自作本などのニーズ
μITRON (RTOS)の講習会
? ポリテクセンター兵庫(武庫之荘)で実施
  ? μITRON 基本
  ? μITRON ネットワーク
  ?新講習 RTOS自作とカスタマイズ(本
年1月実施)
 いずれも土曜日 3 日間
? H27 年度ももちろんあります
RTOS 自作講習会の概要
? 標準 ITRON ガイドブック(作り方の章)
  特に専門用語の解説をしっかり
? TOPPERS/SSP( オープンソース μITRON) を
ベース(シュリンク版というものを利用)
? ボードで実際に演習を交えて実施(雑誌付録ボー
ド RX62n)+E1 デバッガ
? ソースコードをステップベースで解説していきま
す。
   (SSP は省ステップなので可能)
? SSP 本来の機能からカーネル機能拡張(待ち状態
を追加)作業を演習実施。 dly_tsk を実装してい
きます。
講習のサンプル
? ソースコード解説の例
? カーネル拡張の例
カーネルコード解説
? sta_ker() から始まる。
? マルチタスクになる前段
階の処理
? ブート一回目だけの処理
としてカーネルオブジェ
クトの生成がある。
? SSP はカーネルオブジェ
クトといってもタスクの
み
? TCB の初期設定をする。
? 最後にディスパッチャを
呼ぶ
void
sta_ker(void)
{
initialize_object();
kerflg = true;
intnest = 0;
dispatcher();
}
カーネルコード解説 2
? ディスパッチャ部分
? これは、途中で待ちになら
ない SSP 特有のディスパ
ッチ処理。
? 優先度の高いタスクにプリ
エンプトはするが、待ち状
態にはならないから、タス
クの高いタスクが終了して
から低いタスクの起動はこ
ういう単純な呼び出しでよ
い。
? さらに SSP はスタック共
有型なのでスタックを切り
替える必要はない。
カーネルコード解説 3
? スケジューラは、今の
レディーキューから、
次にディスパッチする
タスクを選ぶ処理。
? レディーキューの構造
に依存するが、 SSP は
単純なビットマップの
み
uint_t
search_schedtsk(void)
{
return primap_search();
}
カーネルコード解説 4
ER
act_tsk(ID tskid)
{
ER ercd;
uint_t tskpri;
LOG_ACT_TSK_ENTER(tskid);
CHECK_TSKCTX_UNL();
CHECK_TSKID_SELF(tskid);
tskpri = get_ipri_self(tskid);
t_lock_cpu();
if (test_dormant(tskpri)) {
if(make_active(tskpri)) {
run_task(tskpri);
}
ercd = E_OK;
}
else {
ercd = E_QOVR;
}
t_unlock_cpu();
error_exit:
LOG_ACT_TSK_LEAVE(ercd);
return(ercd);
}
カーネルコード解説 5
? 最後は、ユーザーからの OS 呼び出しである。
? タスクの起動で、基本はまずレディーキューに指
定したタスクの TCB をキューイングする
? カーネルの最後(遅延ディスパッチで)今の最優
先タスクを動かす。
? SSP は単純にサブルーチンコールしかしていない
ので、
? タスクは常に頭から動くが、プリエンプトされて
復帰するケースは
? 自タスクよりも高いタスクを起動した場合。
? 起動されたタスクが終了した時点で、タスク起動
後に戻ればいいのでサブルーチンコールするのと
同じ作りで実現している
タスクスイッチの例 ( 追加ペー
ジ)
? タスク 2 が RUN 中に、 act_tsk() でタス
ク 1 を起動
? タスク 1 が優先度が高い場合
? タスク 1 がサブルーチンコールされる動き
タスク2 中断
実行
タスク1
時間
act_tsk(task1)
呼び出し
? 移植対応部 アセンブリ言語
割込み時のタスクスイッチの例(追加ペ
ージ)
? Task2 が RUN 中に割り込みが発生
? 割込みハンドラで iact_tsk(task1) を呼び
出
? Task1 が優先度高い
0 1 2 3 4 5
割り込み処理
Task2
割り込み発生
Task1
時間
Copyright (C) Reserved 2010 Embedded Systems Co.,
割り込み発生 iact_tsk(task1)
Running
Ready
Dormant
カーネル (RTOS) 仕様
シュリンク版
? SourceForge に公開
? http://sourceforge.jp/projects/shrink-sp-rx62n/
? 本物との違い
? 割込みベクターの登録およびスタートアップの削
除 ? OS なし環境を流用
? なぜ作ったか?
? SSP カーネルの簡潔な処理に比較して割り込みベ
クタ関係の処理の難度が高く、コード量も多い。
カーネルを学ぶために必要な部分だけ残した。そ
れで動くことが必要と考えた
TOPPERS/SSP のカスタマイズ フル改造編
? (1)待ち状態を持つカーネルの設計
? (2)実装
?   イ.コンテキストの保存と復元
?   ロ.サービスコール部の作成
? (3) dly_tsk の追加
?   イ.実装に必要な項目の整理
?   ロ.指定時間待ちの実装 (dly_tsk)
? (4)評価?改善
?   イ.制作したカーネルを用いる際の問題点の把握
?   ロ.問題点の改善
(1)待ち状態を持つカーネルの設計
? 待ちを持つということは
? タスクが  run --> wait --> dormant
?     wait --> ready
? 中断したところから再開しなければならな
い。
コンテキストの保存と復元
? 1. コンテキストの保存エリアを検討する。
? 2. コンテキストからタスクが復帰する仕組
みでのタスク起動部を実装する
? 3. タスクスイッチする場合にコンテキスト
の保存と復帰をします。
? タスクがスイッチするときにコンテキスト
を保存 / 復帰するように実装する。
longjmp/setjmp の利用
? コンテキストの保存領域を渡して call すれば、そ
こに保存される。
? 割込みには対応できないので工夫が必要
? シュリンク版の移植性を考慮して C でできるだけ
実装
longjmp/setjmp の限界
? RTOS のコンテキスト保存
は、 longjmp/setjmp だけでは、すべて
の場合に対応できません。
? 少なくとも戻り値が、 R1 レジスタが保存
されないことがある。
? 割り込みには対応できない
? 割り込み部でレジスタ保存 / 復帰を補完す
る必要がある。
Longjmp/setjmp の考え方
? Setjmp はコンパイラが把握
   OS 呼び出しの場合は、 setjmp を使い、これ
はコンパイラが把握できる。 Setjmp から戻る場
合は、レジスタ一式が復帰して jmp してくるが
保存を必要としない一部のレジスタを壊しても続
行できる。
? 割込みはコンパイラが把握できない
  割り込みの場合はコンパイラが把握していない
ため、どこでどのレジスタを壊していいというこ
とがなくなる。
今後の展開
? ポリテクセミナーの内容(プラットフォー
ム)の見直し
? SSP シュリンク版の拡张
セミナのプラットフォーム
シュリンク版のこれから
? ハード依存部が少ないことから移植がしや
すいはず
  ? raspberry pi に移植しました
     (baremetal 環境)
http://www.slideshare.net/alvstakahash
i/raspberry-pi-toppers-ssp
シュリンク版の展望
ありがとうございました
? ポリテクセンター兵庫 在職者研修
http://www3.jeed.or.jp/hyogo/poly/contents/holding/index.html
正式名称
独立行政法人高齢?障害?求職者雇用支援機構
兵庫職業訓練支援センター
兵庫職業能力開発促進センター
? アライブビジョンソフトウエア株式会社
http://homepage3.nifty.com/ALVS/
? Facebook
https://www.facebook.com/firstandlastandallways
ありがとうございました

More Related Content

Viewers also liked (10)

PPT
骋7プレゼン谤迟辞蝉自作
Kazuhiro Takahashi
?
PPT
Gr sakuraでtinet
Kazuhiro Takahashi
?
PPT
骋7プレゼン谤迟辞蝉自作
Kazuhiro Takahashi
?
PPT
リアルタイム翱蝉のカスタマイズ
Kazuhiro Takahashi
?
PDF
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Kazuhiro Takahashi
?
PDF
尘谤耻产测翱厂チラシ
Kazuhiro Takahashi
?
PPT
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Kazuhiro Takahashi
?
PPT
Rx hew-シミュレータで動かすー説明書
Kazuhiro Takahashi
?
PPT
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Kazuhiro Takahashi
?
PPT
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Kazuhiro Takahashi
?
骋7プレゼン谤迟辞蝉自作
Kazuhiro Takahashi
?
Gr sakuraでtinet
Kazuhiro Takahashi
?
骋7プレゼン谤迟辞蝉自作
Kazuhiro Takahashi
?
リアルタイム翱蝉のカスタマイズ
Kazuhiro Takahashi
?
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Kazuhiro Takahashi
?
尘谤耻产测翱厂チラシ
Kazuhiro Takahashi
?
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Kazuhiro Takahashi
?
Rx hew-シミュレータで動かすー説明書
Kazuhiro Takahashi
?
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Kazuhiro Takahashi
?
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Kazuhiro Takahashi
?

TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋