// ---------------------------------------------------------------------------
-// Hyper Operating System V4 コンフィギュレーター
+// Hyper Operating System V4a コンフィギュレーター
// API定義クラス
//
-// Copyright (C) 1998-2003 by Project HOS
+// Copyright (C) 1998-2009 by Project HOS
// http://sourceforge.jp/projects/hos/
// ---------------------------------------------------------------------------
#endif // __HOSV4CFG_ApiDef_h__
-// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2003 by Project HOS
-// ---------------------------------------------------------------------------
+
+// end of file
int i;
m_iDefaultMaxId = 0;
- m_iMaxId = 0;
- m_iObjs = 0;
+ m_iMaxId = -1;
+ m_iObjs = 0;
m_iResObj = 0;
for ( i = 0; i < API_MAX_OBJS; i++ )
{
}
// 指定が無い場合はデフォルト値に設定
- if ( m_iMaxId == 0 )
+ if ( m_iMaxId < 0 )
{
m_iMaxId = m_iDefaultMaxId;
}
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
return CFG_ERR_OK;
}
-
+
return CFG_ERR_NOPROC;
}
{
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// ID 直接指定でないオブジェクトが在るかどうかサーチ
for ( i = 0; i < m_iObjs; i++ )
{
bool blOutput;
int i, j;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// コメント出力
fputs(
"\n\n\n"
// cfgファイル初期化部書き出し
void CApiCreDtq::WriteCfgIni(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// オブジェクト存在チェック
if ( m_iObjs == 0 )
{
return;
}
-
- // 初期化部出力
- fprintf(
- fp,
- "\t\n\t\n"
- "\t/* initialize data queue control block */\n"
- "\tfor ( i = 0; i < %d; i++ )\n"
- "\t{\n"
- "\t\tkernel_dtqcb_ram[i].dtqcb_rom = &kernel_dtqcb_rom[i];\n"
- "\t}\n",
- m_iObjs);
}
return;
}
- fputs("\tkernel_ini_dtq();\t\t/* initialize data queue */\n", fp);
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
-// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2003 by Project HOS
-// ---------------------------------------------------------------------------
+// end of file
// ---------------------------------------------------------------------------
-// Hyper Operating System V4 コンフィギュレーター
+// Hyper Operating System V4a コンフィギュレーター
// CRE_FLG API の処理
//
-// Copyright (C) 1998-2003 by Project HOS
+// Copyright (C) 1998-2009 by Project HOS
// http://sourceforge.jp/projects/hos/
// ---------------------------------------------------------------------------
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
void CApiCreFlg::WriteId(FILE* fp)
{
int i;
+
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
// %jp{コメントを出力}
fputs("\n\n/* event flag ID definetion */\n", fp);
{
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// コメント出力
fputs(
"\n\n\n"
-
-
// cfgファイル初期化部書き出し
void CApiCreFlg::WriteCfgIni(FILE* fp)
{
- // オブジェクト存在チェック
- if ( m_iObjs == 0 )
- {
- return;
- }
}
// cfgファイル起動部書き出し
void CApiCreFlg::WriteCfgStart(FILE* fp)
{
- // オブジェクト存在チェック
- if ( m_iObjs == 0 )
- {
- return;
- }
}
-// end of file
\ No newline at end of file
+// end of file
m_iParams = 2;
}
+
// デストラクタ
CApiCreMbf::~CApiCreMbf()
{
}
-
// APIの解析
int CApiCreMbf::AnalyzeApi(const char* pszApiName, const char* pszParams)
{
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
void CApiCreMbf::WriteCfgDef(FILE* fp)
{
const char* pszParam;
- bool blOutput; int i, j;
+ bool blOutput;
+ int i, j;
+
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
// コメント出力
fputs(
// cfgファイル初期化部書き出し
void CApiCreMbf::WriteCfgIni(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// オブジェクト存在チェック
if ( m_iObjs == 0 )
{
// cfgファイル起動部書き出し
void CApiCreMbf::WriteCfgStart(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// オブジェクト存在チェック
if ( m_iObjs == 0 )
{
return;
}
-
- fputs("\tkernel_ini_mbf();\t\t/* initialize message buffer */\n", fp);
}
-// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2003 by Project HOS
-// ---------------------------------------------------------------------------
+// end of file
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
// ID 定義ファイル書き出し
void CApiCreMbx::WriteId(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
{
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// コメント出力
fputs(
"\n\n\n"
// %jp{cfgファイル初期化部書き出し}
void CApiCreMbx::WriteCfgIni(FILE* fp)
{
- // %jp{オブジェクト存在チェック}
- if ( m_iObjs == 0 )
+ if ( m_iMaxId <= 0 )
{
return;
}
-
- // %jp{初期化部出力}
- fprintf(
- fp,
- "\t\n\t\n"
- "\t/* initialize mailbox control block */\n"
- "\tfor ( i = 0; i < %d; i++ )\n"
- "\t{\n"
- "\t\tkernel_mbxcb_ram[i].mbxcb_rom = &kernel_mbxcb_rom[i];\n"
- "\t}\n",
- m_iObjs);
}
// cfgファイル起動部書き出し
void CApiCreMbx::WriteCfgStart(FILE* fp)
{
-
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
-// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2006 by Project HOS
-// ---------------------------------------------------------------------------
+// end of file
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
// ID 定義ファイル書き出し
void CApiCreMpf::WriteId(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
const char* pszParam;
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// コメント出力
fputs(
"\n\n\n"
// cfgファイル初期化部書き出し
void CApiCreMpf::WriteCfgIni(FILE* fp)
{
-
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
// cfgファイル起動部書き出し
void CApiCreMpf::WriteCfgStart(FILE* fp)
{
-
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
// ---------------------------------------------------------------------------
-// Hyper Operating System V4 Advance configurator
+// Hyper Operating System V4a Advance configurator
// CRE_MTX API の処理
//
-// Copyright (C) 1998-2006 by Project HOS
+// Copyright (C) 1998-2009 by Project HOS
// http://sourceforge.jp/projects/hos/
// ---------------------------------------------------------------------------
return CFG_ERR_MULTIDEF;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
{
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// %jp{コメントを出力}
fputs("\n\n/* Mtxaphore object ID definetion */\n\n", fp);
-
-
+
// %jp{ID定義を出力}
for ( i = 0; i < m_iObjs; i++ )
{
void CApiCreMtx::WriteCfgDef(FILE* fp)
{
int i;
-
+
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// %jp{コメント出力}
fputs(
"\n\n\n"
// cfgファイル初期化部書き出し
void CApiCreMtx::WriteCfgIni(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
#if _KERNEL_MTXCB_ALGORITHM == _KERNEL_MTXCB_ALG_PTRARRAY && _KERNEL_MTXCB_SPLIT_RO
if ( m_iObjs <= 0 )
{
// cfgファイル起動部書き出し
void CApiCreMtx::WriteCfgStart(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
}
-// ---------------------------------------------------------------------------
-// Copyright (C) 1998-2007 by Project HOS
-// ---------------------------------------------------------------------------
+// end of file
+
return CFG_ERR_DEF_CONFLICT;
}
- if ( (iId = atoi(pszParams)) <= 0 )
+ if ( (iId = atoi(pszParams)) < 0 )
{
return CFG_ERR_PARAM;
}
-
+
m_iMaxId = iId;
-
+
return CFG_ERR_OK;
}
else if ( strcmp(pszApiName, "KERNEL_RSV_SEMID") == 0 )
{
return CFG_ERR_PARAM;
}
-
+
m_iResObj += iId;
return CFG_ERR_OK;
void CApiCreSem::WriteId(FILE* fp)
{
int i;
+
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
// %jp{コメントを出力}
fputs("\n\n/* Semaphore object ID definetion */\n\n", fp);
{
int i;
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
// %jp{コメント出力}
fputs(
"\n\n\n"
// cfgファイル初期化部書き出し
void CApiCreSem::WriteCfgIni(FILE* fp)
{
+ if ( m_iMaxId <= 0 )
+ {
+ return;
+ }
+
#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY && _KERNEL_SEMCB_SPLIT_RO
if ( m_iObjs <= 0 )
{
fprintf(fp, "#include \"object/cycobj.h\"\n");
// fprintf(fp, "#include \"%s\"\n", s_szIdFile);
- fprintf(fp, "#include \"kernel_id.h\"\n", s_szIdFile);
-
-
+ fprintf(fp, "#include \"kernel_id.h\"\n");
+
+
// ID 定義ファイル出力
for ( i = 0; i < API_COUNT; i++ )
{
# %jp{アーキテクチャ定義}%en{architecture}
-ARCH_NAME ?= mips1
+ARCH_NAME ?= jelly
ARCH_CC ?= gcc
EXT_EXE ?= elf
MEMORY
{
rom : o = 0x00000000, l = 0x00010000
- ram : o = 0x01000000, l = 0x00100000
+ ram : o = 0x01000000, l = 0x00002000
}
SECTIONS
* @file sample.c
* @brief %jp{サンプルプログラム}%en{Sample program}
*
- * Copyright (C) 1998-2006 by Project HOS
+ * Copyright (C) 1998-2009 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
+
#include <stdlib.h>
#include <string.h>
#include "kernel.h"
#define RIGHT(num) ((num) >= 5 ? 1 : (num) + 1)
-ID mbxid;
-ID mpfid;
-
-
/** %jp{メッセージ構造体} */
typedef struct t_print_msg
{
} T_PRINT_MSG;
-void Uart_IsrRx(VP_INT exinf)
-{
- int c;
- c = Uart_GetChar();
- Uart_PutChar(c);
- vclr_int(1);
-}
-
-
/** %jp{初期化ハンドラ} */
void Sample_Initialize(VP_INT exinf)
{
/* %jp{UART初期化} */
Uart_Initialize();
- /* %jp{固定長メモリプール生成} */
- cmpf.mpfatr = TA_TFIFO;
- cmpf.blkcnt = 3;
- cmpf.blksz = sizeof(T_PRINT_MSG);
- cmpf.mpf = NULL;
- mpfid = acre_mpf(&cmpf);
-
- /* %jp{メールボックス生成} */
- cmbx.mbxatr = TA_TFIFO | TA_TFIFO;
- cmbx.maxmpri = 1;
- cmbx.mprihd = NULL;
- mbxid = acre_mbx(&cmbx);
-
/* %jp{タスク起動} */
- act_tsk(TSKID_PRINT);
act_tsk(TSKID_SAMPLE1);
act_tsk(TSKID_SAMPLE2);
act_tsk(TSKID_SAMPLE3);
act_tsk(TSKID_SAMPLE4);
act_tsk(TSKID_SAMPLE5);
-
-
- {
- T_CISR cisr;
-
- /* %jp{割り込みサービスルーチン生成} */
- cisr.isratr = TA_HLNG;
- cisr.exinf = 0;
- cisr.intno = 1;
- cisr.isr = (FP)Uart_IsrRx;
- acre_isr(&cisr);
-
- /* 割込み許可 */
- ena_int(1);
- }
}
/** %jp{適当な時間待つ} */
-void rand_wait(void)
+void Sample_RandWait(void)
{
static unsigned long seed = 12345;
unsigned long r;
/** %jp{状態表示} */
-void print_state(int num, char *text)
+void Sample_PrintSatet(int num, char *text)
{
- T_PRINT_MSG *msg;
- VP mem;
- int i;
+ int i;
- /* %jp{メモリ取得} */
- get_mpf(mpfid, &mem);
- msg = (T_PRINT_MSG *)mem;
+ wai_sem(SEMID_UART);
- /* %jp{文字列生成} */
- msg->text[0] = '0' + num;
- msg->text[1] = ' ';
- msg->text[2] = ':';
- msg->text[3] = ' ';
+ /* %jp{文字列出力} */
+ Uart_PutChar('0' + num);
+ Uart_PutChar(' ');
+ Uart_PutChar(':');
+ Uart_PutChar(' ');
for ( i = 0; text[i] != '\0'; i++ )
{
- msg->text[4+i] = text[i];
+ Uart_PutChar(text[i]);
}
- msg->text[4+i] = '\n';
- msg->text[5+i] = '\0';
+ Uart_PutChar('\n');
+ Uart_PutChar('\0');
- /* %jp{表示タスクに送信} */
- snd_mbx(mbxid, (T_MSG *)msg);
+ sig_sem(SEMID_UART);
}
+
/** %jp{サンプルタスク} */
void Sample_Task(VP_INT exinf)
{
for ( ; ; )
{
/* %jp{適当な時間考える} */
- print_state(num, "thinking");
- rand_wait();
+ Sample_PrintSatet(num, "thinking");
+ Sample_RandWait();
/* %jp{左右のフォークを取るまでループ} */
for ( ; ; )
sig_sem(LEFT(num)); /* %jp{取れなければ離す} */
/* %jp{適当な時間待つ} */
- print_state(num, "hungry");
- rand_wait();
-
+ Sample_PrintSatet(num, "hungry");
+ Sample_RandWait();
+
/* %jp{右から順に取る} */
wai_sem(RIGHT(num));
if ( pol_sem(LEFT(num)) == E_OK )
break; /* %jp{両方取れた} */
}
sig_sem(RIGHT(num)); /* %jp{取れなければ離す} */
-
+
/* %jp{適当な時間待つ} */
- print_state(num, "hungry");
- rand_wait();
+ Sample_PrintSatet(num, "hungry");
+ Sample_RandWait();
}
/* %jp{適当な時間、食べる} */
- print_state(num, "eating");
- rand_wait();
+ Sample_PrintSatet(num, "eating");
+ Sample_RandWait();
/* %jp{フォークを置く} */
sig_sem(LEFT(num));
}
-/** %jp{表示タスク} */
-void Sample_Print(VP_INT exinf)
-{
- T_PRINT_MSG *msg;
-
- for ( ; ; )
- {
- rcv_mbx(mbxid, (T_MSG **)&msg);
- Uart_PutString(msg->text);
- rel_mpf(mpfid, msg);
- }
-}
-
-
/* end of file */
* @file system.cfg
* @brief %jp{サンプルのコンフィギュレーション}
*
- * Copyright (C) 1998-2006 by Project HOS
+ * Copyright (C) 1998-2009 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
-
/* %jp{カーネル独自の設定}%en{kernel} */
-KERNEL_HEP_MEM(4096, NULL);
+KERNEL_HEP_MEM(512, NULL);
KERNEL_SYS_STK(512, NULL);
KERNEL_INT_STK(512, NULL);
KERNEL_MAX_TSKID(5);
-KERNEL_MAX_SEMID(6);
-KERNEL_MAX_FLGID(2);
-KERNEL_MAX_MBXID(2);
-KERNEL_MAX_MPFID(2);
-KERNEL_MAX_ISRID(4);
+KERNEL_MAX_SEMID(7);
+KERNEL_MAX_FLGID(1);
+KERNEL_MAX_MBXID(1);
+KERNEL_MAX_MPFID(1);
+KERNEL_MAX_MTXID(1);
+KERNEL_MAX_ISRID(1);
/* %jp{OSタイマの設定}%en{OS timer} */
/* %jp{サンプル}%en{Sample program} */
INCLUDE("\"sample.h\"");
ATT_INI({TA_HLNG, 0, Sample_Initialize});
-CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 512, NULL});
CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 512, NULL});
CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 512, NULL});
CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 512, NULL});
CRE_SEM(4, {TA_TFIFO, 1, 1});
CRE_SEM(5, {TA_TFIFO, 1, 1});
CRE_SEM(SEMID_RAND, {TA_TFIFO, 1, 1});
-
+CRE_SEM(SEMID_UART, {TA_TFIFO, 1, 1});
/* end of file */