source: asp_ewarm/asp-1.7.0/extension/dcre/kernel/task_manage.c@ 61

Last change on this file since 61 was 61, checked in by ertl-honda, 11 years ago

ASP for EWARM のコミット.

File size: 12.1 KB
Line 
1/*
2 * TOPPERS/ASP Kernel
3 * Toyohashi Open Platform for Embedded Real-Time Systems/
4 * Advanced Standard Profile Kernel
5 *
6 * Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
7 * Toyohashi Univ. of Technology, JAPAN
8 * Copyright (C) 2005-2010 by Embedded and Real-Time Systems Laboratory
9 * Graduate School of Information Science, Nagoya Univ., JAPAN
10 *
11 * ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
12 * ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
13 * •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
14 * (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
15 * Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
16 * ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
17 * (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
18 * —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ…
19ƒƒ“ƒgi—˜—p
20 * ŽÒƒ}ƒjƒ…
21ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
22 * ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
23 * (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
24 * —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
25 * ‚ƁD
26 * (a) Ä”z•z‚É”º‚¤ƒhƒLƒ…
27ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ…
28ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
29 * ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
30 * (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
31 * •ñ‚·‚邱‚ƁD
32 * (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
33 * ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
34 * ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
35 * —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
36 * –Ɛӂ·‚邱‚Ɓ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
41 * ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
42 * ‚̐ӔC‚𕉂í‚È‚¢D
43 *
44 * @(#) $Id: task_manage.c 2018 2010-12-31 13:43:05Z ertl-hiro $
45 */
46
47/*
48 * ƒ^ƒXƒNŠÇ—‹@”\
49 */
50
51#include "kernel_impl.h"
52#include "check.h"
53#include "task.h"
54#include "wait.h"
55
56/*
57 * ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
58 */
59#ifndef LOG_ACRE_TSK_ENTER
60#define LOG_ACRE_TSK_ENTER(pk_ctsk)
61#endif /* LOG_ACRE_TSK_ENTER */
62
63#ifndef LOG_ACRE_TSK_LEAVE
64#define LOG_ACRE_TSK_LEAVE(ercd)
65#endif /* LOG_ACRE_TSK_LEAVE */
66
67#ifndef LOG_DEL_TSK_ENTER
68#define LOG_DEL_TSK_ENTER(tskid)
69#endif /* LOG_DEL_TSK_ENTER */
70
71#ifndef LOG_DEL_TSK_LEAVE
72#define LOG_DEL_TSK_LEAVE(ercd)
73#endif /* LOG_DEL_TSK_LEAVE */
74
75#ifndef LOG_ACT_TSK_ENTER
76#define LOG_ACT_TSK_ENTER(tskid)
77#endif /* LOG_ACT_TSK_ENTER */
78
79#ifndef LOG_ACT_TSK_LEAVE
80#define LOG_ACT_TSK_LEAVE(ercd)
81#endif /* LOG_ACT_TSK_LEAVE */
82
83#ifndef LOG_IACT_TSK_ENTER
84#define LOG_IACT_TSK_ENTER(tskid)
85#endif /* LOG_IACT_TSK_ENTER */
86
87#ifndef LOG_IACT_TSK_LEAVE
88#define LOG_IACT_TSK_LEAVE(ercd)
89#endif /* LOG_IACT_TSK_LEAVE */
90
91#ifndef LOG_CAN_ACT_ENTER
92#define LOG_CAN_ACT_ENTER(tskid)
93#endif /* LOG_CAN_ACT_ENTER */
94
95#ifndef LOG_CAN_ACT_LEAVE
96#define LOG_CAN_ACT_LEAVE(ercd)
97#endif /* LOG_CAN_ACT_LEAVE */
98
99#ifndef LOG_EXT_TSK_ENTER
100#define LOG_EXT_TSK_ENTER()
101#endif /* LOG_EXT_TSK_ENTER */
102
103#ifndef LOG_EXT_TSK_LEAVE
104#define LOG_EXT_TSK_LEAVE(ercd)
105#endif /* LOG_EXT_TSK_LEAVE */
106
107#ifndef LOG_TER_TSK_ENTER
108#define LOG_TER_TSK_ENTER(tskid)
109#endif /* LOG_TER_TSK_ENTER */
110
111#ifndef LOG_TER_TSK_LEAVE
112#define LOG_TER_TSK_LEAVE(ercd)
113#endif /* LOG_TER_TSK_LEAVE */
114
115#ifndef LOG_CHG_PRI_ENTER
116#define LOG_CHG_PRI_ENTER(tskid, tskpri)
117#endif /* LOG_CHG_PRI_ENTER */
118
119#ifndef LOG_CHG_PRI_LEAVE
120#define LOG_CHG_PRI_LEAVE(ercd)
121#endif /* LOG_CHG_PRI_LEAVE */
122
123#ifndef LOG_GET_PRI_ENTER
124#define LOG_GET_PRI_ENTER(tskid, p_tskpri)
125#endif /* LOG_GET_PRI_ENTER */
126
127#ifndef LOG_GET_PRI_LEAVE
128#define LOG_GET_PRI_LEAVE(ercd, tskpri)
129#endif /* LOG_GET_PRI_LEAVE */
130
131#ifndef LOG_GET_INF_ENTER
132#define LOG_GET_INF_ENTER(p_exinf)
133#endif /* LOG_GET_INF_ENTER */
134
135#ifndef LOG_GET_INF_LEAVE
136#define LOG_GET_INF_LEAVE(ercd, exinf)
137#endif /* LOG_GET_INF_LEAVE */
138
139/*
140 * ƒ^ƒXƒN‚̐¶¬
141 */
142#ifdef TOPPERS_acre_tsk
143
144ER_UINT
145acre_tsk(const T_CTSK *pk_ctsk)
146{
147 TCB *p_tcb;
148 TINIB *p_tinib;
149 ATR tskatr;
150 STK_T *stk;
151 ER ercd;
152
153 LOG_ACRE_TSK_ENTER(pk_ctsk);
154 CHECK_TSKCTX_UNL();
155 CHECK_RSATR(pk_ctsk->tskatr, TA_ACT|TARGET_TSKATR);
156 CHECK_ALIGN_FUNC(pk_ctsk->task);
157 CHECK_NONNULL_FUNC(pk_ctsk->task);
158 CHECK_TPRI(pk_ctsk->itskpri);
159 CHECK_STKSZ_MIN(pk_ctsk->stksz);
160 CHECK_ALIGN_STKSZ(pk_ctsk->stksz);
161 CHECK_ALIGN_STACK(pk_ctsk->stk);
162 tskatr = pk_ctsk->tskatr;
163 stk = pk_ctsk->stk;
164
165 t_lock_cpu();
166 if (queue_empty(&free_tcb)) {
167 ercd = E_NOID;
168 }
169 else {
170 if (stk == NULL) {
171 stk = kernel_malloc(pk_ctsk->stksz);
172 tskatr |= TA_MEMALLOC;
173 }
174 if (stk == NULL) {
175 ercd = E_NOMEM;
176 }
177 else {
178 p_tcb = ((TCB *) queue_delete_next(&free_tcb));
179 p_tinib = (TINIB *)(p_tcb->p_tinib);
180 p_tinib->tskatr = tskatr;
181 p_tinib->exinf = pk_ctsk->exinf;
182 p_tinib->task = pk_ctsk->task;
183 p_tinib->ipriority = INT_PRIORITY(pk_ctsk->itskpri);
184#ifdef USE_TSKINICTXB
185 init_tskinictxb(&(p_tinib->tskinictxb), stk, pk_ctsk);
186#else /* USE_TSKINICTXB */
187 p_tinib->stksz = pk_ctsk->stksz;
188 p_tinib->stk = stk;
189#endif /* USE_TSKINICTXB */
190 p_tinib->texatr = TA_NULL;
191 p_tinib->texrtn = NULL;
192
193 p_tcb->actque = false;
194 make_dormant(p_tcb);
195 if ((p_tcb->p_tinib->tskatr & TA_ACT) != 0U) {
196 make_active(p_tcb);
197 }
198 ercd = TSKID(p_tcb);
199 }
200 }
201 t_unlock_cpu();
202
203 error_exit:
204 LOG_ACRE_TSK_LEAVE(ercd);
205 return(ercd);
206}
207
208#endif /* TOPPERS_acre_tsk */
209
210/*
211 * ƒ^ƒXƒN‚̍폜
212 */
213#ifdef TOPPERS_del_tsk
214
215ER
216del_tsk(ID tskid)
217{
218 TCB *p_tcb;
219 TINIB *p_tinib;
220 ER ercd;
221
222 LOG_DEL_TSK_ENTER(tskid);
223 CHECK_TSKCTX_UNL();
224 CHECK_TSKID(tskid);
225 p_tcb = get_tcb(tskid);
226
227 t_lock_cpu();
228 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
229 ercd = E_NOEXS;
230 }
231 else if (TSKID(p_tcb) > tmax_stskid && TSTAT_DORMANT(p_tcb->tstat)) {
232 p_tinib = (TINIB *)(p_tcb->p_tinib);
233#ifdef USE_TSKINICTXB
234 term_tskinictxb(&(p_tinib->tskinictxb));
235#else /* USE_TSKINICTXB */
236 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) {
237 kernel_free(p_tinib->stk);
238 }
239#endif /* USE_TSKINICTXB */
240 p_tinib->tskatr = TA_NOEXS;
241 queue_insert_prev(&free_tcb, &(p_tcb->task_queue));
242 ercd = E_OK;
243 }
244 else {
245 ercd = E_OBJ;
246 }
247 t_unlock_cpu();
248
249 error_exit:
250 LOG_DEL_TSK_LEAVE(ercd);
251 return(ercd);
252}
253
254#endif /* TOPPERS_del_tsk */
255
256/*
257 * ƒ^ƒXƒN‚Ì‹N“®
258 */
259#ifdef TOPPERS_act_tsk
260
261ER
262act_tsk(ID tskid)
263{
264 TCB *p_tcb;
265 ER ercd;
266
267 LOG_ACT_TSK_ENTER(tskid);
268 CHECK_TSKCTX_UNL();
269 CHECK_TSKID_SELF(tskid);
270 p_tcb = get_tcb_self(tskid);
271
272 t_lock_cpu();
273 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
274 ercd = E_NOEXS;
275 }
276 else if (TSTAT_DORMANT(p_tcb->tstat)) {
277 if (make_active(p_tcb)) {
278 dispatch();
279 }
280 ercd = E_OK;
281 }
282 else if (!(p_tcb->actque)) {
283 p_tcb->actque = true;
284 ercd = E_OK;
285 }
286 else {
287 ercd = E_QOVR;
288 }
289 t_unlock_cpu();
290
291 error_exit:
292 LOG_ACT_TSK_LEAVE(ercd);
293 return(ercd);
294}
295
296#endif /* TOPPERS_act_tsk */
297
298/*
299 * ƒ^ƒXƒN‚Ì‹N“®i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
300 */
301#ifdef TOPPERS_iact_tsk
302
303ER
304iact_tsk(ID tskid)
305{
306 TCB *p_tcb;
307 ER ercd;
308
309 LOG_IACT_TSK_ENTER(tskid);
310 CHECK_INTCTX_UNL();
311 CHECK_TSKID(tskid);
312 p_tcb = get_tcb(tskid);
313
314 i_lock_cpu();
315 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
316 ercd = E_NOEXS;
317 }
318 else if (TSTAT_DORMANT(p_tcb->tstat)) {
319 if (make_active(p_tcb)) {
320 reqflg = true;
321 }
322 ercd = E_OK;
323 }
324 else if (!(p_tcb->actque)) {
325 p_tcb->actque = true;
326 ercd = E_OK;
327 }
328 else {
329 ercd = E_QOVR;
330 }
331 i_unlock_cpu();
332
333 error_exit:
334 LOG_IACT_TSK_LEAVE(ercd);
335 return(ercd);
336}
337
338#endif /* TOPPERS_iact_tsk */
339
340/*
341 * ƒ^ƒXƒN‹N“®—v‹‚̃Lƒƒƒ“ƒZƒ‹
342 */
343#ifdef TOPPERS_can_act
344
345ER_UINT
346can_act(ID tskid)
347{
348 TCB *p_tcb;
349 ER_UINT ercd;
350
351 LOG_CAN_ACT_ENTER(tskid);
352 CHECK_TSKCTX_UNL();
353 CHECK_TSKID_SELF(tskid);
354 p_tcb = get_tcb_self(tskid);
355
356 t_lock_cpu();
357 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
358 ercd = E_NOEXS;
359 }
360 else {
361 ercd = p_tcb->actque ? 1 : 0;
362 }
363 p_tcb->actque = false;
364 t_unlock_cpu();
365
366 error_exit:
367 LOG_CAN_ACT_LEAVE(ercd);
368 return(ercd);
369}
370
371#endif /* TOPPERS_can_act */
372
373/*
374 * Ž©ƒ^ƒXƒN‚̏I—¹
375 */
376#ifdef TOPPERS_ext_tsk
377
378ER
379ext_tsk(void)
380{
381 ER ercd;
382
383 LOG_EXT_TSK_ENTER();
384 CHECK_TSKCTX();
385
386 if (t_sense_lock()) {
387 /*
388 * CPUƒƒbƒNó‘Ô‚Åext_tsk‚ªŒÄ‚΂ꂽê‡‚́CCPUƒƒbƒN‚ð‰ðœ‚µ
389 * ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·‚éDŽÀ‘•ã‚́CƒT[ƒrƒXƒR[ƒ‹“à‚Å‚ÌCPU
390 * ƒƒbƒN‚ðÈ—ª‚·‚ê‚΂悢‚¾‚¯D
391 */
392 }
393 else {
394 t_lock_cpu();
395 }
396 if (disdsp) {
397 /*
398 * ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Åext_tsk‚ªŒÄ‚΂ꂽê‡‚́CƒfƒBƒXƒpƒb
399 * ƒ`‹–‰Âó‘Ô‚É‚µ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·‚éD
400 */
401 disdsp = false;
402 }
403 if (!ipmflg) {
404 /*
405 * Š„ž‚Ý—Dæ“xƒ}ƒXƒNiIPMj‚ªTIPM_ENAALLˆÈŠO‚̏ó‘Ô‚Åext_tsk
406 * ‚ªŒÄ‚΂ꂽê‡‚́CIPM‚ðTIPM_ENAALL‚É‚µ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·
407 * ‚éD
408 */
409 t_set_ipm(TIPM_ENAALL);
410 ipmflg = true;
411 }
412 dspflg = true;
413
414 (void) make_non_runnable(p_runtsk);
415 make_dormant(p_runtsk);
416 if (p_runtsk->actque) {
417 p_runtsk->actque = false;
418 (void) make_active(p_runtsk);
419 }
420 exit_and_dispatch();
421 ercd = E_SYS;
422
423 error_exit:
424 LOG_EXT_TSK_LEAVE(ercd);
425 return(ercd);
426}
427
428#endif /* TOPPERS_ext_tsk */
429
430/*
431 * ƒ^ƒXƒN‚Ì‹­§I—¹
432 */
433#ifdef TOPPERS_ter_tsk
434
435ER
436ter_tsk(ID tskid)
437{
438 TCB *p_tcb;
439 ER ercd;
440
441 LOG_TER_TSK_ENTER(tskid);
442 CHECK_TSKCTX_UNL();
443 CHECK_TSKID(tskid);
444 p_tcb = get_tcb(tskid);
445 CHECK_NONSELF(p_tcb);
446
447 t_lock_cpu();
448 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
449 ercd = E_NOEXS;
450 }
451 else if (TSTAT_DORMANT(p_tcb->tstat)) {
452 ercd = E_OBJ;
453 }
454 else {
455 if (TSTAT_RUNNABLE(p_tcb->tstat)) {
456 /*
457 * p_tcb‚ÍŽ©ƒ^ƒXƒN‚Å‚È‚¢‚½‚߁CiƒVƒ“ƒOƒ‹ƒvƒƒZƒbƒT‚ł́jŽÀ
458 * só‘Ô‚Å‚È‚­Cmake_non_runnable(p_tcb)‚Ń^ƒXƒNƒfƒBƒXƒpƒb
459 * ƒ`‚ª•K—v‚ɂȂ邱‚Æ‚Í‚È‚¢D
460 */
461 (void) make_non_runnable(p_tcb);
462 }
463 else if (TSTAT_WAITING(p_tcb->tstat)) {
464 wait_dequeue_wobj(p_tcb);
465 wait_dequeue_tmevtb(p_tcb);
466 }
467 make_dormant(p_tcb);
468 if (p_tcb->actque) {
469 p_tcb->actque = false;
470 if (make_active(p_tcb)) {
471 dispatch();
472 }
473 }
474 ercd = E_OK;
475 }
476 t_unlock_cpu();
477
478 error_exit:
479 LOG_TER_TSK_LEAVE(ercd);
480 return(ercd);
481}
482
483#endif /* TOPPERS_ter_tsk */
484
485/*
486 * ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚̕ύX
487 */
488#ifdef TOPPERS_chg_pri
489
490ER
491chg_pri(ID tskid, PRI tskpri)
492{
493 TCB *p_tcb;
494 uint_t newpri;
495 ER ercd;
496
497 LOG_CHG_PRI_ENTER(tskid, tskpri);
498 CHECK_TSKCTX_UNL();
499 CHECK_TSKID_SELF(tskid);
500 CHECK_TPRI_INI(tskpri);
501 p_tcb = get_tcb_self(tskid);
502 newpri = (tskpri == TPRI_INI) ? p_tcb->p_tinib->ipriority
503 : INT_PRIORITY(tskpri);
504
505 t_lock_cpu();
506 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
507 ercd = E_NOEXS;
508 }
509 else if (TSTAT_DORMANT(p_tcb->tstat)) {
510 ercd = E_OBJ;
511 }
512 else {
513 if (change_priority(p_tcb, newpri)) {
514 dispatch();
515 }
516 ercd = E_OK;
517 }
518 t_unlock_cpu();
519
520 error_exit:
521 LOG_CHG_PRI_LEAVE(ercd);
522 return(ercd);
523}
524
525#endif /* TOPPERS_chg_pri */
526
527/*
528 * ƒ^ƒXƒN—Dæ“x‚ÌŽQÆ
529 */
530#ifdef TOPPERS_get_pri
531
532ER
533get_pri(ID tskid, PRI *p_tskpri)
534{
535 TCB *p_tcb;
536 ER ercd;
537
538 LOG_GET_PRI_ENTER(tskid, p_tskpri);
539 CHECK_TSKCTX_UNL();
540 CHECK_TSKID_SELF(tskid);
541 p_tcb = get_tcb_self(tskid);
542
543 t_lock_cpu();
544 if (p_tcb->p_tinib->tskatr == TA_NOEXS) {
545 ercd = E_NOEXS;
546 }
547 else if (TSTAT_DORMANT(p_tcb->tstat)) {
548 ercd = E_OBJ;
549 }
550 else {
551 *p_tskpri = EXT_TSKPRI(p_tcb->priority);
552 ercd = E_OK;
553 }
554 t_unlock_cpu();
555
556 error_exit:
557 LOG_GET_PRI_LEAVE(ercd, *p_tskpri);
558 return(ercd);
559}
560
561#endif /* TOPPERS_get_pri */
562
563/*
564 * Ž©ƒ^ƒXƒN‚ÌŠg’£î•ñ‚ÌŽQÆ
565 */
566#ifdef TOPPERS_get_inf
567
568ER
569get_inf(intptr_t *p_exinf)
570{
571 ER ercd;
572
573 LOG_GET_INF_ENTER(p_exinf);
574 CHECK_TSKCTX_UNL();
575
576 t_lock_cpu();
577 *p_exinf = p_runtsk->p_tinib->exinf;
578 ercd = E_OK;
579 t_unlock_cpu();
580
581 error_exit:
582 LOG_GET_INF_LEAVE(ercd, *p_exinf);
583 return(ercd);
584}
585
586#endif /* TOPPERS_get_inf */
Note: See TracBrowser for help on using the repository browser.