📄 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 + -