source: atk2-sc3-1.4.0-ntisr/kernel/task.h@ 172

Last change on this file since 172 was 172, checked in by ertl-ishikawa, 8 years ago

ATK2-SC3 1.4.0 RH850依存部 非信頼C2ISR対応を追加

  • Property svn:executable set to *
File size: 12.9 KB
Line 
1/*
2 * TOPPERS ATK2
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 * Automotive Kernel Version 2
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2004-2015 by Center for Embedded Computing Systems
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 * Copyright (C) 2011-2015 by FUJI SOFT INCORPORATED, JAPAN
11 * Copyright (C) 2011-2013 by Spansion LLC, USA
12 * Copyright (C) 2011-2015 by NEC Communication Systems, Ltd., JAPAN
13 * Copyright (C) 2011-2015 by Panasonic Advanced Technology Development Co., Ltd., JAPAN
14 * Copyright (C) 2011-2014 by Renesas Electronics Corporation, JAPAN
15 * Copyright (C) 2011-2015 by Sunny Giken Inc., JAPAN
16 * Copyright (C) 2011-2015 by TOSHIBA CORPORATION, JAPAN
17 * Copyright (C) 2004-2015 by Witz Corporation
18 * Copyright (C) 2014-2015 by AISIN COMCRUISE Co., Ltd., JAPAN
19 * Copyright (C) 2014-2015 by eSOL Co.,Ltd., JAPAN
20 * Copyright (C) 2014-2015 by SCSK Corporation, JAPAN
21 * Copyright (C) 2015 by SUZUKI MOTOR CORPORATION
22 *
23 * 上記著作権者
24は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
25 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
26 * 変・再é…
27å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
28 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
29 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
30 * スコード中に含まれていること.
31 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
32 * 用できる形で再é…
33å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
34å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
35 * 者
36マニュアルなど)に,上記の著作権表示,この利用条件および下記
37 * の無保証規定を掲載すること.
38 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
39 * 用できない形で再é…
40å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
41 * と.
42 * (a) 再é…
43å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
44マニュアルなど)に,上記の著
45 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
46 * (b) 再é…
47å¸ƒã®å½¢æ…
48‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
49 * 報告すること.
50 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
51 * 害からも,上記著作権者
52およびTOPPERSプロジェクトをå…
53è²¬ã™ã‚‹ã“と.
54 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
55 * 由に基づく請求からも,上記著作権者
56およびTOPPERSプロジェクトを
57 * å…
58è²¬ã™ã‚‹ã“と.
59 *
60 * 本ソフトウェアは,AUTOSAR(AUTomotive Open System ARchitecture)仕
61 * 様に基づいている.上記の許諾は,AUTOSARの知的財産権を許諾するもので
62 * はない.AUTOSARは,AUTOSAR仕様に基づいたソフトウェアを商用目的で利
63 * 用する者
64に対して,AUTOSARパートナーになることを求めている.
65 *
66 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
67お
68 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
69 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
70 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
71 * の責任を負わない.
72 *
73 * $Id: task.h 425 2015-12-07 08:06:19Z witz-itoyo $
74 */
75
76/*
77 * タスク管理機能
78 */
79
80#ifndef TOPPERS_TASK_H
81#define TOPPERS_TASK_H
82
83#include "queue.h"
84#include "resource.h"
85
86typedef struct task_control_block TCB;
87#include "osap.h"
88#include "counter.h"
89
90/*
91 * イベントマスク値の定義
92 */
93#define EVTMASK_NONE ((EventMaskType) 0) /* イベントなし */
94
95/*
96 * 優å…
97ˆåº¦ã®ç¯„囲(外部表現)
98 */
99#define TMIN_TPRI UINT_C(0) /* タスク優å…
100ˆåº¦ã®æœ€å°å€¤ï¼ˆæœ€ä½Žå€¤ï¼‰*/
101#define TMAX_TPRI UINT_C(15) /* タスク優å…
102ˆåº¦ã®æœ€å¤§å€¤ï¼ˆæœ€é«˜å€¤ï¼‰*/
103
104/*
105 * 優å…
106ˆåº¦ã®æ®µéšŽæ•°ã®å®šç¾©
107 */
108#define TNUM_TPRI ((TMAX_TPRI - TMIN_TPRI) + 1U)
109
110/*
111 * 優å…
112ˆåº¦å€¤ã®å®šç¾©ï¼ˆå†…
113部表現)
114 */
115#define TPRI_MINTASK ((PriorityType) (TNUM_TPRI - 1U)) /* 最低タスク優å…
116ˆåº¦ */
117#define TPRI_MAXTASK ((PriorityType) (0)) /* 最高タスク優å…
118ˆåº¦ */
119
120/*
121 * タスクIDからTCBを取り出すためのマクロ
122 */
123#define get_tcb(tskid) (&(tcb_table[(tskid)]))
124
125/*
126 * TCBからタスクIDを取り出すためのマクロ
127 * p_tcb がNULLの場合は使えない
128 */
129#define TSKID(p_tcb) ((TaskType) ((p_tcb) - tcb_table))
130
131#ifndef OMIT_BITMAP_SEARCH
132#define BITMAP_NUM 15 /* bitmap_search_tableのサイズ */
133#endif /* OMIT_BITMAP_SEARCH */
134
135/*
136 * タスク数を保持する変数の宣言(Os_Lcfg.c)
137 */
138extern const TaskType tnum_task; /* タスクの数 */
139extern const TaskType tnum_exttask; /* 拡張タスクの数 */
140
141
142/*
143 * タスク初期化ブロック
144 *
145 * タスクに関する情
146報を,値が変わらないためにROMに置ける部分(タスク
147 * 初期化ブロック)と,値が変化するためにRAMに置かなければならない部
148 * 分(タスク管理ブロック,TCB)に分離し,TCB内
149に対応するタスク初期化
150 * ブロックを指すポインタをå…
151¥ã‚Œã‚‹
152 * タスク初期化ブロック内
153に対応するTCBを指すポインタをå…
154¥ã‚Œã‚‹æ–¹æ³•ã®æ–¹ãŒï¼Œ
155 * RAMの節約の観点からは望ましいが,実行効率が悪くなるために採用
156 * していない
157 * 他のオブジェクトについても同様に扱う
158 */
159typedef struct task_initialization_block {
160 FunctionRefType task; /* タスクの起動番地 */
161
162#ifdef USE_TSKINICTXB
163 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */
164#else /* USE_TSKINICTXB */
165 MemorySizeType sstksz; /* システムスタック領域のサイズ(丸めた値) */
166 void *sstk; /* システムスタック領域のボトム番地(SC3) */
167 MemorySizeType ustksz; /* スタック領域のサイズ(丸めた値) */
168 void *ustk; /* スタック領域のボトム番地(SC3) */
169#endif /* USE_TSKINICTXB */
170 OSAPCB *p_osapcb; /* 所属するOSアプリケーションの管理ブロック */
171 uint32 acsbtmp; /* アクセス許可OSアプリケーション ビットマップ */
172 PriorityType inipri; /* 初期優å…
173ˆåº¦ (内
174部表現)*/
175 PriorityType exepri; /* 実行開始時の優å…
176ˆåº¦ (内
177部表現)*/
178 uint8 maxact; /* 多重起動要求の最大数 */
179 AppModeType autoact; /* 起動するモード */
180#ifndef OMIT_STKMPUINFOB
181 STKMPUINFOB stkmpu; /* スタックのMPU情
182å ± */
183#endif
184} TINIB;
185
186/*
187 * タスク管理ブロック(Os_Lcfg.c)
188 */
189struct task_control_block {
190 QUEUE task_queue; /* タスクキュー(構造体のå…
191ˆé ­ã«å…
192¥ã‚‹å¿…
193要) */
194 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */
195 PriorityType curpri; /* 現在の優å…
196ˆåº¦ï¼ˆå†…
197部表現)*/
198 TaskStateType tstat; /* タスク状æ…
199‹ï¼ˆå†…
200部表現)*/
201 uint8 actcnt; /* 多重起動要求数 */
202 EventMaskType curevt; /* イベントの現在値 */
203 EventMaskType waievt; /* 待
204っているイベント */
205 RESCB *p_lastrescb; /* 最後に獲得したリソース管理ブロックへのポインタ */
206 CNTCB *p_lastcntcb; /* 最後に操作したカウンタ管理ブロックへのポインタ */
207 TSKCTXB tskctxb; /* タスクコンテキストブロック */
208#ifdef CFG_USE_PROTECTIONHOOK
209 boolean calltfn; /* 信頼関数呼び出し中フラグ */
210#endif /* CFG_USE_PROTECTIONHOOK */
211};
212
213/*
214 * 実行状æ…
215‹ã®ã‚¿ã‚¹ã‚¯
216 *
217 * 実行状æ…
218‹ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合には,NULL にする
219 */
220extern TCB *p_runtsk;
221
222/*
223 * 最高優å…
224ˆé †ä½ã‚¿ã‚¹ã‚¯
225 *
226 * タスク実行中は,runtsk と一致する
227 * 実行できる状æ…
228‹ï¼ˆå®Ÿè¡ŒçŠ¶æ…
229‹ã¾ãŸã¯å®Ÿè¡Œå¯èƒ½çŠ¶æ…
230‹ï¼‰ã®ã‚¿ã‚¹ã‚¯ãŒãªã„場合には,
231 * NULL にする
232 */
233extern TCB *p_schedtsk;
234
235/*
236 * レディキュー中の最高優å…
237ˆåº¦
238 *
239 * レディキューには実行可能状æ…
240‹ã®ã‚¿ã‚¹ã‚¯ã®ã¿ã‚’含むので,実行可能状æ…
241‹ã®
242 * タスクの中での最高優å…
243ˆåº¦ã‚’保持する
244 * レディキューが空の時(実行可能状æ…
245‹ã®ã‚¿ã‚¹ã‚¯ãŒç„¡ã„時)は TPRI_MINTASKにする
246 */
247extern PriorityType nextpri;
248
249/*
250 * レディキュー
251 *
252 * レディキューは,実行できる状æ…
253‹ã®ã‚¿ã‚¹ã‚¯ã‚’管理するためのキューである
254 * レディキューは,優å…
255ˆåº¦ã”とのタスクキューで構成されている
256 * タスクのTCBは,該当する優å…
257ˆåº¦ã®ã‚­ãƒ¥ãƒ¼ã«ç™»éŒ²ã•ã‚Œã‚‹
258 */
259extern QUEUE ready_queue[TNUM_TPRI];
260
261/*
262 * レディキューサーチのためのビットマップ
263 *
264 * レディキューのサーチを効率よく行うために,優å…
265ˆåº¦ã”とのタスクキュー
266 * にタスクがå…
267¥ã£ã¦ã„るかどうかを示すビットマップを用意している
268 * ビットマップを使うことで,メモリアクセスの回数を減らすことができるが,
269 * ビット操作命令がå…
270…
271実していないプロセッサで,優å…
272ˆåº¦ã®æ®µéšŽæ•°ãŒå°‘ない
273 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
274 * る可能性もある
275 *
276 * 優å…
277ˆåº¦ãŒ16段階であることを仮定しているため,uint16型としている
278 */
279extern uint16 ready_primap;
280
281/*
282 * タスク初期化ブロックのエリア(kernel_mem.c)
283 */
284extern const TINIB tinib_table[];
285
286/*
287 * TCBのエリア(Os_Lcfg.c)
288 */
289extern TCB tcb_table[];
290
291/*
292 * タスク管理モジュールの初期化
293 */
294extern void task_initialize(void);
295
296/*
297 * タスクの起動
298 *
299 * 対象タスク(p_tcbで指定したタスク)を起動する
300 * (休止状æ…
301‹ã‹ã‚‰å®Ÿè¡Œã§ãã‚‹çŠ¶æ…
302‹ã«é·ç§»ã•ã›ã‚‹ï¼‰
303 * タスクの起動時に必
304要な初期化を行う
305 */
306extern boolean make_active(TCB *p_tcb);
307
308/*
309 * 実行できる状æ…
310‹ã¸ã®ç§»è¡Œ
311 *
312 * 対象タスク(p_tcbで指定したタスク)を実行できる状æ…
313‹ã«é·ç§»ã•ã›ã‚‹
314 * 対象タスクの優å…
315ˆåº¦ãŒï¼Œæœ€é«˜å„ªå…
316ˆåº¦ã‚¿ã‚¹ã‚¯ï¼ˆschedtsk)の優å…
317ˆåº¦ã‚ˆã‚Šã‚‚高
318 * い場合には,対象タスクを新しい最高優å…
319ˆåº¦ã‚¿ã‚¹ã‚¯ã¨ã—,それまでの最高
320 * 優å…
321ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’レディキューのå…
322ˆé ­ã«å…
323¥ã‚Œã‚‹
324 * そうでない場合には,対象タスクをレディキューの末尾にå…
325¥ã‚Œã‚‹
326 * 対象タスクを最高優å…
327ˆåº¦ã‚¿ã‚¹ã‚¯ã¨ã—た場合に,TRUE を返す
328 */
329extern boolean make_runnable(TCB *p_tcb);
330
331/*
332 * 実行できる状æ…
333‹ã‹ã‚‰ä»–の状æ…
334‹ã¸ã®é·ç§»
335 */
336extern void make_non_runnable(void);
337
338/*
339 * 最高優å…
340ˆé †ä½ã‚¿ã‚¹ã‚¯ã®ã‚µãƒ¼ãƒ
341 *
342 * レディキュー中の最高優å…
343ˆé †ä½ã®ã‚¿ã‚¹ã‚¯ã‚’サーチする
344 * レディキューが空の場合には,この関数を呼び出してはならない
345 */
346extern void search_schedtsk(void);
347
348/*
349 * タスクのプリエンプト
350 *
351 * 自タスクを実行可能状æ…
352‹ã«ç§»è¡Œã•ã›ï¼Œæœ€é«˜å„ªå…
353ˆåº¦ã‚¿ã‚¹ã‚¯ã‚’実行状æ…
354‹ã«ã™ã‚‹
355 * この関数から戻った後に,dispatch を呼び出して他のタスクへ切り替える
356 * ことを想定している
357 */
358extern void preempt(void);
359
360/*
361 * 実行中のタスクをSUSPENDED状æ…
362‹ã«ã™ã‚‹
363 */
364extern void suspend(void);
365
366/*
367 * リソースå…
368¨è§£æ”¾
369 */
370extern void release_taskresources(TCB *p_tcb);
371
372/*
373 * カウンタå…
374¨åˆæœŸåŒ–
375 */
376extern void cancel_taskcounters(TCB *p_tcb);
377
378/*
379 * 満了処理専用タスクの起動
380 *
381 * 条件:OS割込み禁止状æ…
382‹ã§å‘¼ã°ã‚Œã‚‹
383 */
384extern StatusType activate_task_action(OSAPCB *p_expire_osapcb, TaskType TaskID);
385
386/*
387 * 満了処理専用イベントのセット
388 *
389 * 条件:OS割込み禁止状æ…
390‹ã§å‘¼ã°ã‚Œã‚‹
391 */
392extern StatusType set_event_action(OSAPCB *p_expire_osapcb, TaskType TaskID, EventMaskType Mask);
393
394/*
395 * レディキューからタスクを削除する
396 */
397extern void remove_task_from_queue(TCB *p_tcb, PriorityType remove_task_pri);
398
399/*
400 * レディキューにå…
401¥ã£ã¦ã„るタスクを休止状æ…
402‹ã«ã™ã‚‹
403 */
404extern void suspend_ready_task(TCB *p_tcb, PriorityType remove_task_pri);
405
406/*
407 * 自タスクの強制終了
408 */
409extern void force_terminate_task(TCB *p_tcb);
410
411/*
412 * タスク不正終了時に呼ぶ関数
413 */
414extern void exit_task(void);
415
416/*
417 * OSAP所属するタスクの強制終了
418 */
419extern void force_term_osap_task(OSAPCB *p_osapcb);
420
421/*
422 * p_schedtskをレディキューのå…
423ˆé ­ã«é€€é¿
424 */
425extern void move_schedtsk(void);
426
427#endif /* TOPPERS_TASK_H_ */
Note: See TracBrowser for help on using the repository browser.