source: uKadecot/trunk/ssp/kernel/task.h@ 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: 6.1 KB
RevLine 
[101]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-2009 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#ifndef TOPPERS_TASK_H
43#define TOPPERS_TASK_H
44
45#include "kernel_impl.h"
46
47
48/*
49 * タスク優先度の内部表現・外部表現変換マクロ
50 */
51#define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI))
52
53/*
54 * タスクIDの最大値(kernel_cfg.c)
55 */
56extern const ID tmax_tskid;
57
58/*
59 * タスクの数
60 */
61#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
62
63/*
64 * 実行可能状態のタスクがない時に実行中タスクの現在優先度に設定する値
65 */
66#define TSKPRI_NULL (UINT_MAX)
67
68
69/*
70 * レディキューサーチのためのビットマップ
71 */
72extern volatile uint_t ready_primap;
73
74/*
75 * 起動要求キューイングのビットマップ
76 */
77extern uint_t actque_bitmap;
78
79/*
80 * ディスパッチ/タスク例外処理ルーチン起動要求フラグ
81 *
82 * 割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは
83 * タスク例外処理ルーチンの起動を要求することを示すフラグ.
84 */
85extern bool_t reqflg;
86
87/*
88 * ディスパッチ禁止状態
89 *
90 * ディスパッチ禁止状態であることを示すフラグ.
91 */
92extern bool_t disdsp;
93
94/*
95 * 実行状態タスクの現在優先度
96 *
97 * 実行中のタスクに実行時優先度が設定されていれば実行時優先度が,
98 * 設定されていなければ起動時優先度が設定される.
99 */
100extern uint_t runtsk_curpri;
101
102/*
103 * 実行状態タスクの起動時優先度
104 */
105extern uint_t runtsk_ipri;
106
107/*
108 * タスク管理モジュールの初期化
109 *
110 * 全てのタスクを初期化する.各タスクはタスク属性にTA_ACTが設定されていれば
111 * 実行可能状態,そうでない場合は休止状態となる.
112 *
113 * また、ディスパッチ許可フラグをディスパッチ許可状態に設定する.
114 *
115 * 本関数はコンフィギュレータが生成するobject_initialize以外で呼んではならない.
116 */
117extern void initialize_task(void);
118
119/*
120 * タスクの起動
121 *
122 * ipriで指定した起動時優先度を持つタスクを実行可能状態に遷移させる.
123 * 本関数を実行することによりプリエンプトが発生する場合はtrueを,
124 * そうでない場合はfalseを返す.
125 *
126 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
127 * 呼び出すこと.
128 */
129extern bool_t make_active(uint_t ipri);
130
131/*
132 * 指定した起動時優先度のタスクが休止状態かどうかのテスト
133 *
134 * ipriで指定した起動時優先度を持つタスクが休止状態であれば
135 * trueをそれ以外(実行可能状態,実行可能状態)であればfalseを返す.
136 *
137 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
138 * 呼び出すこと.
139 */
140extern bool_t test_dormant(uint_t ipri);
141
142/*
143 * 最高優先順位タスクのサーチ
144 *
145 * 実行可能状態のタスクの中から最も優先順位が高いタスクの初期優先度を
146 * 返す.
147 *
148 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
149 * 呼び出すこと.
150 */
151extern uint_t search_schedtsk(void);
152
153/*
154 * タスクの実行
155 *
156 * ipriで指定した起動時優先度を持つタスクを実行する.
157 * 本関数から実行したタスクからサービスコールを経由して
158 * 再帰的に呼ばれることもある.
159 *
160 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
161 * 呼び出すこと.
162 */
163extern void run_task(uint_t ipri);
164
165/*
166 * タスクディスパッチャ
167 *
168 * カーネル初期化完了後に呼び出され,最高優先順位となったタスクを実行する.
169 *
170 * 本関数はCPUロック状態,全割込みロック解除状態,割込み優先度マスク全解除状態で
171 * 呼び出すこと.
172 * なお,本関数からはリターンしない.
173 *
174 */
175extern void dispatcher(void) NoReturn;
176
177/*
178 * タスクの起動時優先度取得(タスクコンテキスト用)
179 *
180 * tskidで指定したタスクの起動時優先度を取得する.
181 * tskidはTMIN_TSKID以上,tmax_tskid以下の値,もしくはTSK_SELFで
182 * 指定しなければならない.
183 */
184extern uint_t get_ipri_self(ID tskid);
185
186/*
187 * タスクの起動時優先度取得(非タスクコンテキスト用)
188 *
189 * tskidで指定したタスクの起動時優先度を取得する.
190 * tskidはTMIN_TSKID以上,tmax_tskid以下の値で指定しなければならない.
191 */
192extern uint_t get_ipri(ID tskid);
193
194
195/* 起動要求キューイングビットマップの操作 */
196#define ACTQUE_BIT(ipri) (1U << (ipri))
197
198/* 起動要求キューイングのセット */
199Inline
200void actque_set(uint_t ipri)
201{
202 actque_bitmap |= ACTQUE_BIT(ipri);
203}
204
205/* 起動要求キューイングのクリア */
206Inline
207void actque_clear(uint_t ipri)
208{
209 actque_bitmap &= ~ACTQUE_BIT(ipri);
210}
211
212/* 起動要求キューイング数のチェック */
213Inline
214bool_t actque_test(uint_t ipri)
215{
216 return ((actque_bitmap & ACTQUE_BIT(ipri)) != 0U);
217}
218
219
220#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.