デバックモニタ上で動かすサンプルアプリケーションの作成 [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
- メディア: 単行本
コメント 0