source: uKadecot/trunk/ssp/kernel/task_manage.c@ 108

Last change on this file since 108 was 108, checked in by coas-nagasima, 9 years ago

MIMEプロパティの変更

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-chdr; charset=SHIFT_JIS
File size: 3.7 KB
Line 
1/*
2 * TOPPERS/SSP Kernel
3 * Smallest Set Profile Kernel
4 *
5 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
6 * Toyohashi Univ. of Technology, JAPAN
7 * Copyright (C) 2005-2008 by Embedded and Real-Time Systems Laboratory
8 * Graduate School of Information Science, Nagoya Univ., JAPAN
9 * Copyright (C) 2010 by Naoki Saito
10 * Nagoya Municipal Industrial Research Institute, JAPAN
11 * Copyright (C) 2011 by Meika Sugimoto
12 *
13 * 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
14 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
15 * 再配布(以下,利用と呼ぶ)することを無償で許諾する.
16 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
17 * 表示,この利用条件および下記の無保証規定が,そのままの形でソース
18 * コード中に含まれていること.
19 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
20 * できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
21 * ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
22 * 証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
24 * できない形で再配布する場合には,次のいずれかの条件を満たすこと.
25 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
26 * 権表示,この利用条件および下記の無保証規定を掲載すること.
27 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
28 * 告すること.
29 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
30 * からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
31 * 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
32 * く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
33 *
34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
35 * びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
36 * る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
37 * により直接的または間接的に生じたいかなる損害に関しても,その責任を負
38 * わない.
39 *
40 */
41
42/*
43 * タスク管理機能
44 */
45
46#include "kernel_impl.h"
47#include "check.h"
48#include "task.h"
49
50/*
51 * トレースログマクロのデフォルト定義
52 */
53#ifndef LOG_ACT_TSK_ENTER
54#define LOG_ACT_TSK_ENTER(tskid)
55#endif /* LOG_ACT_TSK_ENTER */
56
57#ifndef LOG_ACT_TSK_LEAVE
58#define LOG_ACT_TSK_LEAVE(ercd)
59#endif /* LOG_ACT_TSK_LEAVE */
60
61#ifndef LOG_IACT_TSK_ENTER
62#define LOG_IACT_TSK_ENTER(tskid)
63#endif /* LOG_IACT_TSK_ENTER */
64
65#ifndef LOG_IACT_TSK_LEAVE
66#define LOG_IACT_TSK_LEAVE(ercd)
67#endif /* LOG_IACT_TSK_LEAVE */
68
69
70/*
71 * タスクの起動
72 */
73#ifdef TOPPERS_act_tsk
74
75ER
76act_tsk(ID tskid)
77{
78 ER ercd;
79 uint_t itskpri;
80
81 LOG_ACT_TSK_ENTER(tskid);
82 CHECK_TSKCTX_UNL();
83 CHECK_TSKID_SELF(tskid);
84
85 itskpri = get_ipri_self(tskid);
86
87 t_lock_cpu();
88 if (test_dormant(itskpri)) {
89 if(make_active(itskpri)) {
90 run_task(itskpri);
91 }
92 ercd = E_OK;
93 }
94 else if(!actque_test(itskpri)) {
95 actque_set(itskpri);
96 ercd = E_OK;
97 }
98 else {
99 ercd = E_QOVR;
100 }
101 t_unlock_cpu();
102
103 error_exit:
104 LOG_ACT_TSK_LEAVE(ercd);
105 return(ercd);
106}
107
108#endif /* TOPPERS_act_tsk */
109
110/*
111 * タスクの起動(非タスクコンテキスト用)
112 */
113
114#ifdef TOPPERS_iact_tsk
115
116ER
117iact_tsk(ID tskid)
118{
119 ER ercd;
120 uint_t itskpri;
121
122 LOG_IACT_TSK_ENTER(tskid);
123 CHECK_INTCTX_UNL();
124 CHECK_TSKID(tskid);
125 itskpri = get_ipri(tskid);
126
127 i_lock_cpu();
128 if (test_dormant(itskpri)) {
129 if(make_active(itskpri)) {
130 reqflg = true;
131 }
132 ercd = E_OK;
133 }
134 else if(!actque_test(itskpri)) {
135 actque_set(itskpri);
136 ercd = E_OK;
137 }
138 else {
139 ercd = E_QOVR;
140 }
141 i_unlock_cpu();
142
143 error_exit:
144 LOG_IACT_TSK_LEAVE(ercd);
145 return(ercd);
146}
147
148#endif /* TOPPERS_iact_tsk */
Note: See TracBrowser for help on using the repository browser.