Upload
ryos36
View
512
Download
3
Embed Size (px)
Citation preview
NiosII と RTOSについて
(有)シンビー
OS 比較
RTOS API ライセンス 提供元
Linux × pthread GPL N/A
ucLinux × pthread GPL N/A
RT‐Linux ○ pthread GPL N/A
TOPPERS ○ 独自 TOPPERS N/A
μC3 ○ iTRON 商用 イーフォース
NORTi ○ iTRON 商用 ミスポ
T‐Kernel ○ T‐Engine 商用 eSOL
eCos PRO ○ pthread LGPL eCos
FreeRTOS ○ 独自 例外条項付きGPL FreeRTOS
MicroC/OS‐II ○ 独自 商用 Micrium
QNX ○ 独自 商用 QNX
NiosIIの標準。すぐに使えるようにテンプレートが用意されている
RTOSの理解
• RTOSではタスクを有効に使う– RTOSのタスクはプライオリティを持っている
• タスクはコンテキストを保持することが可能– CPU を仮想化する技術
– CPU の使用率を上げることができる
–割り込みはコンテキストを保持できない• 割り込み処理では wait することができない
• タスクの優先順位と割り込みを理解→ RTOSの理解
RTOSのタスクの役割
高
IDLE
低
優先順位を管理
休眠中タスク
プライオリティをもって優先順位の管理を行う
ハードリアルタイム
• システムに課せられたある処理がデッドライン内に終了しなかった時(デッドラインミス)、システム全体にとって致命的ダメージが生じる
• デッドライン内での終了が保証されなければならないシステム。
Wikipedia より抜粋
ハードリアルタイム
• ロケットの制御
• レポート提出期限 12/26 17:00 –提出しなかったものは落第
デッドラインを過ぎると価値が0
ソフトリアルタイム
• デッドラインミスが起こっても、システム全体に致命的なダメージを与えることはなく、その処理自体の価値も、終了時間などにより徐々に落ちていく
Wikipedia より抜粋
ソフトリアルタイム
• 動画の再生
• レポート提出期限 12/26 17:00 – 1分遅れるごとに1点減点
デッドラインを過ぎると徐々に価値が下がる
ポーリング処理
while(true){wait(100);polling();処理()}
MEMSData
処理
Polling
処理
Polling
ポーリング処理(N G例)
while(true){wait(100);polling();処理()}
MEMSData
処理
Polling
処理
Polling
コンフリクト
取りこぼし
while (true) {
}
割り込みを使えばいいか?
処理()
MEMSData
処理
処理
割り込み発生後に
即座に他の処理をすることは難しい
別の処理
別の処理
割り込み
高
低
割り込み
割り込みの延長は?
MEMSData
他の割り込みの管理が難しくなる
別の処理
別の処理
割り込み+処理
割り込み+処理
タスクでコンテキストを保持/切り替え
高
IDLE
低
優先順位を管理
作業中タスク(1つだけ)
作業を中断している
作業を中断している
割り込みとRTOSで制御
MEMSData
タスク1タスクスイッチ
タスク2
割り込み
OS
TCP/IP
タスク1
タスク2
割り込み
OS
割り込み
TCP/IP
ACK等
多くのRTOSの設計
TCP/IP
高
APP
IDLE
低
ネットワークのタスク高い優先度
ユーザアプリケーションの優先度
RTOSアプリケーション設計上の注意
• プライオリティの設定
– RTOSの中には TCP/IP より高いプライオリティは設定できないものもある
• タスク設計
– タスク切り替えを考えると複数タスクに分割しないほうがよいケースもある
• 割り込みの管理
• 処理時間の見積もり
RTOSでも解決しない事
処理1 処理2 規定時間
各方式比較
アプリ実装 事象への反応 必要RAM TCP/IP との相性
ポーリング 易しい △ BRAM/外部RAM ○ 作り方によっては有力な候補になる
割り込み 難しい ◎ BRAM/外部RAM ○ 簡単なシステムでは採用
割り込み+優先順位 易しい △ BRAM/外部RAM ○ ポーリングと同じ
多重割り込み すごく難しい ◎ BRAM/外部RAM ○ 難しすぎるので通常は採用しない
RTOS 難しい ○ 外部RAM △ リアルタイムの性能を考慮しやすい。
NiosIIのメモリ構成例(1)0x0000 0000
8KBRAM
0x2000 0000
各種レジスタ
簡単なプログラムを置ける。FPGAの資源を使うため通常は 8K や 16K 程度。RTOSやTCP/IP のスタック
を置くことは難しいことが多い。
NiosIIのメモリ構成例(2)0x0000 0000
8KBRAM
0x2000 0000
各種レジスタ
SOFの後にプログラムを置くことができる。BRAM 等に展開する(Qsysが自動的に作る)
EPCS
NiosIIのメモリ構成例(3)0x0000 0000
512KFlash ROM
0x2000 0000
各種レジスタ
プログラムを置くことができる。不揮発性。アクセスは高速ではない
1MSRAM/SDRAM
0x1000 0000
プログラムやデータを置くことができる。揮発性のため電源を切ったら情報はなくなる。
NiosIIで uC/OS II を使う方法
• Qsysによるシステムの構築
• Eclipse のテンプレート
Qsysによるシステムの構築(例)
RTOSの為に Timer を追加。
RTOSの為にSDRAMを追加。
Eclipse のテンプレート
RTOSの雛形が標準でついている