source: uKadecot/trunk/ssp/kernel/task.h@ 101

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

TOPPERS/uKadecotのソースコードを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain
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 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
14 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏE
15 * Ä”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
16 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ìŒ 
17 * •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[ƒX
18 * ƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
19 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
20 * ‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
21ƒƒ“ƒgi—˜—pŽÒƒ}
22 * ƒjƒ…
23ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•Û
24 * Ø‹K’è‚ðŒfÚ‚·‚邱‚ƁD
25 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg—p
26 * ‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±‚ƁD
27 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
28ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
29ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ì
30 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
31 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É•ñ
32 * ‚·‚邱‚ƁD
33 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹ŠQ
34 * ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD‚Ü‚½C
35 * –{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝—R‚ÉŠî‚Ã
36 * ‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
37 *
38 * –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨‚æ
39 * ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I‚ɑ΂·
40 * ‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p
41 * ‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚ð•‰
42 * ‚í‚È‚¢D
43 *
44 */
45
46#ifndef TOPPERS_TASK_H
47#define TOPPERS_TASK_H
48
49#include "kernel_impl.h"
50
51
52/*
53 * ƒ^ƒXƒN—Dæ“x‚Ì“à•”•\Œ»EŠO•”•\Œ»•ÏŠ·ƒ}ƒNƒ
54 */
55#define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI))
56
57/*
58 * ƒ^ƒXƒNID‚̍őå’likernel_cfg.cj
59 */
60extern const ID tmax_tskid;
61
62/*
63 * ƒ^ƒXƒN‚̐”
64 */
65#define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
66
67/*
68 * ŽÀs‰Â”\ó‘Ԃ̃^ƒXƒN‚ª‚È‚¢Žž‚ÉŽÀs’†ƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x‚ɐݒ肷‚é’l
69 */
70#define TSKPRI_NULL (UINT_MAX)
71
72
73/*
74 * ƒŒƒfƒBƒLƒ…
75[ƒT[ƒ`‚Ì‚½‚߂̃rƒbƒgƒ}ƒbƒv
76 */
77extern volatile uint_t ready_primap;
78
79/*
80 * ‹N“®—v‹ƒLƒ…
81[ƒCƒ“ƒO‚̃rƒbƒgƒ}ƒbƒv
82 */
83extern uint_t actque_bitmap;
84
85/*
86 * ƒfƒBƒXƒpƒbƒ`^ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‹N“®—v‹ƒtƒ‰ƒO
87 *
88 * Š„ž‚݃nƒ“ƒhƒ‰^CPU—áŠOƒnƒ“ƒhƒ‰‚̏oŒûˆ—‚ɁCƒfƒBƒXƒpƒbƒ`‚Ü‚½‚Í
89 * ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®‚ð—v‹‚·‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
90 */
91extern bool_t reqflg;
92
93/*
94 * ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô
95 *
96 * ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
97 */
98extern bool_t disdsp;
99
100/*
101 * ŽÀsó‘Ôƒ^ƒXƒN‚ÌŒ»Ý—Dæ“x
102 *
103 * ŽÀs’†‚̃^ƒXƒN‚ÉŽÀsŽž—Dæ“x‚ªÝ’肳‚ê‚Ä‚¢‚ê‚ÎŽÀsŽž—Dæ“x‚ªC
104 * Ý’肳‚ê‚Ä‚¢‚È‚¯‚ê‚΋N“®Žž—Dæ“x‚ªÝ’肳‚ê‚éD
105 */
106extern uint_t runtsk_curpri;
107
108/*
109 * ŽÀsó‘Ôƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x
110 */
111extern uint_t runtsk_ipri;
112
113/*
114 * ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ…
115[ƒ‹‚̏‰Šú‰»
116 *
117 * ‘S‚Ẵ^ƒXƒN‚ð‰Šú‰»‚·‚éDŠeƒ^ƒXƒN‚̓^ƒXƒN‘®«‚ÉTA_ACT‚ªÝ’肳‚ê‚Ä‚¢‚ê‚Î
118 * ŽÀs‰Â”\ó‘ԁC‚»‚¤‚Å‚È‚¢ê‡‚Í‹xŽ~ó‘Ô‚Æ‚È‚éD
119 *
120 * ‚Ü‚½AƒfƒBƒXƒpƒbƒ`‹–‰Âƒtƒ‰ƒO‚ðƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ԃɐݒ肷‚éD
121 *
122 * –{ŠÖ”‚̓Rƒ“ƒtƒBƒMƒ…
123ƒŒ[ƒ^‚ª¶¬‚·‚éobject_initializeˆÈŠO‚ŌĂñ‚Å‚Í‚È‚ç‚È‚¢D
124 */
125extern void initialize_task(void);
126
127/*
128 * ƒ^ƒXƒN‚Ì‹N“®
129 *
130 * ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ðŽÀs‰Â”\ó‘Ô‚É‘JˆÚ‚³‚¹‚éD
131 * –{ŠÖ”‚ðŽÀs‚·‚邱‚Æ‚É‚æ‚èƒvƒŠƒGƒ“ƒvƒg‚ª”­¶‚·‚éê‡‚Ítrue‚ðC
132 * ‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
133 *
134 * –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
135 * ŒÄ‚яo‚·‚±‚ƁD
136 */
137extern bool_t make_active(uint_t ipri);
138
139/*
140 * Žw’肵‚½‹N“®Žž—Dæ“x‚̃^ƒXƒN‚ª‹xŽ~ó‘Ô‚©‚Ç‚¤‚©‚̃eƒXƒg
141 *
142 * ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ª‹xŽ~ó‘Ô‚Å‚ ‚ê‚Î
143 * true‚ð‚»‚êˆÈŠOiŽÀs‰Â”\ó‘ԁCŽÀs‰Â”\ó‘ԁj‚Å‚ ‚ê‚Îfalse‚ð•Ô‚·D
144 *
145 * –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
146 * ŒÄ‚яo‚·‚±‚ƁD
147 */
148extern bool_t test_dormant(uint_t ipri);
149
150/*
151 * Å‚—Dæ‡ˆÊƒ^ƒXƒN‚̃T[ƒ`
152 *
153 * ŽÀs‰Â”\ó‘Ԃ̃^ƒXƒN‚Ì’†‚©‚çÅ‚à—Dæ‡ˆÊ‚ª‚‚¢ƒ^ƒXƒN‚̏‰Šú—Dæ“x‚ð
154 * •Ô‚·D
155 *
156 * –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
157 * ŒÄ‚яo‚·‚±‚ƁD
158 */
159extern uint_t search_schedtsk(void);
160
161/*
162 * ƒ^ƒXƒN‚ÌŽÀs
163 *
164 * ipri‚ÅŽw’肵‚½‹N“®Žž—Dæ“x‚ðŽ‚Âƒ^ƒXƒN‚ðŽÀs‚·‚éD
165 * –{ŠÖ”‚©‚çŽÀs‚µ‚½ƒ^ƒXƒN‚©‚çƒT[ƒrƒXƒR[ƒ‹‚ðŒo—R‚µ‚Ä
166 * Ä‹A“I‚ɌĂ΂ê‚邱‚Æ‚à‚ ‚éD
167 *
168 * –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
169 * ŒÄ‚яo‚·‚±‚ƁD
170 */
171extern void run_task(uint_t ipri);
172
173/*
174 * ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`ƒƒ
175 *
176 * ƒJ[ƒlƒ‹‰Šú‰»Š®—¹Œã‚ɌĂяo‚³‚êCÅ‚—Dæ‡ˆÊ‚Æ‚È‚Á‚½ƒ^ƒXƒN‚ðŽÀs‚·‚éD
177 *
178 * –{ŠÖ”‚ÍCPUƒƒbƒNó‘ԁC‘SŠ„ž‚݃ƒbƒN‰ðœó‘ԁCŠ„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å
179 * ŒÄ‚яo‚·‚±‚ƁD
180 * ‚È‚¨C–{ŠÖ”‚©‚ç‚̓Šƒ^[ƒ“‚µ‚È‚¢D
181 *
182 */
183extern void dispatcher(void) NoReturn;
184
185/*
186 * ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“xŽæ“¾(ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p)
187 *
188 * tskid‚ÅŽw’肵‚½ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚ðŽæ“¾‚·‚éD
189 * tskid‚ÍTMIN_TSKIDˆÈãCtmax_tskidˆÈ‰º‚Ì’lC‚à‚µ‚­‚ÍTSK_SELF‚Å
190 * Žw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
191 */
192extern uint_t get_ipri_self(ID tskid);
193
194/*
195 * ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“xŽæ“¾(”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p)
196 *
197 * tskid‚ÅŽw’肵‚½ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“x‚ðŽæ“¾‚·‚éD
198 * tskid‚ÍTMIN_TSKIDˆÈãCtmax_tskidˆÈ‰º‚Ì’l‚ÅŽw’肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
199 */
200extern uint_t get_ipri(ID tskid);
201
202
203/* ‹N“®—v‹ƒLƒ…
204[ƒCƒ“ƒOƒrƒbƒgƒ}ƒbƒv‚Ì‘€ì */
205#define ACTQUE_BIT(ipri) (1U << (ipri))
206
207/* ‹N“®—v‹ƒLƒ…
208[ƒCƒ“ƒO‚̃Zƒbƒg */
209Inline
210void actque_set(uint_t ipri)
211{
212 actque_bitmap |= ACTQUE_BIT(ipri);
213}
214
215/* ‹N“®—v‹ƒLƒ…
216[ƒCƒ“ƒO‚̃NƒŠƒA */
217Inline
218void actque_clear(uint_t ipri)
219{
220 actque_bitmap &= ~ACTQUE_BIT(ipri);
221}
222
223/* ‹N“®—v‹ƒLƒ…
224[ƒCƒ“ƒO”‚̃`ƒFƒbƒN */
225Inline
226bool_t actque_test(uint_t ipri)
227{
228 return ((actque_bitmap & ACTQUE_BIT(ipri)) != 0U);
229}
230
231
232#endif /* TOPPERS_TASK_H */
Note: See TracBrowser for help on using the repository browser.