📄 kcre_tsk.c
字号:
/* ------------------------------------------------------------------------ */
/* Hyper Operating System V4 μITRON4.0慌屯 Real-Time OS */
/* ITRONカ〖ネル タスク瓷妄怠墙 */
/* */
/* Copyright (C) 1998-2002 by Project HOS */
/* http://sourceforge.jp/projects/hos/ */
/* ------------------------------------------------------------------------ */
#include <string.h>
#include "knl_tsk.h"
#include "knl_mem.h"
/* タスクの栏喇(カ〖ネル柒婶) */
ER kernel_cre_tsk(
ID tskid, /* 栏喇滦据のタスクID戎规 */
const T_CTSK *pk_ctsk) /* タスク栏喇攫鼠を掐れたパケットへのポインタ */
{
T_KERNEL_TCB_RAM *tcb_ram;
T_KERNEL_TCB_ROM *tcb_rom;
SIZE memsize;
UB *memptr;
/* 涩妥なメモリサイズを纷换 */
memsize = sizeof(T_KERNEL_TCB_RAM) + sizeof(T_KERNEL_TCB_ROM);
if ( pk_ctsk->stk == NULL )
{
memsize += pk_ctsk->stksz; /* スタックサイズを裁换 */
}
/* メモリ澄瘦 */
memptr = (UB *)kernel_alc_mem(memsize);
#ifdef HOS_ERCHK_E_NOMEM
if ( memptr == NULL )
{
return E_NOMEM; /* メモリ稍颅 */
}
#endif
/* ポインタ肋年 */
tcb_ram = (T_KERNEL_TCB_RAM *)memptr;
memptr += sizeof(T_KERNEL_TCB_RAM);
tcb_rom = (T_KERNEL_TCB_ROM *)memptr;
if ( pk_ctsk->stk == NULL )
{
memptr += sizeof(T_KERNEL_TCB_ROM);
tcb_rom->stk = (VP)memptr;
}
else
{
tcb_rom->stk = pk_ctsk->stk;
}
/* μカ〖ネルタスクの介袋步 */
memset(&tcb_ram->mtcb, 0, sizeof(tcb_ram->mtcb));
mknl_ini_tsk(&tcb_ram->mtcb);
/* 猛肋年 */
tcb_ram->actcnt = 0; /* 弹瓢妥滇キュ〖イング眶 */
tcb_ram->suscnt = 0; /* SUSPEND妥滇ネスト眶 */
tcb_ram->wupcnt = 0; /* 弹静妥滇キュ〖イング眶 */
tcb_ram->tcb_rom = tcb_rom; /* タスクコントロ〖ルブロックROM婶へのポインタ */
tcb_rom->tskatr = pk_ctsk->tskatr; /* タスク掳拉 */
tcb_rom->exinf = pk_ctsk->exinf; /* タスクの橙磨攫鼠 */
tcb_rom->task = pk_ctsk->task; /* タスクの弹瓢戎孟 */
tcb_rom->itskpri = pk_ctsk->itskpri; /* タスクの弹瓢箕庭黎刨 */
tcb_rom->stksz = pk_ctsk->stksz; /* タスクのスタックのサイズ∈バイト眶∷ */
/* タスクコントロ〖ルブロックテ〖ブルに判峡 */
KERNEL_TSKID_TO_TCB_RAM(tskid) = tcb_ram;
/* 悸乖觉轮で栏喇 */
if ( pk_ctsk->tskatr & TA_ACT )
{
/* 悸乖コンテキスト判峡 */
mknl_sta_tsk(
&tcb_ram->mtcb, /* 判峡するタスク */
tcb_rom->exinf, /* タスクの橙磨攫鼠 */
(FP)kernel_task_entry, /* タスクの弹瓢戎孟 */
tcb_rom->itskpri, /* タスクの弹瓢箕庭黎刨 */
tcb_rom->stksz, /* タスクのスタック挝拌サイズ */
tcb_rom->stk /* タスクのスタック挝拌の黎片戎孟 */
);
mknl_exe_dsp(); /* タスクディスパッチの悸乖 */
mknl_exe_tex(); /* 毋嘲借妄の悸乖 */
}
return E_OK;
}
/* ------------------------------------------------------------------------ */
/* Copyright (C) 1998-2002 by Project HOS */
/* ------------------------------------------------------------------------ */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -