HOSのビルド環境の構築 [HOS]
詳細は一番下の本を読んでもらいたいのですが、HOSはGUIを使用したコンフィギュレーションツールを持たないので(あれは別にそんなに便利なものでもない)、コンフィギュレーションをHEWの一連のビルド手順に組み込む方法を書きます。
HEWのファイルメニューの「ビルド(B)」→「ビルドフェーズ(P)」で進むと、ビルド手順の編集が行える画面が出ますので、「追加(A)」で単一ビルドフェーズを最初の絵の様に作成します。
コマンドは”cpp32.exe”となっていますが、これはコンフィギュレータの構築時にダウンロードしたBCC55を使用していると想定しています。BCC55を使用していない場合、他のコンパイラでプリプロセスのみを行うオプションスイッチを調べておいて下さい。
2番目の絵では上で作成したビルドフェーズの名前を”PreConfigure”として保存し、「ビルド(B)」→「PreConfigure」のオプションスイッチを含む引数を入力したものです。
ここまでの処理は、コンフィギュレーション情報ファイルである”system.cfg”をプリプロセッサでフィルターしたり、文字列の置き換えを行う為のものです。
上でフィルター処理後のファイル”system.i”をコンフィギュレータに入力して”kernel_cfg.c”と”kernel_id.h”を生成します。
この為の新しいビルドフェーズを”PreConfigure”と同じ手順で作成します。名前を”Configure”とします。
3番目の絵が設定内容で、”config”ディレクトリに入っているコンフィギュレータを起動しています。
4番目の絵がコンフィギュレータの引数となります。
ビルド手順の並び替えを行います。最後の絵の様に「上へ(U)」、または「下へ(D)」を使って、
「PreConfigure」
「Configure」
以下SHCの通常の手順。
に並び替えを行ってください。
※とまあ、みんなで同じ苦労をする事も無いので、ここにhos-v4のワークスペースを置いておきますね。
HEWから開いてみてください。
※考えてみれば、全然T-SH2MBに限った話ではありませんね。実際はHOSをHEW上で開発する時の環境構築の一部です。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
デバックモニタ上で動かすサンプルアプリケーションの作成 [HOS]
※デバックモニタ上で動かす事を前提にアプリケーションを作成しますので、幾つか手抜きのところが有ります。このままではROM上での動作はできません。
まずはコンフィギュレーション情報ファイル"system.cfg"の編集です。
/* HOS 独自の設定 */
HOS_IDL_STK(256,NULL); /*IDEL時のスタック領域*/
HOS_INT_SP(0); /*割込み時のスタックの初期値*/
HOS_MAX_TPRI(8); /* 最大優先度(省略時 16) */
/*HOS_KERNEL_HEAP(8192);*/ /* カーネルヒープの設定(省略時 0):動的になんかを生成する時、このオプションを有効 */
HOS_TIM_TIC(1,1); /* タイムティックの設定(省略時 1/1 ) */
HOS_MIN_INTNO(64); /* 割り込み番号の最小値(省略時 0) */
HOS_MAX_INTNO(192); /* 割り込み番号の最大値(省略時 0) */
/*HOS_MAX_MBXID(16);*/ /* メールボックスの最大値(省略時 0):静的に生成する二つと、動的に生成する分 */
/*HOS_MAX_TSKID(16);*/ /* 最大タスクID番号(省略時静的生成に必要なだけ) */
/*HOS_MAX_CYCID(4);*/ /*周期ハンドラの最大値*/
/*HOS_MAX_SEMID(8);*/ /*セマの最大数、省略時は必要なだけ*/
/*HOS_MAX_FLGID(4);*/ /*フラグの最大数、省略時は必要なだけ*/
/*HOS_MAX_DTQID(4);*/ /*データーキューの最大数、省略時は必要なだけ*/
/*HOS_MAX_MBFID(4);*/ /*メッセージバッファの最大数、省略時は必要なだけ*/
/* インクルードファイルの指定 */
INCLUDE("\"sample01.h\"");
/* 初期化ルーチンの追加 */
ATT_INI({TA_HLNG, 0, CMT0_Init});
ATT_INI({TA_HLNG, 0, Initialize});
/* 割り込みハンドラ */
ATT_ISR({TA_HLNG, 0, 144, CMT0_Int}); /**/
/* タスク */
CRE_TSK(TID_TSK1, {TA_HLNG | TA_ACT, 1, tasks, 1, 1024,NULL}); /**/
CRE_TSK(TID_TSK2, {TA_HLNG | TA_ACT, 2, tasks, 1, 1024,NULL}); /**/
CRE_TSK(TID_TSK3, {TA_HLNG | TA_ACT, 3, tasks, 1, 1024,NULL}); /**/
CRE_TSK(TID_TSK4, {TA_HLNG | TA_ACT, 4, tasks, 1, 1024,NULL}); /**/
/* セマフォ */
CRE_SEM(SEMID_SCI1, {TA_TFIFO, 1, 1}); /*SCI1の競合を避ける*/
コメントアウトされた所は、一番最初のビルド手順の「PreConfigure」で削除されます。
幾つかポイントが有りますが、
1.システムタイマーの更新は1msである。
2.割込み要因としてCMT0割込みのみ発生する。これはシステムタイマーの更新に使います。
3.4つのタスクを生成する。しかし起動関数は全て同じである。
4.一つのセマフォを生成する。バイナリセマフォとして利用します。
ソースコードは以下の様になります。
#include <machine.h>
#include <ctype.h>
#include "iodefine.h"
#include "itron.h"
#include "kernel.h"
#include "kernel_id.h"
#include "sample01.h"
#if 0
#include <stdio.h>
#else
#define printf ((int (*)(const char *,...))0x000057e0)
#endif
/*************************************************************************/
/* 各種定義 */
/*************************************************************************/
#define __CPU_CLOCK__ 50000000UL
#define __PERIPHERAL_CLOCK__ 25000000UL
/* タイマー周期定義 */
#define TIM_1ms (((__PERIPHERAL_CLOCK__ / 8) / 1000) - 1)
/* SCI通信速度定義 */
#define SCI_38400 ((((((__PERIPHERAL_CLOCK__ * 2) / 32) / 38400) + 1) / 2) - 1)
/*************************************************************************/
/* バスの初期化関数 */
/*************************************************************************/
void BusInit( void )
{
}
/*************************************************************************/
/* メイン関数 */
/*************************************************************************/
int main()
{
/* HOS-V4 の開始 */
sta_hos();
return 0;
}
/*************************************************************************/
/* 初期化処理関数 */
/*************************************************************************/
void Initialize(VP_INT exinf)
{
}
/*************************************************************************/
/* タスクサンプルプログラム */
/*************************************************************************/
void tasks( VP_INT tid )
{
SYSTIM present_time;
while( 1 )
{
get_tim( &present_time );
wai_sem( SEMID_SCI1 );
printf( "Task ID =%d SYSTEM TIMER = %u\n",
tid, present_time.ltime );
sig_sem( SEMID_SCI1 );
dly_tsk( 1000 );
}
}
/********************************************************************/
/* システムタイマー初期化処理 */
/* 周期は1msとしておく */
/********************************************************************/
void CMT0_Init( void )
{
/*モジュールスタンバイの解除を行う*/
MST.CR2.BIT._CMT = 0;
/* タイマ初期化 */
CMT0.CMCSR.WORD = 0x0040;
CMT0.CMCOR = TIM_1ms;
CMT.CMSTR.WORD = 0x0001;
INTC.IPRG.BIT._CMT0 = 2; /*優先度設定*/
}
/********************************************************************/
/* システムタイマー */
/********************************************************************/
void CMT0_Int( VP_INT exinf ) /* OSタイマ用ハンドラ */
{
CMT0.CMCSR.BIT.CMF = 0;
isig_tim(); /* タイムティックの供給 */
}
※ハードウエアの設定はCMT0のみしか行っていませんが、本当はバスの初期化やSCIの初期化等、当然必要となってきます。
※HEWのウイザードを使用してアプリケーションを作成していきますが、途中で作成するか聞いてくるベクターファイルやHEAP領域は必要有りません。
Cランタイムルーチンやベクターテーブルはこちらで用意したものを使います。
※サービスコールの詳細は、下記のリンクの本か、μITRON4.0仕様書を参照して下さい。
次回はビルドフェーズの追加です。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
忘れていた!、pacint.srcの7145への適応 [HOS]
えーITRONの様なハードウエアに強く依存するOSの場合、使用するCPU毎に依存処理を書かなければならないのです。
いまのHOSの開発は、SH2/7045F辺りの世代の古いSH2の状況を元に開発されている為、7145の様にその後に世に出たマイコンを使用する場合は、例えば今回の様に割込みベクターの変更が必要となる事がしばしば発生します。
具体的には、SH2/7145Fとなって割込みベクターが大幅に増えており、さらに今回は使用していませんがSH2/7125Fはもっと増えております。
説明すると長いので、右のリンクの「Interface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョン」のpacint.srcを使ってカーネルの再ビルドを行って下さい。
また、以下のリンクも参考になります。
http://blog.so-net.ne.jp/hamayan/2006-11-27
HOS-V4コンフィギュレータの生成 [HOS]
詳しい解説は行いませんが、HOS(に限らずITRON仕様OS)では、ユーザーアプリケーションのビルドの前処理としてコンフィギュレーションを行います。
今回はコンフィギュレーションを行うコンフィギュレータの生成の解説です。
さて、HOSが提供しているコンフィギュレータは、実行環境に依存しない為にソースコードで提供されています。このコンフィギュレータは開発環境上で動作するので(つまりターゲット上ではない)、例えば開発環境としてWindowsを選ぶなら、Windows上で動くプログラムを作れるコンパイラを予め用意する必要が有ります。
すでにC、C++言語でWindowsアプリケーションを作れるツールをお持ちでしたら、そのツールを使ってHOS-V4プロジェクトを展開すると出てくるconfigディレクトリ以下のソースコードをコンパイルして下さい。
もしそう言ったコンパイラをお持ちでなければ、ボーランドから派生したコードギアのダウンロードページに、無償で使えるコンパイラ「C++Compiler」が有りますので、これを落として使う事が出来ます。
HOS-V4のconfigディレクトリには3つのMakefileがあります。「gcc.mak」、「freebsd.mak」、「bcc55.mak」です。これ以外のコンパイラを使うなら、これらMakefileを参考に、ご自分の環境向けMakefileを作成します。
※一応、そんな面倒な事やってられない!と言う方用に、Windows環境下(但し2000かXPでしか動作保証は無し)コンフィギュレータをここに置いて置きますので、例によって右クリックで落した後、拡張子をzipに変更してから解凍してください。
HOS-V4カーネルライブラリの生成 [HOS]
カーネルライブラリの話なのでT-SH2MBの話では無いのだけれどね、今回このボード上でHOS-V4を動かすつもりなので、随分遅くなってしまったが、HOS-V4のリリース1.02を使ってみようと、、、やっています。
まずhttps://sourceforge.jp/projects/hos/からソースコードを落として来ます。リリースバージョン1.02を落として来ても良いのですが、私の場合はCVSから落として来ました。「CVS リポジトリの参照」からWEBインタフェースで落とす事が出来ます。
しかしCVSから直接落としてくると、ソースコードやドキュメントのファイルはEUCで記述されている為に、そのままWindows環境下で使用するのは大変です。
ベクターあたりからEUC→Shift-Jis変換ツールとかを落として来て使った方が良いでしょう。
http://www.unibirth.com/products/CharsetConverter/
HOS-V4のカーネルライブラリをHEW上で作成するのは、とても簡単な作業です。
まずウイザードを使ってライブラリプロジェクトの作成から始めます。と言ってもウイザードが聞いて来るのは「CPUに何使うの?」、「何処にプロジェクトを作成するの?」程度ですので、スケルトンの作成はすぐに済みます。
で、次の作業はソースファイルの登録です。これが難しくは無いのですが、登録するファイルが沢山有って大変です。
展開したHOS-V4プロジェクトの中の”src”フォルダー以下の”kernel”、”mknl”、”sh”、”sh/sh2ht”以下のソースコードを全てHEWのプロジェクトに登録します。
ソースコードのコンパイル中に”include”の中のヘッダーファイルを参照しますので、「Build」→「ToolChain」の設定メニューから、コンパイラの「インクルードファイルディレクトリ」の項目に、適宜先の”include”ディレクトリへのpathを書いて置きます。
”pacctx.src”ソースコードの修正を行います。(※現在は直っております)
これは7145は該当しない修正なのかな?。7125等の比較的新しいCPUの場合、遅延分岐命令の直後に”LDC”命令を置く事が出来なくなっています。おそらく今後出る新しいマイコンについてはこれがデフォルトとなるでしょう。今の内に直した方が良いと思われます。
rts
ldc r0, sr
と書かれている所は
ldc r0, sr
rts
nop
と直して置きます。
ではビルドしてみます。幾つかwarningが出ますが、そのままライブラリを作成します。
※HOSの構築について、詳細はこちらをどうぞ!。
ITRONプログラミング入門―H8マイコンとHOSで始める組み込み開発
- 作者: 濱原 和明
- 出版社/メーカー: オーム社
- 発売日: 2005/04/25
- メディア: 単行本
SH/TinyにHOS-V4を載せよう TASK1 [HOS]
さて開発キットを注文したはいいが、直ぐに来る訳でもないし、その間にHOS-V4でも実装してみましょう。
重要!スロット不当命令の仕様変更に伴う、カーネルのCPU依存部の改造
ハードウエアマニュアルの5.8.4を参考にして下さい。従来のSH2からSH/Tinyとなってスロット不当命令に該当する命令に変更がなされています。
この変更の影響を、カーネルソースコードのCPU依存部のpacctx.srcの中の何箇所かで受けています。
具体的にはステータスレジスタへのロード命令
ldc r0,sr
を遅延スロットに使う事が出来ないので、遅延スロットにこれを使っている所全てを修正します。
例えば従来
rts ldc r0, sr
だったのを、
ldc r0, sr rts nop
とします。
これはGCCを使った場合にも該当します。
カーネルのCPU依存部の改造
ここからは従来通りのCPU別依存部の修正です。
やる事はカーネルのCPU依存部、具体的にはCPUコアの変更は無いのだからsrc/sh/sh2htに有るHOSソースのpacctx.srcには手を付けず、pacint.srcにSH2/7125で使用する割り込みベクターに対応する改造を行います。うわ!このマイコン、小さいくせにベクター番号が227まで有るんですね。スカスカですが。
_hos_vecter224: mov.l r4, @-r15 bra int_handler mov #224,r4 _hos_vecter225: mov.l r4, @-r15 bra int_handler mov #225,r4 _hos_vecter226: mov.l r4, @-r15 bra int_handler mov #226,r4 _hos_vecter227: mov.l r4, @-r15 bra int_handler mov #227,r4
簡単だが煩雑な作業を終了し修正が完了しましたら、カーネルの再構築を行います。
アプリケーションの割り込みベクターテーブルの修正
次にアプリケーション用のプロジェクトを作成し、そのプロジェクトファイルの一部に割り込みベクター用ファイル(vector.src)を用意しますが、これらはHOSのサンプルプログラムとして提供されている物を流用するのが一番楽な訳で、左のリンクの「Interface付属SH2基板のSRAM有り/無しデバックモニタとHOS-V4同梱バージョン」辺りに入っているSH2/7144用のプロジェクトファイルから持ってきて下さい。
カーネル再構築でやったように、必要なコードの追加や、不要なコードの削除を行います。
あまりにも面倒になったので、簡単なベクターテーブル生成ツールを作成しています。
.ORG VECT + 216 * 4 .data.l _hos_vecter216 ;_hos_vecter216 ;ERI_0 .data.l _hos_vecter217 ;_hos_vecter217 ;RXI_0 .data.l _hos_vecter218 ;_hos_vecter218 ;TXI_0 .data.l _hos_vecter219 ;_hos_vecter219 ;TEI_0 .data.l _hos_vecter220 ;_hos_vecter220 ;ERI_1 .data.l _hos_vecter221 ;_hos_vecter221 ;RXI_1 .data.l _hos_vecter222 ;_hos_vecter222 ;TXI_1 .data.l _hos_vecter223 ;_hos_vecter223 ;TEI_1 .data.l _hos_vecter224 ;_hos_vecter224 ;ERI_2 .data.l _hos_vecter225 ;_hos_vecter225 ;RXI_2 .data.l _hos_vecter226 ;_hos_vecter226 ;TXI_2 .data.l _hos_vecter227 ;_hos_vecter227 ;TEI_2
アプリケーションのC Runtime Routineの修正
やはり先のSH2/7144用のcrt0.cを修正して使います。
うーん、このファイルは以下の所くらいですね。
#define INTERNAL_RAM_ADDR (volatile char *)0xFFFFA000 #define INTERNAL_RAM_SIZE (0x2000 - 16)
内部で呼んでいる「BusInit()」が有るファイルを開いて、BusInitの中身にCPUクロック(Iφ)、バスクロック(Bφ)、周辺クロック(Pφ、MPφ)の設定等を行います。
void BusInit( void ) { CPG.FRQCR.WORD = 0x16db; /*Iφ=48MHz、Bφ=24MHz、Pφ=24MHz、MPφ=24MHz*/ }
システムコンフィギュレーションファイル(system.cfg)の修正
まあこれはそれぞれユーザー毎にカーネルオブジェクトの構成が違うので一律にどうこうと言う部分は少ないのですが、割り込みスタックの初期値と、割り込み番号の最大、最小くらいでしょうか。一応参考まで。
HOS_IDL_STK(256,NULL); /*IDEL時のスタック領域*/ HOS_INT_SP(0xFFFFC000); /*割込み時のスタックの初期値*/ HOS_MAX_TPRI(8); /* 最大優先度(省略時 16) */ HOS_TIM_TIC(1,1); /* タイムティックの設定(省略時 1/1 ) */ HOS_MIN_INTNO(64); /* 割り込み番号の最小値(省略時 0) */ HOS_MAX_INTNO(227); /* 割り込み番号の最大値(省略時 0) */ /* インクルードファイルの指定 */ INCLUDE("\"hos_7125.h\""); /* 初期化ルーチンの追加 */ ATT_INI({TA_HLNG, 0, CMT0_Init}); ATT_INI({TA_HLNG, 0, Initialize}); /* 割り込みハンドラ */ ATT_ISR({TA_HLNG, 0, 184, CMT0_Int}); /* タスク */ CRE_TSK(TID_TSK1,{TA_HLNG | TA_ACT, 1, tasks, 1, 256,NULL}); CRE_TSK(TID_TSK2,{TA_HLNG | TA_ACT, 2, tasks, 1, 256,NULL}); CRE_TSK(TID_TSK3,{TA_HLNG | TA_ACT, 3, tasks, 1, 256,NULL}); CRE_TSK(TID_TSK4,{TA_HLNG | TA_ACT, 4, tasks, 1, 256,NULL}); /* セマフォ */ CRE_SEM(SEMID_SCI1, {TA_TFIFO, 1, 1}); /*SCI1の競合を避ける*/
動かしてみよう
もちろん上記以外の修正、例えばタイマーの設定とか、シリアルの設定とか、それぞれCPUに合わせて適宜変更を入れますが、面倒なのでそこまでは書きません。
左のリンクのSH2/7144(CQ7144)用のそれを、SH/Tiny用にアレンジして動かした物が左の図です。タスクが同時に4本走っているのが判ります。
これが動けば!あとはガンガン前に進むのみです。
Yoshiさんへの連絡 [HOS]
「BUILD」から「Tool Chain」でツールチェインタブの一番最後の「全般」タブを開き、図のチェックマークを入れてみて下さい。
C:\WorkSpace\HOSV4\include\win\hospac.h(17) : DC201 (E) A header file
does not exist 'windows.h'
のメッセージを見ると判りますが、「win」ディレクトリも「windows.h」もまったくH8には関係しませんですからね。
テクニカルエンジニア(エンベデッドシステム) [HOS]
もう、試験を受けて資格を取る様な歳ではないけれど、かと言ってそうとうに狭い世界に生きているので、世間とのずれを再認識する意味で、「テクニカルエンジニア(エンベデッドシステム)」がちょっと気になっています。
試験を受けるかどうかは置いておいて、こんなページでどんな試験内容なのか試してみました。
http://www.licenseworld.co.jp/cgi-bin/lic.cgi?Type=08
以下はネタばれになるので、もし模擬試験を試すつもりなら、完了してから、再びここに訪れてね。
ネタばれ注意!
■このメールは、LicenseWorld提供の「オンライン模擬試験」を受験された方に送信しています。
----------------------------------------------------------------------------
正答数:9 問(全 10 問)
----------------------------------------------------------------------------
《問題と正解》
【問題 1】 システムを高信頼化する方式の一つで、2系統のシステムで同時に同一の処理を行わせ、それらの出力を常時比較することによって誤りを検出するシステムはどれか。
ア.待機冗長システム
イ.デュアルシステム
ウ.デュプレックスシステム
エ.フォールトトレラントシステム
あなたの答え:ウ
正解:イ
【問題 2】 システム開発の進捗管理を行うためによく利用されるガントチャートの説明として、適切なものはどれか。
ア.作業項目を縦軸に、時間を横軸にとり、計画日程と実績日程を対比できる。
イ.一つの作業と他のすべての作業との相関を把握できる。
ウ.複数の項目を階層構造に分けて、各要素を結んで項目ごとの関係を示すことができる。
エ.プロジェクトを構成する作業の順序関係を記述できる。
あなたの答え:ア
正解:ア
【問題 3】 オブジェクト指向の基本概念の組合せとして、正しいものはどれか。
ア.(仮想化、構造化、投影、クラス)
イ.(具体化、構造化、連続、クラス)
ウ.(正規化、カプセル化、分割、クラス)
エ.(抽象化、カプセル化、継承、クラス)
あなたの答え:エ
正解:エ
【問題 4】 リアルタイムOSにおけるイベントフラグに関する記述として、最も適切なものはどれか。
ア.資源の排他制御手段である。
イ.タスク間のデータ通信手段である。
ウ.タスクの同期制御手段である。
エ.メモリ資源を管理する手段である。
あなたの答え:ウ
正解:ウ
【問題 5】 アプリケーション側から見て、OSによるオーバヘッドと特定できるものはどれか。
ア.アプリケーションタスクの実行時間
イ.アプリケーションの割込み処理プログラムの実行時間
ウ.タスクスケジューリングの実行時間
エ.リエントラントプログラムの実行時間
あなたの答え:ウ
正解:ウ
【問題 6】 5Vから15Vまで変化するアナログ信号がある。その電圧変化の範囲で8ビットの分解能でA/D変換したとき、入力電圧を何mV きざみで分解できるか。ただし、最小電圧のA/D変換結果を0,最大電圧のA/D変換結果を255とする。答は四捨五入して小数点第1位まで求めるものとする。
ア.39.0
イ.39.2
ウ.58.6
エ.58.8
あなたの答え:イ
正解:イ
【問題 7】 メモリマップドI/Oに関する記述のうち、正しいものはどれか。
ア.I/OマップドI/Oが使用できるMPUでは、メモリマップドI/Oは使用できない。
イ.メモリマップドI/Oが使用できるMPUでは、必ずI/OマップドI/Oも使用できる。
ウ.メモリマップドI/Oでは、DMAは使用できない。
エ.メモリマップドI/Oでは、メモリとI/Oとが同一のアドレス空間に存在する。
あなたの答え:エ
正解:エ
【問題 8】 DCモーターのPWM制御に関する記述のうち、正しいものはどれか。
ア.マイコンから出力したパルス数によって、モータの回転角を制御することを目的とする。
イ.マイコンから出力したパルス数によって、モータの回転数を制御することを目的とする。
ウ.マイコンから出力したパルスの周期によって、モータの回転角を制御することを目的とする。
エ.マイコンから出力したパルスのデューティ比によって、モータの回転数を制御することを目的とする。
あなたの答え:エ
正解:エ
【問題 9】 主記憶からの読出し時間が100ナノ秒で、キャッシュからの読出し時間が20ナノ秒のMPUの平均読出し時間(ナノ秒)は幾らか。ここで、キャッシュヒット率は85%とする。
ア.32
イ.51
ウ.88
エ.102
あなたの答え:ア
正解:ア
【問題 10】 リアルタイムOSにおけるタスクの優先順位に関する記述として、正しいものはどれか。
ア.I/Oの完了やタイマの完了、タスク間の連絡など異なったイベントで待ち状態になったタスクが複数ある場合、タスクは優先順位に従って実行可能状態になる。
イ.システムのデバイスドライバからI/Oの完了を通知されたタスクは、優先順位に関係なく一定時間実行状態になる。
ウ.セマフォを使用して共用資源を占有していても、優先順位のより高いタスクが同じ資源を要求すると、優先順位の低いタスクは資源の占有を解かれてしまう。
エ.優先順位の低いタスクは、長い時間実行可能状態にあっても、優先順位のより高いタスクが実行状態にある間は実行状態になれない。
あなたの答え:エ
正解:エ
「問題 1」ですが、二重系の事でしょう。日本語で書けよ。なんでわざわざカタカナ英語?、ってこのカタカナが引っ掛けだったのか!orz
大体はH8+ITRONをいじっていると、解けそうな問題ですね。
HOSカーネル構想が爆発している [HOS]
とうとうHOSカーネル作者のRyuzさんが、新しい構想をぶち上げだした。
http://hos.sourceforge.jp/index?%A5%AB%A1%BC%A5%CD%A5%EB%B9%CD%BB%A1
コンフィギュアラブルなOS(カーネル)がテーマです。
構想を公開しだすと、早いんだよね、この人。天才だと思う。要注目!。
HOSカーネルをあれの上に載せて、少ないRAMでもデバックしてみる [HOS]
作業を開始していますが、
http://hamayan.ddo.jp/~hamayan/so-net/hew.html
カーネル側が参照する初期化ルーチンの、アドレス解決にスマートな方法が思い浮かばない。うーん!難しい。