Ignore:
Timestamp:
Mar 8, 2016, 8:37:45 PM (8 years ago)
Author:
coas-nagasima
Message:

MIMEにSJISを設定

Location:
UsbWattMeter/trunk/asp_dcre/kernel
Files:
45 edited

Legend:

Unmodified
Added
Removed
  • UsbWattMeter/trunk/asp_dcre/kernel/alarm.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
     44 *              アラームハンドラ機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_ALM_ENTER
     
    121117
    122118/*
    123  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̐”
     119 *  アラームハンドラの数
    124120 */
    125121#define tnum_alm        ((uint_t)(tmax_almid - TMIN_ALMID + 1))
     
    127123
    128124/*
    129  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID‚©‚çƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     125 *  アラームハンドラIDからアラームハンドラ管理ブロックを取り出すためのマクロ
    130126 */
    131127#define INDEX_ALM(almid)        ((uint_t)((almid) - TMIN_ALMID))
     
    135131
    136132/*
    137  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     133 *  使用していないアラームハンドラ管理ブロックのリスト
    138134 *
    139  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̐擪‚ɂ̓Lƒ
    140 [‚ɂ‚Ȃ®‚½‚߂̗̈悪‚È
    141  *  ‚¢‚½‚߁Cƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒNitmevtbj‚̗̈æ‚ð—p‚¢‚éD
     135 *  アラームハンドラ管理ブロックの先頭にはキューにつなぐための領域がな
     136 *  いため,タイムイベントブロック(tmevtb)の領域を用いる.
    142137 */
    143138QUEUE   free_almcb;
    144139
    145140/*
    146  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\‚̏‰Šú‰»
     141 *  アラームハンドラ機能の初期化
    147142 */
    148143void
     
    171166
    172167/*
    173  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̐¶¬
     168 *  アラームハンドラの生成
    174169 */
    175170#ifdef TOPPERS_acre_alm
     
    213208
    214209/*
    215  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̍폜
     210 *  アラームハンドラの削除
    216211 */
    217212#ifdef TOPPERS_del_alm
     
    257252
    258253/*
    259  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ìŠJŽn
     254 *  アラームハンドラの動作開始
    260255 */
    261256#ifdef TOPPERS_sta_alm
     
    298293
    299294/*
    300  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ìŠJŽni”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     295 *  アラームハンドラの動作開始(非タスクコンテキスト用)
    301296 */
    302297#ifdef TOPPERS_ista_alm
     
    339334
    340335/*
    341  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ì’âŽ~
     336 *  アラームハンドラの動作停止
    342337 */
    343338#ifdef TOPPERS_stp_alm
     
    375370
    376371/*
    377  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ì’âŽ~i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     372 *  アラームハンドラの動作停止(非タスクコンテキスト用)
    378373 */
    379374#ifdef TOPPERS_istp_alm
     
    411406
    412407/*
    413  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̏ó‘ÔŽQÆ
     408 *  アラームハンドラの状態参照
    414409 */
    415410#ifdef TOPPERS_ref_alm
     
    450445
    451446/*
    452  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹N“®ƒ‹[ƒ`ƒ“
     447 *  アラームハンドラ起動ルーチン
    453448 */
    454449#ifdef TOPPERS_almcal
     
    460455
    461456        /*
    462          *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ð’âŽ~ó‘Ô‚É‚·‚éD
     457         *  アラームハンドラを停止状態にする.
    463458         */
    464459        p_almcb->almsta = false;
    465460
    466461        /*
    467          *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ðCCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·D
     462         *  アラームハンドラを,CPUロック解除状態で呼び出す.
    468463         */
    469464        saved_ipm = i_get_ipm();
  • UsbWattMeter/trunk/asp_dcre/kernel/alarm.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\
     44 *              アラームハンドラ機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     54 *  アラームハンドラ初期化ブロック
    5955 */
    6056typedef struct alarm_handler_initialization_block {
    61         ATR                     almatr;                 /* ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‘®« */
    62         intptr_t        exinf;                  /* ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚ÌŠg’£î•ñ */
    63         ALMHDR          almhdr;                 /* ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì‹N“®”Ô’n */
     57        ATR                     almatr;                 /* アラームハンドラ属性 */
     58        intptr_t        exinf;                  /* アラームハンドラの拡張情報 */
     59        ALMHDR          almhdr;                 /* アラームハンドラの起動番地 */
    6460} ALMINIB;
    6561
    6662/*
    67  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN
     63 *  アラームハンドラ管理ブロック
    6864 */
    6965typedef struct alarm_handler_control_block {
    70         const ALMINIB *p_alminib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    71         bool_t          almsta;                 /* ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô */
    72         TMEVTB          tmevtb;                 /* ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN */
     66        const ALMINIB *p_alminib;       /* 初期化ブロックへのポインタ */
     67        bool_t          almsta;                 /* アラームハンドラの動作状態 */
     68        TMEVTB          tmevtb;                 /* タイムイベントブロック */
    7369} ALMCB;
    7470
    7571/*
    76  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     72 *  使用していないアラームハンドラ管理ブロックのリスト
    7773 */
    7874extern QUEUE    free_almcb;
    7975
    8076/*
    81  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID‚̍őå’likernel_cfg.cj
     77 *  アラームハンドラIDの最大値(kernel_cfg.c)
    8278 */
    8379extern const ID tmax_almid;
     
    8581
    8682/*
    87  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     83 *  アラームハンドラ初期化ブロックのエリア(kernel_cfg.c)
    8884 */
    8985extern const ALMINIB    alminib_table[];
     
    9187
    9288/*
    93  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     89 *  アラームハンドラ管理ブロックのエリア(kernel_cfg.c)
    9490 */
    9591extern ALMCB    almcb_table[];
    9692
    9793/*
    98  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚©‚çƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID‚ðŽæ‚èo‚·‚½‚ß‚Ì
    99  *  ƒ}ƒNƒ
     94 *  アラームハンドラ管理ブロックからアラームハンドラIDを取り出すための
     95 *  マクロ
    10096 */
    10197#define ALMID(p_almcb)  ((ID)(((p_almcb) - almcb_table) + TMIN_ALMID))
    10298
    10399/*
    104  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹@”\‚̏‰Šú‰»
     100 *  アラームハンドラ機能の初期化
    105101 */
    106102extern void     initialize_alarm(void);
    107103
    108104/*
    109  *  ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‹N“®ƒ‹[ƒ`ƒ“
     105 *  アラームハンドラ起動ルーチン
    110106 */
    111107extern void     call_almhdr(ALMCB *p_almcb);
  • UsbWattMeter/trunk/asp_dcre/kernel/allfunc.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
    35  *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     9 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
     31 *
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id$
     
    4440
    4541/*
    46  *              ‚·‚ׂĂ̊֐”‚ðƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì’è‹`
     42 *              すべての関数をコンパイルするための定義
    4743 */
    4844
  • UsbWattMeter/trunk/asp_dcre/kernel/check.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒGƒ‰[ƒ`ƒFƒbƒN—pƒ}ƒNƒ
     44 *              エラーチェック用マクロ
    4945 */
    5046
     
    5349
    5450/*
    55  *  —\–ñ‘®«ƒGƒ‰[‚̃`ƒFƒbƒNiE_PARj
     51 *  予約属性エラーのチェック(E_PAR)
    5652 */
    5753#define CHECK_RSATR(atr, valid_atr) do {                                        \
     
    6359
    6460/*
    65  *  —Dæ“x‚͈̔͂̔»’è
     61 *  優先度の範囲の判定
    6662 */
    6763#define VALID_TPRI(tpri)        (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI)
     
    8076
    8177/*
    82  *  ƒ^ƒXƒN—Dæ“x‚̃`ƒFƒbƒNiE_PARj
     78 *  タスク優先度のチェック(E_PAR)
    8379 */
    8480#define CHECK_TPRI(tpri) do {                                                           \
     
    104100
    105101/*
    106  *  ƒf[ƒ^—Dæ“x‚̃`ƒFƒbƒNiE_PARj
     102 *  データ優先度のチェック(E_PAR)
    107103 */
    108104#define CHECK_DPRI(dpri) do {                                                           \
     
    114110
    115111/*
    116  *  ƒƒbƒZ[ƒW—Dæ“x‚̃`ƒFƒbƒNiE_PARj
     112 *  メッセージ優先度のチェック(E_PAR)
    117113 */
    118114#define CHECK_MPRI(mpri) do {                                                           \
     
    124120
    125121/*
    126  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“—Dæ“x‚̃`ƒFƒbƒNiE_PARj
     122 *  割込みサービスルーチン優先度のチェック(E_PAR)
    127123 */
    128124#define CHECK_ISRPRI(isrpri) do {                                                       \
     
    134130
    135131/*
    136  *  ƒ^ƒCƒ€ƒAƒEƒgŽw’è’l‚̃`ƒFƒbƒNiE_PARj
     132 *  タイムアウト指定値のチェック(E_PAR)
    137133 */
    138134#define CHECK_TMOUT(tmout) do {                                                         \
     
    144140
    145141/*
    146  *  Š„ž‚Ý—Dæ“x‚̃`ƒFƒbƒNiE_PARj
     142 *  割込み優先度のチェック(E_PAR)
    147143 */
    148144#define CHECK_INTPRI_CHGIPM(intpri) do {                                        \
     
    154150
    155151/*
    156  *  Š„ž‚ݔԍ†‚̃`ƒFƒbƒNiE_PARj
     152 *  割込み番号のチェック(E_PAR)
    157153 */
    158154#define CHECK_INTNO_CREISR(intno) do {                                          \
     
    171167
    172168/*
    173  *  ƒAƒ‰ƒCƒ“‚µ‚Ä‚¢‚é‚©‚Ì”»’è
     169 *  アラインしているかの判定
    174170 */
    175171#define ALIGNED(val, align)             ((((uintptr_t)(val)) & ((align) - 1U)) == 0U)
     
    206202
    207203/*
    208  *  NULL‚Å‚È‚¢‚±‚Ƃ̃`ƒFƒbƒN
     204 *  NULLでないことのチェック
    209205 */
    210206#ifdef CHECK_FUNC_NONNULL
     
    215211
    216212/*
    217  *  ŠÖ”‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
     213 *  関数の先頭番地のチェック(E_PAR)
    218214 */
    219215#define CHECK_ALIGN_FUNC(func) do {                                                     \
     
    232228
    233229/*
    234  *  ƒXƒ^ƒbƒNƒTƒCƒY‚̃`ƒFƒbƒNiE_PARj
     230 *  スタックサイズのチェック(E_PAR)
    235231 */
    236232#define CHECK_ALIGN_STKSZ(stksz) do {                                           \
     
    242238
    243239/*
    244  *  ƒXƒ^ƒbƒN‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
     240 *  スタックの先頭番地のチェック(E_PAR)
    245241 */
    246242#define CHECK_ALIGN_STACK(stack) do {                                           \
     
    252248
    253249/*
    254  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
     250 *  固定長メモリプール領域の先頭番地のチェック(E_PAR)
    255251 */
    256252#define CHECK_ALIGN_MPF(mpf) do {                                                       \
     
    262258
    263259/*
    264  *  ŠÇ——̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒNiE_PARj
     260 *  管理領域の先頭番地のチェック(E_PAR)
    265261 */
    266262#define CHECK_ALIGN_MB(mb) do {                                                         \
     
    272268
    273269/*
    274  *  ‚»‚Ì‘¼‚̃pƒ‰ƒ[ƒ^ƒGƒ‰[‚̃`ƒFƒbƒNiE_PARj
     270 *  その他のパラメータエラーのチェック(E_PAR)
    275271 */
    276272#define CHECK_PAR(exp) do {                                                                     \
     
    282278
    283279/*
    284  *  ƒIƒuƒWƒFƒNƒgID‚͈̔͂̔»’è
     280 *  オブジェクトIDの範囲の判定
    285281 */
    286282#define VALID_TSKID(tskid)      (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid)
     
    296292
    297293/*
    298  *  ƒIƒuƒWƒFƒNƒgID‚̃`ƒFƒbƒNiE_IDj
     294 *  オブジェクトIDのチェック(E_ID)
    299295 */
    300296#define CHECK_TSKID(tskid) do {                                                         \
     
    376372
    377373/*
    378  *  ŒÄo‚µƒRƒ“ƒeƒLƒXƒg‚̃`ƒFƒbƒNiE_CTXj
     374 *  呼出しコンテキストのチェック(E_CTX)
    379375 */
    380376#define CHECK_TSKCTX() do {                                                                     \
     
    393389
    394390/*
    395  *  ŒÄo‚µƒRƒ“ƒeƒLƒXƒg‚ÆCPUƒƒbƒNó‘Ԃ̃`ƒFƒbƒNiE_CTXj
     391 *  呼出しコンテキストとCPUロック状態のチェック(E_CTX)
    396392 */
    397393#define CHECK_TSKCTX_UNL() do {                                                         \
     
    410406
    411407/*
    412  *  ƒfƒBƒXƒpƒbƒ`•Û—¯ó‘Ô‚Å‚È‚¢‚©‚̃`ƒFƒbƒNiE_CTXj
     408 *  ディスパッチ保留状態でないかのチェック(E_CTX)
    413409 */
    414410#define CHECK_DISPATCH() do {                                                           \
     
    420416
    421417/*
    422  *  ‚»‚Ì‘¼‚̃Rƒ“ƒeƒLƒXƒgƒGƒ‰[‚̃`ƒFƒbƒNiE_CTXj
     418 *  その他のコンテキストエラーのチェック(E_CTX)
    423419 */
    424420#define CHECK_CTX(exp) do {                                                                     \
     
    430426
    431427/*
    432  *  Ž©ƒ^ƒXƒN‚ðŽw’肵‚Ä‚¢‚È‚¢‚©‚̃`ƒFƒbƒNiE_ILUSEj
     428 *  自タスクを指定していないかのチェック(E_ILUSE)
    433429 */
    434430#define CHECK_NONSELF(p_tcb) do {                                                       \
     
    440436
    441437/*
    442  *  ‚»‚Ì‘¼‚Ì•s³Žg—pƒGƒ‰[‚̃`ƒFƒbƒNiE_ILUSEj
     438 *  その他の不正使用エラーのチェック(E_ILUSE)
    443439 */
    444440#define CHECK_ILUSE(exp) do {                                                           \
     
    450446
    451447/*
    452  *  –¢ƒTƒ|[ƒg‹@”\ƒGƒ‰[‚̃`ƒFƒbƒNiE_NOSPTj
     448 *  未サポート機能エラーのチェック(E_NOSPT)
    453449 */
    454450#define CHECK_NOSPT(exp) do {                                                           \
     
    460456
    461457/*
    462  *  Ã“I‚ȃIƒuƒWƒFƒNƒgó‘ÔƒGƒ‰[‚̃`ƒFƒbƒNiE_OBJj
     458 *  静的なオブジェクト状態エラーのチェック(E_OBJ)
    463459 */
    464460#define CHECK_OBJ(exp) do {                                                                     \
  • UsbWattMeter/trunk/asp_dcre/kernel/cyclic.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ŽüŠúƒnƒ“ƒhƒ‰‹@”\
     44 *              周期ハンドラ機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_CYC_ENTER
     
    105101
    106102/*
    107  *  ŽüŠúƒnƒ“ƒhƒ‰‚̐”
     103 *  周期ハンドラの数
    108104 */
    109105#define tnum_cyc        ((uint_t)(tmax_cycid - TMIN_CYCID + 1))
     
    111107
    112108/*
    113  *  ŽüŠúƒnƒ“ƒhƒ‰ID‚©‚çŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     109 *  周期ハンドラIDから周期ハンドラ管理ブロックを取り出すためのマクロ
    114110 */
    115111#define INDEX_CYC(cycid)        ((uint_t)((cycid) - TMIN_CYCID))
     
    117113
    118114/*
    119  *  ŽüŠúƒnƒ“ƒhƒ‰‹N“®‚Ì‚½‚߂̃^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^
     115 *  周期ハンドラ起動のためのタイムイベントブロックの登録
    120116 */
    121117Inline void
     
    130126
    131127/*
    132  *  Žg—p‚µ‚Ä‚¢‚È‚¢ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     128 *  使用していない周期ハンドラ管理ブロックのリスト
    133129 *
    134  *  ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̐擪‚ɂ̓Lƒ
    135 [‚ɂ‚Ȃ®‚½‚߂̗̈悪‚È‚¢‚½
    136  *  ‚߁Cƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒNitmevtbj‚̗̈æ‚ð—p‚¢‚éD
     130 *  周期ハンドラ管理ブロックの先頭にはキューにつなぐための領域がないた
     131 *  め,タイムイベントブロック(tmevtb)の領域を用いる.
    137132 */
    138133QUEUE   free_cyccb;
    139134
    140135/*
    141  *  ŽüŠúƒnƒ“ƒhƒ‰‹@”\‚̏‰Šú‰»
     136 *  周期ハンドラ機能の初期化
    142137 */
    143138void
     
    172167
    173168/*
    174  *  ŽüŠúƒnƒ“ƒhƒ‰‚̐¶¬
     169 *  周期ハンドラの生成
    175170 */
    176171#ifdef TOPPERS_acre_cyc
     
    225220
    226221/*
    227  *  ŽüŠúƒnƒ“ƒhƒ‰‚̍폜
     222 *  周期ハンドラの削除
    228223 */
    229224#ifdef TOPPERS_del_cyc
     
    269264
    270265/*
    271  *  ŽüŠúƒnƒ“ƒhƒ‰‚Ì“®ìŠJŽn
     266 *  周期ハンドラの動作開始
    272267 */
    273268#ifdef TOPPERS_sta_cyc
     
    308303
    309304/*
    310  *  ŽüŠúƒnƒ“ƒhƒ‰‚Ì“®ì’âŽ~
     305 *  周期ハンドラの動作停止
    311306 */
    312307#ifdef TOPPERS_stp_cyc
     
    344339
    345340/*
    346  *  ŽüŠúƒnƒ“ƒhƒ‰‚̏ó‘ÔŽQÆ
     341 *  周期ハンドラの状態参照
    347342 */
    348343#ifdef TOPPERS_ref_cyc
     
    383378
    384379/*
    385  *  ŽüŠúƒnƒ“ƒhƒ‰‹N“®ƒ‹[ƒ`ƒ“
     380 *  周期ハンドラ起動ルーチン
    386381 */
    387382#ifdef TOPPERS_cyccal
     
    393388
    394389        /*
    395          *  ŽŸ‰ñ‚Ì‹N“®‚Ì‚½‚߂̃^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·‚éD
     390         *  次回の起動のためのタイムイベントブロックを登録する.
    396391         *
    397          *  “¯‚¶ƒ^ƒCƒ€ƒeƒBƒbƒN‚ÅŽüŠúƒnƒ“ƒhƒ‰‚ðÄ“x‹N“®‚·‚ׂ«ê‡‚ɂ́C‚±‚Ì
    398          *  ŠÖ”‚©‚çsignal_time‚É–ß‚Á‚½Œã‚ɁCÄ“x‚±‚̊֐”‚ªŒÄ‚΂ê‚邱‚Æ‚É‚È
    399          *  ‚éD
     392         *  同じタイムティックで周期ハンドラを再度起動すべき場合には,この
     393         *  関数からsignal_timeに戻った後に,再度この関数が呼ばれることにな
     394         *  る.
    400395         */
    401396        tmevtb_enqueue_cyc(p_cyccb, p_cyccb->evttim + p_cyccb->p_cycinib->cyctim);
    402397
    403398        /*
    404          *  ŽüŠúƒnƒ“ƒhƒ‰‚ðCCPUƒƒbƒN‰ðœó‘ԂŌĂяo‚·D
     399         *  周期ハンドラを,CPUロック解除状態で呼び出す.
    405400         */
    406401        saved_ipm = i_get_ipm();
  • UsbWattMeter/trunk/asp_dcre/kernel/cyclic.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ŽüŠúƒnƒ“ƒhƒ‰‹@”\
     44 *              周期ハンドラ機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     54 *  周期ハンドラ初期化ブロック
    5955 */
    6056typedef struct cyclic_handler_initialization_block {
    61         ATR                     cycatr;                 /* ŽüŠúƒnƒ“ƒhƒ‰‘®« */
    62         intptr_t        exinf;                  /* ŽüŠúƒnƒ“ƒhƒ‰‚ÌŠg’£î•ñ */
    63         CYCHDR          cychdr;                 /* ŽüŠúƒnƒ“ƒhƒ‰‚Ì‹N“®”Ô’n */
    64         RELTIM          cyctim;                 /* ŽüŠúƒnƒ“ƒhƒ‰‚Ì‹N“®ŽüŠú */
    65         RELTIM          cycphs;                 /* ŽüŠúƒnƒ“ƒhƒ‰‚Ì‹N“®ˆÊ‘Š */
     57        ATR                     cycatr;                 /* 周期ハンドラ属性 */
     58        intptr_t        exinf;                  /* 周期ハンドラの拡張情報 */
     59        CYCHDR          cychdr;                 /* 周期ハンドラの起動番地 */
     60        RELTIM          cyctim;                 /* 周期ハンドラの起動周期 */
     61        RELTIM          cycphs;                 /* 周期ハンドラの起動位相 */
    6662} CYCINIB;
    6763
    6864/*
    69  *  ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN
     65 *  周期ハンドラ管理ブロック
    7066 */
    7167typedef struct cyclic_handler_control_block {
    72         const CYCINIB *p_cycinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    73         bool_t          cycsta;                 /* ŽüŠúƒnƒ“ƒhƒ‰‚Ì“®ìó‘Ô */
    74         EVTTIM          evttim;                 /* ŽŸ‚ÉŽüŠúƒnƒ“ƒhƒ‰‚ð‹N“®‚·‚鎞 */
    75         TMEVTB          tmevtb;                 /* ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN */
     68        const CYCINIB *p_cycinib;       /* 初期化ブロックへのポインタ */
     69        bool_t          cycsta;                 /* 周期ハンドラの動作状態 */
     70        EVTTIM          evttim;                 /* 次に周期ハンドラを起動する時刻 */
     71        TMEVTB          tmevtb;                 /* タイムイベントブロック */
    7672} CYCCB;
    7773
    7874/*
    79  *  Žg—p‚µ‚Ä‚¢‚È‚¢ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     75 *  使用していない周期ハンドラ管理ブロックのリスト
    8076 */
    8177extern QUEUE    free_cyccb;
    8278
    8379/*
    84  *  ŽüŠúƒnƒ“ƒhƒ‰ID‚̍őå’likernel_cfg.cj
     80 *  周期ハンドラIDの最大値(kernel_cfg.c)
    8581 */
    8682extern const ID tmax_cycid;
     
    8884
    8985/*
    90  *  ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     86 *  周期ハンドラ初期化ブロックのエリア(kernel_cfg.c)
    9187 */
    9288extern const CYCINIB    cycinib_table[];
     
    9490
    9591/*
    96  *  ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     92 *  周期ハンドラ管理ブロックのエリア(kernel_cfg.c)
    9793 */
    9894extern CYCCB    cyccb_table[];
    9995
    10096/*
    101  *  ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚©‚çŽüŠúƒnƒ“ƒhƒ‰ID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     97 *  周期ハンドラ管理ブロックから周期ハンドラIDを取り出すためのマクロ
    10298 */
    10399#define CYCID(p_cyccb)  ((ID)(((p_cyccb) - cyccb_table) + TMIN_CYCID))
    104100
    105101/*
    106  *  ŽüŠúƒnƒ“ƒhƒ‰‹@”\‚̏‰Šú‰»
     102 *  周期ハンドラ機能の初期化
    107103 */
    108104extern void     initialize_cyclic(void);
    109105
    110106/*
    111  *  ŽüŠúƒnƒ“ƒhƒ‰‹N“®ƒ‹[ƒ`ƒ“
     107 *  周期ハンドラ起動ルーチン
    112108 */
    113109extern void     call_cychdr(CYCCB *p_cyccb);
  • UsbWattMeter/trunk/asp_dcre/kernel/dataqueue.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒf[ƒ^ƒLƒ
    49 [‹@”\
     44 *              データキュー機能
    5045 */
    5146
     
    5752
    5853/*
    59  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    6055 */
    6156#ifndef LOG_ACRE_DTQ_ENTER
     
    164159
    165160/*
    166  *  ƒf[ƒ^ƒLƒ
    167 [‚̐”
     161 *  データキューの数
    168162 */
    169163#define tnum_dtq        ((uint_t)(tmax_dtqid - TMIN_DTQID + 1))
     
    171165
    172166/*
    173  *  ƒf[ƒ^ƒLƒ
    174 [ID‚©‚çƒf[ƒ^ƒLƒ
    175 [ŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     167 *  データキューIDからデータキュー管理ブロックを取り出すためのマクロ
    176168 */
    177169#define INDEX_DTQ(dtqid)        ((uint_t)((dtqid) - TMIN_DTQID))
     
    181173
    182174/*
    183  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒf[ƒ^ƒLƒ
    184 [ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     175 *  使用していないデータキュー管理ブロックのリスト
    185176 */
    186177QUEUE   free_dtqcb;
    187178
    188179/*
    189  *  ƒf[ƒ^ƒLƒ
    190 [‹@”\‚̏‰Šú‰»
     180 *  データキュー機能の初期化
    191181 */
    192182void
     
    219209
    220210/*
    221  *  ƒf[ƒ^ƒLƒ
    222 [ŠÇ——̈æ‚ւ̃f[ƒ^‚ÌŠi”[
     211 *  データキュー管理領域へのデータの格納
    223212 */
    224213#ifdef TOPPERS_dtqenq
     
    238227
    239228/*
    240  *  ƒf[ƒ^ƒLƒ
    241 [ŠÇ——̈æ‚ւ̃f[ƒ^‚Ì‹­§Ši”[
     229 *  データキュー管理領域へのデータの強制格納
    242230 */
    243231#ifdef TOPPERS_dtqfenq
     
    262250
    263251/*
    264  *  ƒf[ƒ^ƒLƒ
    265 [ŠÇ——̈悩‚ç‚̃f[ƒ^‚ÌŽæo‚µ
     252 *  データキュー管理領域からのデータの取出し
    266253 */
    267254#ifdef TOPPERS_dtqdeq
     
    281268
    282269/*
    283  *  ƒf[ƒ^ƒLƒ
    284 [‚ւ̃f[ƒ^‘—M
     270 *  データキューへのデータ送信
    285271 */
    286272#ifdef TOPPERS_dtqsnd
     
    310296
    311297/*
    312  *  ƒf[ƒ^ƒLƒ
    313 [‚ւ̃f[ƒ^‹­§‘—M
     298 *  データキューへのデータ強制送信
    314299 */
    315300#ifdef TOPPERS_dtqfsnd
     
    334319
    335320/*
    336  *  ƒf[ƒ^ƒLƒ
    337 [‚©‚ç‚̃f[ƒ^ŽóM
     321 *  データキューからのデータ受信
    338322 */
    339323#ifdef TOPPERS_dtqrcv
     
    372356
    373357/*
    374  *  ƒf[ƒ^ƒLƒ
    375 [‚̐¶¬
     358 *  データキューの生成
    376359 */
    377360#ifdef TOPPERS_acre_dtq
     
    432415
    433416/*
    434  *  ƒf[ƒ^ƒLƒ
    435 [‚̍폜
     417 *  データキューの削除
    436418 */
    437419#ifdef TOPPERS_del_dtq
     
    483465
    484466/*
    485  *  ƒf[ƒ^ƒLƒ
    486 [‚Ö‚Ì‘—M
     467 *  データキューへの送信
    487468 */
    488469#ifdef TOPPERS_snd_dtq
     
    528509
    529510/*
    530  *  ƒf[ƒ^ƒLƒ
    531 [‚Ö‚Ì‘—Miƒ|[ƒŠƒ“ƒOj
     511 *  データキューへの送信(ポーリング)
    532512 */
    533513#ifdef TOPPERS_psnd_dtq
     
    568548
    569549/*
    570  *  ƒf[ƒ^ƒLƒ
    571 [‚Ö‚Ì‘—Miƒ|[ƒŠƒ“ƒOC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     550 *  データキューへの送信(ポーリング,非タスクコンテキスト用)
    572551 */
    573552#ifdef TOPPERS_ipsnd_dtq
     
    608587
    609588/*
    610  *  ƒf[ƒ^ƒLƒ
    611 [‚Ö‚Ì‘—Miƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     589 *  データキューへの送信(タイムアウトあり)
    612590 */
    613591#ifdef TOPPERS_tsnd_dtq
     
    659637
    660638/*
    661  *  ƒf[ƒ^ƒLƒ
    662 [‚Ö‚Ì‹­§‘—M
     639 *  データキューへの強制送信
    663640 */
    664641#ifdef TOPPERS_fsnd_dtq
     
    696673
    697674/*
    698  *  ƒf[ƒ^ƒLƒ
    699 [‚Ö‚Ì‹­§‘—Mi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     675 *  データキューへの強制送信(非タスクコンテキスト用)
    700676 */
    701677#ifdef TOPPERS_ifsnd_dtq
     
    733709
    734710/*
    735  *  ƒf[ƒ^ƒLƒ
    736 [‚©‚ç‚ÌŽóM
     711 *  データキューからの受信
    737712 */
    738713#ifdef TOPPERS_rcv_dtq
     
    783758
    784759/*
    785  *  ƒf[ƒ^ƒLƒ
    786 [‚©‚ç‚ÌŽóMiƒ|[ƒŠƒ“ƒOj
     760 *  データキューからの受信(ポーリング)
    787761 */
    788762#ifdef TOPPERS_prcv_dtq
     
    823797
    824798/*
    825  *  ƒf[ƒ^ƒLƒ
    826 [‚©‚ç‚ÌŽóMiƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     799 *  データキューからの受信(タイムアウトあり)
    827800 */
    828801#ifdef TOPPERS_trcv_dtq
     
    878851
    879852/*
    880  *  ƒf[ƒ^ƒLƒ
    881 [‚̍ú‰»
     853 *  データキューの再初期化
    882854 */
    883855#ifdef TOPPERS_ini_dtq
     
    922894
    923895/*
    924  *  ƒf[ƒ^ƒLƒ
    925 [‚̏ó‘ÔŽQÆ
     896 *  データキューの状態参照
    926897 */
    927898#ifdef TOPPERS_ref_dtq
  • UsbWattMeter/trunk/asp_dcre/kernel/dataqueue.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒf[ƒ^ƒLƒ
    49 [‹@”\
     44 *              データキュー機能
    5045 */
    5146
     
    5651
    5752/*
    58  *  ƒf[ƒ^ŠÇ—ƒuƒƒbƒN
     53 *  データ管理ブロック
    5954 */
    6055typedef struct data_management_block {
    61         intptr_t        data;                   /* ƒf[ƒ^–{‘Ì */
     56        intptr_t        data;                   /* データ本体 */
    6257} DTQMB;
    6358
    6459/*
    65  *  ƒf[ƒ^ƒLƒ
    66 [‰Šú‰»ƒuƒƒbƒN
     60 *  データキュー初期化ブロック
    6761 *
    68  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    69  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    70  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     62 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     63 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     64 *  最初のフィールドが共通になっている.
    7165 */
    7266typedef struct dataqueue_initialization_block {
    73         ATR                     dtqatr;                 /* ƒf[ƒ^ƒLƒ
    74 [‘®« */
    75         uint_t          dtqcnt;                 /* ƒf[ƒ^ƒLƒ
    76 [‚Ì—e—Ê */
    77         DTQMB           *p_dtqmb;               /* ƒf[ƒ^ƒLƒ
    78 [ŠÇ——̈æ‚̐擪”Ô’n */
     67        ATR                     dtqatr;                 /* データキュー属性 */
     68        uint_t          dtqcnt;                 /* データキューの容量 */
     69        DTQMB           *p_dtqmb;               /* データキュー管理領域の先頭番地 */
    7970} DTQINIB;
    8071
    8172/*
    82  *  ƒf[ƒ^ƒLƒ
    83 [ŠÇ—ƒuƒƒbƒN
     73 *  データキュー管理ブロック
    8474 *
    85  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    86  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    87  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     75 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     76 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     77 *  フィールドが共通になっている.
    8878 */
    8979typedef struct dataqueue_control_block {
    90         QUEUE           swait_queue;    /* ƒf[ƒ^ƒLƒ
    91 [‘—M‘Ò‚¿ƒLƒ
    92 [ */
    93         const DTQINIB *p_dtqinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    94         QUEUE           rwait_queue;    /* ƒf[ƒ^ƒLƒ
    95 [ŽóM‘Ò‚¿ƒLƒ
    96 [ */
    97         uint_t          count;                  /* ƒf[ƒ^ƒLƒ
    98 [’†‚̃f[ƒ^‚̐” */
    99         uint_t          head;                   /* Å‰‚̃f[ƒ^‚ÌŠi”[êŠ */
    100         uint_t          tail;                   /* ÅŒã‚̃f[ƒ^‚ÌŠi”[êŠ‚ÌŽŸ */
     80        QUEUE           swait_queue;    /* データキュー送信待ちキュー */
     81        const DTQINIB *p_dtqinib;       /* 初期化ブロックへのポインタ */
     82        QUEUE           rwait_queue;    /* データキュー受信待ちキュー */
     83        uint_t          count;                  /* データキュー中のデータの数 */
     84        uint_t          head;                   /* 最初のデータの格納場所 */
     85        uint_t          tail;                   /* 最後のデータの格納場所の次 */
    10186} DTQCB;
    10287
    10388/*
    104  *  ƒf[ƒ^ƒLƒ
    105 [‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     89 *  データキュー待ち情報ブロックの定義
    10690 *
    107  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    108  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    109  *  Å‰‚Ì2‚‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
    110  *  ƒf[ƒ^ƒLƒ
    111 [‚Ö‚Ì‘—M‘Ò‚¿‚ƃf[ƒ^ƒLƒ
    112 [‚©‚ç‚ÌŽóM‘Ò‚¿‚ŁC“¯‚¶‘Ò‚¿î
    113  *  •ñƒuƒƒbƒN‚ðŽg‚¤D
     91 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     92 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     93 *  最初の2つのフィールドが共通になっている.
     94 *  データキューへの送信待ちとデータキューからの受信待ちで,同じ待ち情
     95 *  報ブロックを使う.
    11496 */
    11597typedef struct dataqueue_waiting_information {
    116         WINFO           winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    117         DTQCB           *p_dtqcb;               /* ‘Ò‚Á‚Ä‚¢‚éƒf[ƒ^ƒLƒ
    118 [‚ÌŠÇ—ƒuƒƒbƒN */
    119         intptr_t        data;                   /* ‘—ŽóMƒf[ƒ^ */
     98        WINFO           winfo;                  /* 標準の待ち情報ブロック */
     99        DTQCB           *p_dtqcb;               /* 待っているデータキューの管理ブロック */
     100        intptr_t        data;                   /* 送受信データ */
    120101} WINFO_DTQ;
    121102
    122103/*
    123  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒf[ƒ^ƒLƒ
    124 [ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     104 *  使用していないデータキュー管理ブロックのリスト
    125105 */
    126106extern QUEUE    free_dtqcb;
    127107
    128108/*
    129  *  ƒf[ƒ^ƒLƒ
    130 [ID‚̍őå’likernel_cfg.cj
     109 *  データキューIDの最大値(kernel_cfg.c)
    131110 */
    132111extern const ID tmax_dtqid;
     
    134113
    135114/*
    136  *  ƒf[ƒ^ƒLƒ
    137 [‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     115 *  データキュー初期化ブロックのエリア(kernel_cfg.c)
    138116 */
    139117extern const DTQINIB    dtqinib_table[];
     
    141119
    142120/*
    143  *  ƒf[ƒ^ƒLƒ
    144 [ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     121 *  データキュー管理ブロックのエリア(kernel_cfg.c)
    145122 */
    146123extern DTQCB    dtqcb_table[];
    147124
    148125/*
    149  *  ƒf[ƒ^ƒLƒ
    150 [ŠÇ—ƒuƒƒbƒN‚©‚çƒf[ƒ^ƒLƒ
    151 [ID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     126 *  データキュー管理ブロックからデータキューIDを取り出すためのマクロ
    152127 */
    153128#define DTQID(p_dtqcb)  ((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID))
    154129
    155130/*
    156  *  ƒf[ƒ^ƒLƒ
    157 [‹@”\‚̏‰Šú‰»
     131 *  データキュー機能の初期化
    158132 */
    159133extern void     initialize_dataqueue(void);
    160134
    161135/*
    162  *  ƒf[ƒ^ƒLƒ
    163 [ŠÇ——̈æ‚ւ̃f[ƒ^‚ÌŠi”[
     136 *  データキュー管理領域へのデータの格納
    164137 */
    165138extern void     enqueue_data(DTQCB *p_dtqcb, intptr_t data);
    166139
    167140/*
    168  *  ƒf[ƒ^ƒLƒ
    169 [ŠÇ——̈æ‚ւ̃f[ƒ^‚Ì‹­§Ši”[
     141 *  データキュー管理領域へのデータの強制格納
    170142 */
    171143extern void     force_enqueue_data(DTQCB *p_dtqcb, intptr_t data);
    172144
    173145/*
    174  *  ƒf[ƒ^ƒLƒ
    175 [ŠÇ——̈悩‚ç‚̃f[ƒ^‚ÌŽæo‚µ
     146 *  データキュー管理領域からのデータの取出し
    176147 */
    177148extern void     dequeue_data(DTQCB *p_dtqcb, intptr_t *p_data);
    178149
    179150/*
    180  *  ƒf[ƒ^ƒLƒ
    181 [‚ւ̃f[ƒ^‘—M
     151 *  データキューへのデータ送信
    182152 */
    183153extern bool_t   send_data(DTQCB *p_dtqcb, intptr_t data, bool_t *p_dspreq);
    184154
    185155/*
    186  *  ƒf[ƒ^ƒLƒ
    187 [‚ւ̃f[ƒ^‹­§‘—M
     156 *  データキューへのデータ強制送信
    188157 */
    189158extern bool_t   force_send_data(DTQCB *p_dtqcb, intptr_t data);
    190159
    191160/*
    192  *  ƒf[ƒ^ƒLƒ
    193 [‚©‚ç‚̃f[ƒ^ŽóM
     161 *  データキューからのデータ受信
    194162 */
    195163extern bool_t   receive_data(DTQCB *p_dtqcb, intptr_t *p_data,
  • UsbWattMeter/trunk/asp_dcre/kernel/eventflag.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     44 *              イベントフラグ機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    5955 */
    6056#ifndef LOG_ACRE_FLG_ENTER
     
    139135
    140136/*
    141  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̐”
     137 *  イベントフラグの数
    142138 */
    143139#define tnum_flg        ((uint_t)(tmax_flgid - TMIN_FLGID + 1))
     
    145141
    146142/*
    147  *  ƒCƒxƒ“ƒgƒtƒ‰ƒOID‚©‚çƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     143 *  イベントフラグIDからイベントフラグ管理ブロックを取り出すためのマクロ
    148144 */
    149145#define INDEX_FLG(flgid)        ((uint_t)((flgid) - TMIN_FLGID))
     
    153149
    154150/*
    155  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     151 *  使用していないイベントフラグ管理ブロックのリスト
    156152 */
    157153QUEUE   free_flgcb;
    158154
    159155/*
    160  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\‚̏‰Šú‰»
     156 *  イベントフラグ機能の初期化
    161157 */
    162158void
     
    186182
    187183/*
    188  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿‰ðœðŒ‚̃`ƒFƒbƒN
     184 *  イベントフラグ待ち解除条件のチェック
    189185 */
    190186#ifdef TOPPERS_flgcnd
     
    207203
    208204/*
    209  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̐¶¬
     205 *  イベントフラグの生成
    210206 */
    211207#ifdef TOPPERS_acre_flg
     
    246242
    247243/*
    248  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̍폜
     244 *  イベントフラグの削除
    249245 */
    250246#ifdef TOPPERS_del_flg
     
    290286
    291287/*
    292  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃Zƒbƒg
     288 *  イベントフラグのセット
    293289 */
    294290#ifdef TOPPERS_set_flg
     
    346342
    347343/*
    348  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃Zƒbƒgi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     344 *  イベントフラグのセット(非タスクコンテキスト用)
    349345 */
    350346#ifdef TOPPERS_iset_flg
     
    398394
    399395/*
    400  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃NƒŠƒA
     396 *  イベントフラグのクリア
    401397 */
    402398#ifdef TOPPERS_clr_flg
     
    431427
    432428/*
    433  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿
     429 *  イベントフラグ待ち
    434430 */
    435431#ifdef TOPPERS_wai_flg
     
    481477
    482478/*
    483  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿iƒ|[ƒŠƒ“ƒOj
     479 *  イベントフラグ待ち(ポーリング)
    484480 */
    485481#ifdef TOPPERS_pol_flg
     
    522518
    523519/*
    524  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿iƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     520 *  イベントフラグ待ち(タイムアウトあり)
    525521 */
    526522#ifdef TOPPERS_twai_flg
     
    578574
    579575/*
    580  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̍ú‰»
     576 *  イベントフラグの再初期化
    581577 */
    582578#ifdef TOPPERS_ini_flg
     
    616612
    617613/*
    618  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̏ó‘ÔŽQÆ
     614 *  イベントフラグの状態参照
    619615 */
    620616#ifdef TOPPERS_ref_flg
  • UsbWattMeter/trunk/asp_dcre/kernel/eventflag.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\
     44 *              イベントフラグ機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN
     53 *  イベントフラグ初期化ブロック
    5854 *
    59  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    60  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    61  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     55 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     56 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     57 *  最初のフィールドが共通になっている.
    6258 */
    6359typedef struct eventflag_initialization_block {
    64         ATR                     flgatr;                 /* ƒCƒxƒ“ƒgƒtƒ‰ƒO‘®« */
    65         FLGPTN          iflgptn;                /* ƒCƒxƒ“ƒgƒtƒ‰ƒO‚̃rƒbƒgƒpƒ^[ƒ“‚̏‰Šú’l */
     60        ATR                     flgatr;                 /* イベントフラグ属性 */
     61        FLGPTN          iflgptn;                /* イベントフラグのビットパターンの初期値 */
    6662} FLGINIB;
    6763
    6864/*
    69  *  ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN
     65 *  イベントフラグ管理ブロック
    7066 *
    71  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    72  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    73  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     67 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     68 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     69 *  フィールドが共通になっている.
    7470 */
    7571typedef struct eventflag_control_block {
    76         QUEUE           wait_queue;             /* ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿ƒLƒ
    77 [ */
    78         const FLGINIB *p_flginib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    79         FLGPTN          flgptn;                 /* ƒCƒxƒ“ƒgƒtƒ‰ƒOŒ»Ýƒpƒ^[ƒ“ */
     72        QUEUE           wait_queue;             /* イベントフラグ待ちキュー */
     73        const FLGINIB *p_flginib;       /* 初期化ブロックへのポインタ */
     74        FLGPTN          flgptn;                 /* イベントフラグ現在パターン */
    8075} FLGCB;
    8176
    8277/*
    83  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     78 *  イベントフラグ待ち情報ブロックの定義
    8479 *
    85  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    86  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    87  *  Å‰‚Ì2‚‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     80 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     81 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     82 *  最初の2つのフィールドが共通になっている.
    8883 *
    89  *  flgptn‚́Cwaiptn‚¨‚æ‚Ñwfmode‚Æ“¯Žž‚ÉŽg‚¤‚±‚Æ‚Í‚È‚¢‚½‚߁C‹¤—p‘Ì‚ðŽg
    90  *  ‚¦‚΃ƒ‚ƒŠ‚ðß–ñ‚·‚邱‚Æ‚ª‰Â”\‚Å‚ ‚éD
     84 *  flgptnは,waiptnおよびwfmodeと同時に使うことはないため,共用体を使
     85 *  えばメモリを節約することが可能である.
    9186 */
    9287typedef struct eventflag_waiting_information {
    93         WINFO           winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    94         FLGCB           *p_flgcb;               /* ‘Ò‚Á‚Ä‚¢‚éƒCƒxƒ“ƒgƒtƒ‰ƒO‚ÌŠÇ—ƒuƒƒbƒN */
    95         FLGPTN          waiptn;                 /* ‘Ò‚¿ƒpƒ^[ƒ“ */
    96         MODE            wfmode;                 /* ‘Ò‚¿ƒ‚[ƒh */
    97         FLGPTN          flgptn;                 /* ‘Ò‚¿‰ðœŽž‚̃pƒ^[ƒ“ */
     88        WINFO           winfo;                  /* 標準の待ち情報ブロック */
     89        FLGCB           *p_flgcb;               /* 待っているイベントフラグの管理ブロック */
     90        FLGPTN          waiptn;                 /* 待ちパターン */
     91        MODE            wfmode;                 /* 待ちモード */
     92        FLGPTN          flgptn;                 /* 待ち解除時のパターン */
    9893} WINFO_FLG;
    9994
    10095/*
    101  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     96 *  使用していないイベントフラグ管理ブロックのリスト
    10297 */
    10398extern QUEUE    free_flgcb;
    10499
    105100/*
    106  *  ƒCƒxƒ“ƒgƒtƒ‰ƒOID‚̍őå’likernel_cfg.cj
     101 *  イベントフラグIDの最大値(kernel_cfg.c)
    107102 */
    108103extern const ID tmax_flgid;
     
    110105
    111106/*
    112  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     107 *  イベントフラグ初期化ブロックのエリア(kernel_cfg.c)
    113108 */
    114109extern const FLGINIB    flginib_table[];
     
    116111
    117112/*
    118  *  ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     113 *  イベントフラグ管理ブロックのエリア(kernel_cfg.c)
    119114 */
    120115extern FLGCB    flgcb_table[];
    121116
    122117/*
    123  *  ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚©‚çƒCƒxƒ“ƒgƒtƒ‰ƒOID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     118 *  イベントフラグ管理ブロックからイベントフラグIDを取り出すためのマクロ
    124119 */
    125120#define FLGID(p_flgcb)  ((ID)(((p_flgcb) - flgcb_table) + TMIN_FLGID))
    126121
    127122/*
    128  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‹@”\‚̏‰Šú‰»
     123 *  イベントフラグ機能の初期化
    129124 */
    130125extern void     initialize_eventflag(void);
    131126
    132127/*
    133  *  ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿‰ðœðŒ‚̃`ƒFƒbƒN
     128 *  イベントフラグ待ち解除条件のチェック
    134129 */
    135130extern bool_t   check_flg_cond(FLGCB *p_flgcb, FLGPTN waiptn,
  • UsbWattMeter/trunk/asp_dcre/kernel/exception.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              CPU—áŠOŠÇ—‹@”\
     44 *              CPU例外管理機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_XSNS_DPN_ENTER
     
    7369
    7470/*
    75  *  CPU—áŠOƒnƒ“ƒhƒ‰ŠÇ—‹@”\‚̏‰Šú‰»
     71 *  CPU例外ハンドラ管理機能の初期化
    7672 */
    7773#ifdef TOPPERS_excini
     
    9389
    9490/*
    95  *  CPU—áŠO‚Ì”­¶‚µ‚½ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
     91 *  CPU例外の発生したコンテキストの参照
    9692 */
    9793
    9894/*
    99  *  CPU—áŠO”­¶Žž‚̃fƒBƒXƒpƒbƒ`•Û—¯ó‘Ô‚ÌŽQÆ
     95 *  CPU例外発生時のディスパッチ保留状態の参照
    10096 *
    101  *  CPU—áŠOƒnƒ“ƒhƒ‰’†‚Ådisdsp‚ª•Ï‰»‚·‚邱‚Æ‚Í‚È‚¢‚½‚߁CCPU—áŠO‚ª”­¶‚µ
    102  *  ‚½Žž‚Ìdisdsp‚ð•Û‘¶‚µ‚Ä‚¨‚­•K—v‚Í‚È‚¢D
     97 *  CPU例外ハンドラ中でdisdspが変化することはないため,CPU例外が発生し
     98 *  た時のdisdspを保存しておく必要はない.
    10399 */
    104100#ifdef TOPPERS_xsns_dpn
     
    118114
    119115/*
    120  *  CPU—áŠO”­¶Žž‚̃^ƒXƒN—áŠOˆ—•Û—¯ó‘Ô‚ÌŽQÆ
     116 *  CPU例外発生時のタスク例外処理保留状態の参照
    121117 *
    122  *  CPU—áŠOƒnƒ“ƒhƒ‰’†‚Åp_runtsk‚Æp_runtsk->enatex‚ª•Ï‰»‚·‚邱‚Æ‚Í‚È‚¢
    123  *  ‚½‚߁CCPU—áŠO‚ª”­¶‚µ‚½Žž‚Ìp_runtsk->enatex‚ð•Û‘¶‚µ‚Ä‚¨‚­•K—v‚Í‚È
    124  *  ‚¢D
     118 *  CPU例外ハンドラ中でp_runtskとp_runtsk->enatexが変化することはない
     119 *  ため,CPU例外が発生した時のp_runtsk->enatexを保存しておく必要はな
     120 *  い.
    125121 */
    126122#ifdef TOPPERS_xsns_xpn
  • UsbWattMeter/trunk/asp_dcre/kernel/exception.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              CPU—áŠOŠÇ—‹@”\
     44 *              CPU例外管理機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     53 *  CPU例外ハンドラ初期化ブロック
    5854 */
    5955typedef struct cpu_exception_handler_initialization_block {
    60         EXCNO           excno;                  /* CPU—áŠOƒnƒ“ƒhƒ‰”ԍ† */
    61         ATR                     excatr;                 /* CPU—áŠOƒnƒ“ƒhƒ‰‘®« */
    62         FP                      exc_entry;              /* CPU—áŠOƒnƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̔Ԓn */
     56        EXCNO           excno;                  /* CPU例外ハンドラ番号 */
     57        ATR                     excatr;                 /* CPU例外ハンドラ属性 */
     58        FP                      exc_entry;              /* CPU例外ハンドラの出入口処理の番地 */
    6359} EXCINIB;
    6460
    6561/*
    66  *  CPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚̐”ikernel_cfg.cj
     62 *  CPU例外ハンドラ番号の数(kernel_cfg.c)
    6763 */
    6864extern const uint_t     tnum_excno;
    6965
    7066/*
    71  *  CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     67 *  CPU例外ハンドラ初期化ブロックのエリア(kernel_cfg.c)
    7268 */
    7369extern const EXCINIB    excinib_table[];
     
    7672
    7773/*
    78  *  CPU—áŠOƒnƒ“ƒhƒ‰ŠÇ—‹@”\‚̏‰Šú‰»
     74 *  CPU例外ハンドラ管理機能の初期化
    7975 */
    8076extern void     initialize_exception(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/genoffset.tf

    • Property svn:mime-type changed from text/plain to text/plain; charset=SHIFT_JIS
    r164 r167  
    88$               Graduate School of Information Science, Nagoya Univ., JAPAN
    99
    10 $   ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    11 $   ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    12 $   •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    13 $   (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    14 $       Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    15 $       ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    16 $   (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    17 $       —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    18 ƒƒ“ƒgi—˜—p
    19 $       ŽÒƒ}ƒjƒ
    20 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    21 $       ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    22 $   (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    23 $       —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    24 $       ‚ƁD
    25 $     (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    26 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    27 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    28 $         ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    29 $     (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    30 $         •ñ‚·‚邱‚ƁD
    31 $   (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    32 $       ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    33 $       ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    34 $       —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    35 $       –Ɛӂ·‚邱‚ƁD
     10$   上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     11$   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     12$   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     13$   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     14$       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     15$       スコード中に含まれていること.
     16$   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     17$       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     18$       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     19$       の無保証規定を掲載すること.
     20$   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     21$       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     22$       と.
     23$     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     24$         作権表示,この利用条件および下記の無保証規定を掲載すること.
     25$     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     26$         報告すること.
     27$   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     28$       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29$       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     30$       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     31$       免責すること.
    3632
    37 $   –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    38 $   ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    39 $   ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    40 $   ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    41 $   ‚̐ӔC‚𕉂í‚È‚¢D
     33$   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34$   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35$   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36$   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37$   の責任を負わない.
    4238$
    4339$   $Id$
     
    4642
    4743$
    48 $  #defineƒfƒBƒŒƒNƒeƒBƒu‚̐¶¬
     44$  #defineディレクティブの生成
    4945$
    5046$FUNCTION DEFINE$
     
    5349
    5450$
    55 ƒrƒbƒg‚̃T[ƒ`
     51ビットのサーチ
    5652$
    5753$FUNCTION SEARCH_BIT$
     
    6662
    6763$
    68 ƒrƒbƒgƒtƒB[ƒ‹ƒh‚̃IƒtƒZƒbƒg‚ƃrƒbƒgˆÊ’u‚Ì’è‹`‚̐¶¬
     64ビットフィールドのオフセットとビット位置の定義の生成
    6965$
    7066$FUNCTION DEFINE_BIT$
     
    115111
    116112$
    117 ƒoƒCƒg”z’u‚̃`ƒFƒbƒN
     113バイト配置のチェック
    118114$
    119115$FUNCTION MAGIC_CHECK$
     
    144140
    145141$
    146 ƒtƒ@ƒCƒ‹ƒwƒbƒ_‚̐¶¬
     142ファイルヘッダの生成
    147143$
    148144$FILE "offset.h"$
  • UsbWattMeter/trunk/asp_dcre/kernel/interrupt.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              Š„ž‚ÝŠÇ—‹@”\
     44 *              割込み管理機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     53 *  トレースログマクロのデフォルト定義
    5854 */
    5955#ifndef LOG_ISR_ENTER
     
    114110
    115111/*
    116  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐”
     112 *  割込みサービスルーチンの数
    117113 */
    118114#define tnum_isr        ((uint_t)(tmax_isrid - TMIN_SEMID + 1) + tnum_sisr)
    119115
    120116/*
    121  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ID‚©‚犄ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚ðŽæ
    122  *  ‚èo‚·‚½‚߂̃}ƒNƒ
     117 *  割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取
     118 *  り出すためのマクロ
    123119 */
    124120#define INDEX_ISR(isrid)        ((uint_t)((isrid) - TMIN_ISRID) + tnum_sisr)
     
    126122
    127123/*
    128  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ƒLƒ
    129 [‚Ö‚Ì“o˜^
     124 *  割込みサービスルーチンキューへの登録
    130125 */
    131126Inline void
     
    147142
    148143/*
    149  *  Žg—p‚µ‚Ä‚¢‚È‚¢Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     144 *  使用していない割込みサービスルーチン管理ブロックのリスト
    150145 */
    151146QUEUE   free_isrcb;
    152147
    153148/*
    154  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‹@”\‚̏‰Šú‰»
     149 *  割込みサービスルーチン機能の初期化
    155150 */
    156151void
     
    182177
    183178/*
    184  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̌ďo‚µ
     179 *  割込みサービスルーチンの呼出し
    185180 */
    186181#ifdef TOPPERS_isrcal
     
    202197
    203198                if (p_queue->p_next != p_isr_queue) {
    204                         /* ISR‚̌ďo‚µ‘O‚̏ó‘Ô‚É–ß‚· */
     199                        /* ISRの呼出し前の状態に戻す */
    205200                        if (i_sense_lock()) {
    206201                                i_unlock_cpu();
     
    214209
    215210/*
    216  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŒÄo‚µƒLƒ
    217 [‚ÌŒŸõ
     211 *  割込みサービスルーチン呼出しキューの検索
    218212 */
    219213Inline QUEUE *
     
    246240
    247241/*
    248  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐¶¬
     242 *  割込みサービスルーチンの生成
    249243 */
    250244#ifdef TOPPERS_acre_isr
     
    295289
    296290/*
    297  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̍폜
     291 *  割込みサービスルーチンの削除
    298292 */
    299293#ifdef TOPPERS_del_isr
     
    332326
    333327/*
    334  *  Š„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»
     328 *  割込み管理機能の初期化
    335329 */
    336330#ifdef TOPPERS_intini
     
    358352
    359353/*
    360  *  Š„ž‚Ý‚Ì‹ÖŽ~
     354 *  割込みの禁止
    361355 */
    362356#ifdef TOPPERS_dis_int
     
    396390
    397391/*
    398  *  Š„ž‚Ý‚Ì‹–‰Â
     392 *  割込みの許可
    399393 */
    400394#ifdef TOPPERS_ena_int
     
    434428
    435429/*
    436  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚̕ύX
     430 *  割込み優先度マスクの変更
    437431 */
    438432#ifdef TOPPERS_chg_ipm
     
    476470
    477471/*
    478  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‚ÌŽQÆ
     472 *  割込み優先度マスクの参照
    479473 */
    480474#ifdef TOPPERS_get_ipm
  • UsbWattMeter/trunk/asp_dcre/kernel/interrupt.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              Š„ž‚ÝŠÇ—‹@”\
     44 *              割込み管理機能
    4945 */
    5046
     
    5349
    5450/*
    55  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‰Šú‰»ƒuƒƒbƒN
     51 *  割込みサービスルーチン初期化ブロック
    5652 */
    5753typedef struct isr_initialization_block {
    58         ATR                     isratr;                 /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‘®« */
    59         intptr_t        exinf;                  /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÌŠg’£î•ñ */
    60         INTNO           intno;                  /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ð“o˜^‚·‚銄ž‚ݔԍ† */
    61         QUEUE           *p_isr_queue;   /* “o˜^æŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ƒLƒ
    62 [‚̔Ԓn */
    63         ISR                     isr;                    /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐擪”Ô’n */
    64         PRI                     isrpri;                 /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“—Dæ“x */
     54        ATR                     isratr;                 /* 割込みサービスルーチン属性 */
     55        intptr_t        exinf;                  /* 割込みサービスルーチンの拡張情報 */
     56        INTNO           intno;                  /* 割込みサービスルーチンを登録する割込み番号 */
     57        QUEUE           *p_isr_queue;   /* 登録先割込みサービスルーチンキューの番地 */
     58        ISR                     isr;                    /* 割込みサービスルーチンの先頭番地 */
     59        PRI                     isrpri;                 /* 割込みサービスルーチン優先度 */
    6560} ISRINIB;
    6661
    6762/*
    68  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN
     63 *  割込みサービスルーチン管理ブロック
    6964 */
    7065typedef struct isr_control_block {
    71         QUEUE           isr_queue;              /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŒÄo‚µƒLƒ
    72 [ */
    73         const ISRINIB *p_isrinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
     66        QUEUE           isr_queue;              /* 割込みサービスルーチン呼出しキュー */
     67        const ISRINIB *p_isrinib;       /* 初期化ブロックへのポインタ */
    7468} ISRCB;
    7569
    7670/*
    77  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŒÄo‚µƒLƒ
    78 [‚ðŒŸõ‚·‚邽‚߂̃f[ƒ^\‘¢
     71 *  割込みサービスルーチン呼出しキューを検索するためのデータ構造
    7972 */
    8073typedef struct {
    81         INTNO           intno;                  /* Š„ž‚ݔԍ† */
    82         QUEUE           *p_isr_queue;   /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŒÄo‚µƒLƒ
    83 [ */
     74        INTNO           intno;                  /* 割込み番号 */
     75        QUEUE           *p_isr_queue;   /* 割込みサービスルーチン呼出しキュー */
    8476} ISR_ENTRY;
    8577
    8678/*
    87  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ƒLƒ
    88 [‚̃Gƒ“ƒgƒŠ”ikernel_cfg.cj
     79 *  割込みサービスルーチンキューのエントリ数(kernel_cfg.c)
    8980 */
    9081extern const uint_t tnum_isr_queue;
    9182
    9283/*
    93  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ƒLƒ
    94 [ƒŠƒXƒgikernel_cfg.cj
     84 *  割込みサービスルーチンキューリスト(kernel_cfg.c)
    9585 */
    9686extern const ISR_ENTRY isr_queue_list[];
    9787
    9888/*
    99  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ƒLƒ
    100 [‚̃GƒŠƒAikernel_cfg.cj
     89 *  割込みサービスルーチンキューのエリア(kernel_cfg.c)
    10190 */
    10291extern QUEUE isr_queue_table[];
    10392
    10493/*
    105  *  Žg—p‚µ‚Ä‚¢‚È‚¢Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     94 *  使用していない割込みサービスルーチン管理ブロックのリスト
    10695 */
    10796extern QUEUE    free_isrcb;
    10897
    10998/*
    110  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ID‚̍őå’likernel_cfg.cj
     99 *  割込みサービスルーチンIDの最大値(kernel_cfg.c)
    111100 *
    112  *  Ã“I‚ɐ¶¬‚³‚ê‚銄ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÍID”ԍ†‚ðŽ‚½‚È‚¢‚½‚߁C
    113  *  tmax_isrid‚Í“®“I‚ɐ¶¬‚³‚ê‚銄ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚ÌID”ԍ†‚̍őå’l
    114  *  ‚Å‚ ‚éDÃ“I‚ɐ¶¬‚³‚ê‚銄ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐”‚́Ctnum_sisr‚É•Û
    115  *  Ž‚·‚éD
     101 *  静的に生成される割込みサービスルーチンはID番号を持たないため,
     102 *  tmax_isridは動的に生成される割込みサービスルーチンのID番号の最大値
     103 *  である.静的に生成される割込みサービスルーチンの数は,tnum_sisrに保
     104 *  持する.
    116105 */
    117106extern const ID         tmax_isrid;
     
    119108
    120109/*
    121  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     110 *  割込みサービスルーチン初期化ブロックのエリア(kernel_cfg.c)
    122111 */
    123112extern const ISRINIB    sisrinib_table[];
     
    125114
    126115/*
    127  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     116 *  割込みサービスルーチン管理ブロックのエリア(kernel_cfg.c)
    128117 */
    129118extern ISRCB    isrcb_table[];
    130119
    131120/*
    132  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚©‚犄ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ID‚ðŽæ
    133  *  ‚èo‚·‚½‚߂̃}ƒNƒ
     121 *  割込みサービスルーチン管理ブロックから割込みサービスルーチンIDを取
     122 *  り出すためのマクロ
    134123 */
    135124#define ISRID(p_isrcb)  ((ID)(((p_isrcb) - isrcb_table) \
     
    137126
    138127/*
    139  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‹@”\‚̏‰Šú‰»
     128 *  割込みサービスルーチン機能の初期化
    140129 */
    141130extern void initialize_isr(void);
    142131
    143132/*
    144  *  Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̌ďo‚µ
     133 *  割込みサービスルーチンの呼出し
    145134 */
    146135extern void call_isr(QUEUE *p_isr_queue);
     
    149138
    150139/*
    151  *  Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     140 *  割込みハンドラ初期化ブロック
    152141 */
    153142typedef struct interrupt_handler_initialization_block {
    154         INHNO           inhno;                  /* Š„ž‚݃nƒ“ƒhƒ‰”ԍ† */
    155         ATR                     inhatr;                 /* Š„ž‚݃nƒ“ƒhƒ‰‘®« */
    156         FP                      int_entry;              /* Š„ž‚݃nƒ“ƒhƒ‰‚̏o“üŒûˆ—‚̔Ԓn */
     143        INHNO           inhno;                  /* 割込みハンドラ番号 */
     144        ATR                     inhatr;                 /* 割込みハンドラ属性 */
     145        FP                      int_entry;              /* 割込みハンドラの出入口処理の番地 */
    157146} INHINIB;
    158147
    159148/*
    160  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒuƒƒbƒN
     149 *  割込み要求ライン初期化ブロック
    161150 */
    162151typedef struct interrupt_request_initialization_block {
    163         INTNO           intno;                  /* Š„ž‚ݔԍ† */
    164         ATR                     intatr;                 /* Š„ž‚Ý‘®« */
    165         PRI                     intpri;                 /* Š„ž‚Ý—Dæ“x */
     152        INTNO           intno;                  /* 割込み番号 */
     153        ATR                     intatr;                 /* 割込み属性 */
     154        PRI                     intpri;                 /* 割込み優先度 */
    166155} INTINIB;
    167156
    168157/*
    169  *  Š„ž‚݃nƒ“ƒhƒ‰”ԍ†‚̐”ikernel_cfg.cj
     158 *  割込みハンドラ番号の数(kernel_cfg.c)
    170159 */
    171160extern const uint_t     tnum_inhno;
    172161
    173162/*
    174  *  Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     163 *  割込みハンドラ初期化ブロックのエリア(kernel_cfg.c)
    175164 */
    176165extern const INHINIB    inhinib_table[];
    177166
    178167/*
    179  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̐”ikernel_cfg.cj
     168 *  割込み要求ラインの数(kernel_cfg.c)
    180169 */
    181170extern const uint_t     tnum_intno;
    182171
    183172/*
    184  *  Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     173 *  割込み要求ライン初期化ブロックのエリア(kernel_cfg.c)
    185174 */
    186175extern const INTINIB    intinib_table[];
     
    189178
    190179/*
    191  *  Š„ž‚ÝŠÇ—‹@”\‚̏‰Šú‰»
     180 *  割込み管理機能の初期化
    192181 */
    193182extern void     initialize_interrupt(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel.tf

    • Property svn:mime-type changed from text/plain to text/plain; charset=SHIFT_JIS
    r164 r167  
    99$               Graduate School of Information Science, Nagoya Univ., JAPAN
    1010
    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
     11$   上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12$   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13$   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14$   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15$       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16$       スコード中に含まれていること.
     17$   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18$       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19$       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20$       の無保証規定を掲載すること.
     21$   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22$       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23$       と.
     24$     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25$         作権表示,この利用条件および下記の無保証規定を掲載すること.
     26$     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27$         報告すること.
     28$   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29$       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30$       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31$       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32$       免責すること.
    3733
    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
     34$   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35$   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36$   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37$   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38$   の責任を負わない.
    4339$
    4440$   $Id$
     
    4743
    4844$ =====================================================================
    49 $ AID_YYY‚̏ˆ—
     45$ AID_YYYの処理
    5046$ =====================================================================
    5147
    5248$num_atskid = 0$
    5349$FOREACH i ATSK.ORDER_LIST$
    54 $       // notsk‚ª•‰‚̏ꍇiE_PARj
     50$       // notskが負の場合(E_PAR)
    5551        $IF ATSK.NOTSK[i] < 0$
    5652                $ERROR ATSK.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "notsk", ATSK.NOTSK[i], "AID_TSK")$$END$
     
    6258$num_asemid = 0$
    6359$FOREACH i ASEM.ORDER_LIST$
    64 $       // nosem‚ª•‰‚̏ꍇiE_PARj
     60$       // nosemが負の場合(E_PAR)
    6561        $IF ASEM.NOSEM[i] < 0$
    6662                $ERROR ASEM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nosem", ASEM.NOSEM[i], "AID_SEM")$$END$
     
    7268$num_aflgid = 0$
    7369$FOREACH i AFLG.ORDER_LIST$
    74 $       // noflg‚ª•‰‚̏ꍇiE_PARj
     70$       // noflgが負の場合(E_PAR)
    7571        $IF AFLG.NOFLG[i] < 0$
    7672                $ERROR AFLG.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noflg", AFLG.NOFLG[i], "AID_FLG")$$END$
     
    8278$num_adtqid = 0$
    8379$FOREACH i ADTQ.ORDER_LIST$
    84 $       // nodtq‚ª•‰‚̏ꍇiE_PARj
     80$       // nodtqが負の場合(E_PAR)
    8581        $IF ADTQ.NODTQ[i] < 0$
    8682                $ERROR ADTQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nodtq", ADTQ.NODTQ[i], "AID_DTQ")$$END$
     
    9288$num_apdqid = 0$
    9389$FOREACH i APDQ.ORDER_LIST$
    94 $       // nopdq‚ª•‰‚̏ꍇiE_PARj
     90$       // nopdqが負の場合(E_PAR)
    9591        $IF APDQ.NOPDQ[i] < 0$
    9692                $ERROR APDQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nopdq", APDQ.NOPDQ[i], "AID_PDQ")$$END$
     
    10298$num_ambxid = 0$
    10399$FOREACH i AMBX.ORDER_LIST$
    104 $       // nombx‚ª•‰‚̏ꍇiE_PARj
     100$       // nombxが負の場合(E_PAR)
    105101        $IF AMBX.NOMBX[i] < 0$
    106102                $ERROR AMBX.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nombx", AMBX.NOMBX[i], "AID_MBX")$$END$
     
    112108$num_ampfid = 0$
    113109$FOREACH i AMPF.ORDER_LIST$
    114 $       // nompf‚ª•‰‚̏ꍇiE_PARj
     110$       // nompfが負の場合(E_PAR)
    115111        $IF AMPF.NOMPF[i] < 0$
    116112                $ERROR AMPF.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nompf", AMPF.NOMPF[i], "AID_MPF")$$END$
     
    122118$num_acycid = 0$
    123119$FOREACH i ACYC.ORDER_LIST$
    124 $       // nocyc‚ª•‰‚̏ꍇiE_PARj
     120$       // nocycが負の場合(E_PAR)
    125121        $IF ACYC.NOCYC[i] < 0$
    126122                $ERROR ACYC.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nocyc", ACYC.NOCYC[i], "AID_CYC")$$END$
     
    132128$num_aalmid = 0$
    133129$FOREACH i AALM.ORDER_LIST$
    134 $       // noalm‚ª•‰‚̏ꍇiE_PARj
     130$       // noalmが負の場合(E_PAR)
    135131        $IF AALM.NOALM[i] < 0$
    136132                $ERROR AALM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noalm", AALM.NOALM[i], "AID_ALM")$$END$
     
    142138$num_aisrid = 0$
    143139$FOREACH i AISR.ORDER_LIST$
    144 $       // noisr‚ª•‰‚̏ꍇiE_PARj
     140$       // noisrが負の場合(E_PAR)
    145141        $IF AISR.NOISR[i] < 0$
    146142                $ERROR AISR.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noisr", AISR.NOISR[i], "AID_ISR")$$END$
     
    152148
    153149$ =====================================================================
    154 $ kernel_cfg.h‚̐¶¬
     150$ kernel_cfg.hの生成
    155151$ =====================================================================
    156152
     
    202198
    203199$ =====================================================================
    204 $ kernel_cfg.c‚̐¶¬
     200$ kernel_cfg.cの生成
    205201$ =====================================================================
    206202
     
    216212
    217213$
    218 ƒCƒ“ƒNƒ‹[ƒhƒfƒBƒŒƒNƒeƒBƒui#includej
     214インクルードディレクティブ(#include)
    219215$
    220216/*$NL$
     
    226222
    227223$
    228 ƒIƒuƒWƒFƒNƒg‚ÌID”ԍ†‚ð•ÛŽ‚·‚é•Ï”
     224オブジェクトのID番号を保持する変数
    229225$
    230226$IF USE_EXTERNAL_ID$
     
    263259
    264260$
    265 ƒ^ƒXƒN
     261タスク
    266262$
    267263/*$NL$
     
    270266$NL$
    271267
    272 $ Ã“I‚ɐ¶¬‚³‚ꂽƒ^ƒXƒN‚ª1ŒÂˆÈã‘¶Ý‚·‚邱‚Ƃ̃`ƒFƒbƒN
     268$ 静的に生成されたタスクが1個以上存在することのチェック
    273269$IF !LENGTH(TSK.ID_LIST)$
    274270        $ERROR$$FORMAT(_("no task is registered"))$$END$
    275271$END$
    276272
    277 $ Ã“I‚ɐ¶¬‚³‚ꂽƒ^ƒXƒN‚̐”
     273$ 静的に生成されたタスクの数
    278274#define TNUM_STSKID     $LENGTH(TSK.ID_LIST)$$NL$
    279275$NL$
    280276
    281 $ ƒ^ƒXƒNID”ԍ†‚̍őå’l
     277$ タスクID番号の最大値
    282278const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$
    283279const ID _kernel_tmax_stskid = (TMIN_TSKID + TNUM_STSKID - 1);$NL$
    284280$NL$
    285281
    286 $ ƒGƒ‰[ƒ`ƒFƒbƒN
     282$ エラーチェック
    287283$FOREACH tskid TSK.ID_LIST$
    288 $       // tskatr‚ªimTA_ACTnj‚Å‚È‚¢ê‡iE_RSATRj
     284$       // tskatrが([TA_ACT])でない場合(E_RSATR)
    289285        $IF (TSK.TSKATR[tskid] & ~(TA_ACT|TARGET_TSKATR)) != 0$
    290286                $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$
    291287        $END$
    292288
    293 $       // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)‚Å‚È‚¢ê‡iE_PARj
     289$       // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR)
    294290        $IF !(TMIN_TPRI <= TSK.ITSKPRI[tskid] && TSK.ITSKPRI[tskid] <= TMAX_TPRI)$
    295291                $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "itskpri", TSK.ITSKPRI[tskid], tskid, "CRE_TSK")$$END$
    296292        $END$
    297293
    298 $       // texatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     294$       // texatrが(TA_NULL)でない場合(E_RSATR)
    299295        $IF LENGTH(TSK.TEXATR[tskid]) && TSK.TEXATR[tskid] != 0$
    300296                $ERROR DEF_TEX.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "texatr", TSK.TEXATR[tskid], tskid, "DEF_TEX")$$END$
     
    302298$END$
    303299
    304 $ ƒXƒ^ƒbƒN—̈æ‚̐¶¬‚Æ‚»‚ê‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     300$ スタック領域の生成とそれに関するエラーチェック
    305301$FOREACH tskid TSK.ID_LIST$
    306 $       // stksz‚ª0ˆÈ‰º‚©Cƒ^[ƒQƒbƒg’è‹`‚̍ŏ¬’liTARGET_MIN_STKSZj‚æ‚è‚à
    307 $       // ¬‚³‚¢ê‡iE_PARj
     302$       // stkszが0以下か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも
     303$       // 小さい場合(E_PAR)
    308304        $IF TSK.STKSZ[tskid] <= 0 || (TARGET_MIN_STKSZ
    309305                                                                        && TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$
     
    311307        $END$
    312308
    313 $       // stksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     309$       // stkszがスタック領域のサイズとして正しくない場合(E_PAR)
    314310        $IF !EQ(TSK.STK[tskid], "NULL") && CHECK_STKSZ_ALIGN
    315311                                                        && (TSK.STKSZ[tskid] & (CHECK_STKSZ_ALIGN - 1))$
     
    328324$NL$
    329325
    330 $ ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚̐¶¬iƒ^ƒXƒN‚Í1ŒÂˆÈã‘¶Ý‚·‚éj
     326$ タスク初期化ブロックの生成(タスクは1個以上存在する)
    331327const TINIB _kernel_tinib_table[TNUM_STSKID] = {$NL$
    332328$JOINEACH tskid TSK.ID_LIST ",\n"$
    333 $       // ƒ^ƒXƒN‘®«CŠg’£î•ñC‹N“®”Ô’nC‹N“®Žž—Dæ“x
     329$       // タスク属性,拡張情報,起動番地,起動時優先度
    334330        $TAB${
    335331        $SPC$($TSK.TSKATR[tskid]$), (intptr_t)($TSK.EXINF[tskid]$),
    336332        $SPC$((TASK)($TSK.TASK[tskid]$)), INT_PRIORITY($TSK.ITSKPRI[tskid]$),
    337333
    338 $       // ƒ^ƒXƒN‰Šú‰»ƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒNCƒXƒ^ƒbƒN—̈æ
     334$       // タスク初期化コンテキストブロック,スタック領域
    339335        $IF USE_TSKINICTXB$
    340336                $GENERATE_TSKINICTXB(tskid)$
     
    343339        $END$
    344340
    345 $       // ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‘®«‚Æ‹N“®”Ô’n
     341$       // タスク例外処理ルーチンの属性と起動番地
    346342        $SPC$($ALT(TSK.TEXATR[tskid],"TA_NULL")$), ($ALT(TSK.TEXRTN[tskid],"NULL")$) }
    347343$END$$NL$
     
    349345$NL$
    350346
    351 $ “®“I¶¬ƒ^ƒXƒN—p‚̃^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     347$ 動的生成タスク用のタスク初期化ブロックの生成
    352348$IF num_atskid > 0$
    353349        TINIB _kernel_atinib_table[$num_atskid$];$NL$
     
    356352$END$$NL$
    357353
    358 $ ƒ^ƒXƒNŠÇ—ƒuƒƒbƒN‚̐¶¬
     354$ タスク管理ブロックの生成
    359355TCB _kernel_tcb_table[TNUM_TSKID];$NL$
    360356$NL$
    361357
    362 $ ƒ^ƒXƒN¶¬‡˜ƒe[ƒuƒ‹‚̐¶¬
     358$ タスク生成順序テーブルの生成
    363359const ID _kernel_torder_table[TNUM_STSKID] = {$NL$
    364360$TAB$$JOINEACH tskid TSK.ORDER_LIST ", "$$tskid$$END$$NL$
     
    367363
    368364$
    369 ƒZƒ}ƒtƒH
     365セマフォ
    370366$
    371367/*$NL$
     
    374370$NL$
    375371
    376 $ Ã“I‚ɐ¶¬‚³‚ꂽƒZƒ}ƒtƒH‚̐”
     372$ 静的に生成されたセマフォの数
    377373#define TNUM_SSEMID     $LENGTH(SEM.ID_LIST)$$NL$
    378374$NL$
    379375
    380 $ ƒZƒ}ƒtƒHID”ԍ†‚̍őå’l
     376$ セマフォID番号の最大値
    381377const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);$NL$
    382378const ID _kernel_tmax_ssemid = (TMIN_SEMID + TNUM_SSEMID - 1);$NL$
    383379$NL$
    384380
    385 $ ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     381$ セマフォ初期化ブロックの生成
    386382$IF LENGTH(SEM.ID_LIST)$
    387383        const SEMINIB _kernel_seminib_table[TNUM_SSEMID] = {$NL$
    388384        $JOINEACH semid SEM.ID_LIST ",\n"$
    389 $               // sematr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
     385$               // sematrが([TA_TPRI])でない場合(E_RSATR)
    390386                $IF (SEM.SEMATR[semid] & ~TA_TPRI) != 0$
    391387                        $ERROR SEM.TEXT_LINE[semid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "sematr", SEM.SEMATR[semid], semid, "CRE_SEM")$$END$
    392388                $END$
    393389
    394 $               // (0 <= isemcnt && isemcnt <= maxsem)‚Å‚È‚¢ê‡iE_PARj
     390$               // (0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR)
    395391                $IF !(0 <= SEM.ISEMCNT[semid] && SEM.ISEMCNT[semid] <= SEM.MAXSEM[semid])$
    396392                        $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "isemcnt", SEM.ISEMCNT[semid], semid, "CRE_SEM")$$END$
    397393                $END$
    398394
    399 $               // (1 <= maxsem && maxsem <= TMAX_MAXSEM)‚Å‚È‚¢ê‡iE_PARj
     395$               // (1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR)
    400396                $IF !(1 <= SEM.MAXSEM[semid] && SEM.MAXSEM[semid] <= TMAX_MAXSEM)$
    401397                        $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxsem", SEM.MAXSEM[semid], semid, "CRE_SEM")$$END$
    402398                $END$
    403399
    404 $               // ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN
     400$               // セマフォ初期化ブロック
    405401                $TAB${ ($SEM.SEMATR[semid]$), ($SEM.ISEMCNT[semid]$), ($SEM.MAXSEM[semid]$) }
    406402        $END$$NL$
     
    410406$END$$NL$
    411407
    412 $ “®“I¶¬ƒZƒ}ƒtƒH—p‚̃Zƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     408$ 動的生成セマフォ用のセマフォ初期化ブロックの生成
    413409$IF num_asemid > 0$
    414410        SEMINIB _kernel_aseminib_table[$num_asemid$];$NL$
     
    417413$END$$NL$
    418414
    419 $ ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚̐¶¬
     415$ セマフォ管理ブロックの生成
    420416$IF num_semid > 0$
    421417        SEMCB _kernel_semcb_table[TNUM_SEMID];$NL$
     
    425421
    426422$
    427 ƒCƒxƒ“ƒgƒtƒ‰ƒO
     423イベントフラグ
    428424$
    429425/*$NL$
     
    432428$NL$
    433429
    434 $ Ã“I‚ɐ¶¬‚³‚ꂽƒCƒxƒ“ƒgƒtƒ‰ƒO‚̐”
     430$ 静的に生成されたイベントフラグの数
    435431#define TNUM_SFLGID     $LENGTH(FLG.ID_LIST)$$NL$
    436432$NL$
    437433
    438 $ ƒCƒxƒ“ƒgƒtƒ‰ƒOID”ԍ†‚̍őå’l
     434$ イベントフラグID番号の最大値
    439435const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$
    440436const ID _kernel_tmax_sflgid = (TMIN_FLGID + TNUM_SFLGID - 1);$NL$
    441437$NL$
    442438
    443 $ ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     439$ イベントフラグ初期化ブロックの生成
    444440$IF LENGTH(FLG.ID_LIST)$
    445441        const FLGINIB _kernel_flginib_table[TNUM_SFLGID] = {$NL$
    446442        $JOINEACH flgid FLG.ID_LIST ",\n"$
    447 $               // flgatr‚ªimTA_TPRInbmTA_WMULnbmTA_CLRnj‚Å‚È‚¢ê‡iE_RSATRj
     443$               // flgatrが([TA_TPRI]|[TA_WMUL]|[TA_CLR])でない場合(E_RSATR)
    448444                $IF (FLG.FLGATR[flgid] & ~(TA_TPRI|TA_WMUL|TA_CLR)) != 0$
    449445                        $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$
    450446                $END$
    451447
    452 $               // iflgptn‚ªFLGPTN‚ÉŠi”[‚Å‚«‚È‚¢ê‡iE_PARj
     448$               // iflgptnがFLGPTNに格納できない場合(E_PAR)
    453449                $IF (FLG.IFLGPTN[flgid] & ~((1 << TBIT_FLGPTN) - 1)) != 0$
    454450                        $ERROR FLG.TEXT_LINE[flgid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "iflgptn", FLG.IFLGPTN[flgid], flgid, "CRE_FLG")$$END$
    455451                $END$
    456452
    457 $               // ƒCƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN
     453$               // イベントフラグ初期化ブロック
    458454                $TAB${ ($FLG.FLGATR[flgid]$), ($FLG.IFLGPTN[flgid]$) }
    459455        $END$$NL$
     
    463459$END$$NL$
    464460
    465 $ “®“I¶¬ƒCƒxƒ“ƒgƒtƒ‰ƒO—p‚̃Cƒxƒ“ƒgƒtƒ‰ƒO‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     461$ 動的生成イベントフラグ用のイベントフラグ初期化ブロックの生成
    466462$IF num_aflgid > 0$
    467463        FLGINIB _kernel_aflginib_table[$num_aflgid$];$NL$
     
    470466$END$$NL$
    471467
    472 $ ƒCƒxƒ“ƒgƒtƒ‰ƒOŠÇ—ƒuƒƒbƒN‚̐¶¬
     468$ イベントフラグ管理ブロックの生成
    473469$IF num_flgid > 0$
    474470        FLGCB _kernel_flgcb_table[TNUM_FLGID];$NL$
     
    478474
    479475$
    480 $  ƒf[ƒ^ƒLƒ
    481 [
     476$  データキュー
    482477$
    483478/*$NL$
     
    486481$NL$
    487482
    488 $ Ã“I‚ɐ¶¬‚³‚ꂽƒf[ƒ^ƒLƒ
    489 [‚̐”
     483$ 静的に生成されたデータキューの数
    490484#define TNUM_SDTQID     $LENGTH(DTQ.ID_LIST)$$NL$
    491485$NL$
    492486
    493 $ ƒf[ƒ^ƒLƒ
    494 [ID”ԍ†‚̍őå’l
     487$ データキューID番号の最大値
    495488const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$
    496489const ID _kernel_tmax_sdtqid = (TMIN_DTQID + TNUM_SDTQID - 1);$NL$
     
    499492$IF LENGTH(DTQ.ID_LIST)$
    500493        $FOREACH dtqid DTQ.ID_LIST$
    501 $               // dtqatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
     494$               // dtqatrが([TA_TPRI])でない場合(E_RSATR)
    502495                $IF (DTQ.DTQATR[dtqid] & ~TA_TPRI) != 0$
    503496                        $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$
    504497                $END$
    505498
    506 $               // dtqcnt‚ª•‰‚̏ꍇiE_PARj
     499$               // dtqcntが負の場合(E_PAR)
    507500                $IF DTQ.DTQCNT[dtqid] < 0$
    508501                        $ERROR DTQ.TEXT_LINE[dtqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqcnt", DTQ.DTQCNT[dtqid], dtqid, "CRE_DTQ")$$END$
    509502                $END$
    510503
    511 $               // dtqmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
     504$               // dtqmbがNULLでない場合(E_NOSPT)
    512505                $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$
    513506                        $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$
    514507                $END$
    515508
    516 $               // ƒf[ƒ^ƒLƒ
    517 [ŠÇ——̈æ
     509$               // データキュー管理領域
    518510                $IF DTQ.DTQCNT[dtqid]$
    519511                        static DTQMB _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$
     
    521513        $END$
    522514
    523 $       // ƒf[ƒ^ƒLƒ
    524 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     515$       // データキュー初期化ブロックの生成
    525516        const DTQINIB _kernel_dtqinib_table[TNUM_SDTQID] = {$NL$
    526517        $JOINEACH dtqid DTQ.ID_LIST ",\n"$
     
    532523$END$$NL$
    533524
    534 $ “®“I¶¬ƒf[ƒ^ƒLƒ
    535 [—p‚̃f[ƒ^ƒLƒ
    536 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     525$ 動的生成データキュー用のデータキュー初期化ブロックの生成
    537526$IF num_adtqid > 0$
    538527        DTQINIB _kernel_adtqinib_table[$num_adtqid$];$NL$
     
    541530$END$$NL$
    542531
    543 $ ƒf[ƒ^ƒLƒ
    544 [ŠÇ—ƒuƒƒbƒN‚̐¶¬
     532$ データキュー管理ブロックの生成
    545533$IF num_dtqid > 0$
    546534        DTQCB _kernel_dtqcb_table[TNUM_DTQID];$NL$
     
    550538
    551539$
    552 $  —Dæ“xƒf[ƒ^ƒLƒ
    553 [
     540$  優先度データキュー
    554541$
    555542/*$NL$
     
    558545$NL$
    559546
    560 $ Ã“I‚ɐ¶¬‚³‚ꂽ—Dæ“xƒf[ƒ^ƒLƒ
    561 [‚̐”
     547$ 静的に生成された優先度データキューの数
    562548#define TNUM_SPDQID     $LENGTH(PDQ.ID_LIST)$$NL$
    563549$NL$
    564550
    565 $ —Dæ“xƒf[ƒ^ƒLƒ
    566 [ID”ԍ†‚̍őå’l
     551$ 優先度データキューID番号の最大値
    567552const ID _kernel_tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);$NL$
    568553const ID _kernel_tmax_spdqid = (TMIN_PDQID + TNUM_SPDQID - 1);$NL$
     
    571556$IF LENGTH(PDQ.ID_LIST)$
    572557        $FOREACH pdqid PDQ.ID_LIST$
    573 $               // pdqatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
     558$               // pdqatrが([TA_TPRI])でない場合(E_RSATR)
    574559                $IF (PDQ.PDQATR[pdqid] & ~TA_TPRI) != 0$
    575560                        $ERROR PDQ.TEXT_LINE[pdqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqatr", PDQ.PDQATR[pdqid], pdqid, "CRE_PDQ")$$END$
    576561                $END$
    577562
    578 $               // pdqcnt‚ª•‰‚̏ꍇiE_PARj
     563$               // pdqcntが負の場合(E_PAR)
    579564                $IF PDQ.PDQCNT[pdqid] < 0$
    580565                        $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqcnt", PDQ.PDQCNT[pdqid], pdqid, "CRE_PDQ")$$END$
    581566                $END$
    582567
    583 $               // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)‚Å‚È‚¢ê‡iE_PARj
     568$               // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR)
    584569                $IF !(TMIN_DPRI <= PDQ.MAXDPRI[pdqid] && PDQ.MAXDPRI[pdqid] <= TMAX_DPRI)$
    585570                        $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxdpri", PDQ.MAXDPRI[pdqid], pdqid, "CRE_PDQ")$$END$
    586571                $END$
    587572
    588 $               // pdqmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
     573$               // pdqmbがNULLでない場合(E_NOSPT)
    589574                $IF !EQ(PDQ.PDQMB[pdqid], "NULL")$
    590575                        $ERROR PDQ.TEXT_LINE[pdqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqmb", PDQ.PDQMB[pdqid], pdqid, "CRE_PDQ")$$END$
    591576                $END$
    592577
    593 $               // —Dæ“xƒf[ƒ^ƒLƒ
    594 [ŠÇ——̈æ
     578$               // 優先度データキュー管理領域
    595579                $IF PDQ.PDQCNT[pdqid]$
    596580                        static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$
     
    598582        $END$
    599583
    600 $       // —Dæ“xƒf[ƒ^ƒLƒ
    601 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     584$       // 優先度データキュー初期化ブロックの生成
    602585        const PDQINIB _kernel_pdqinib_table[TNUM_SPDQID] = {$NL$
    603586        $JOINEACH pdqid PDQ.ID_LIST ",\n"$
     
    609592$END$$NL$
    610593
    611 $ “®“I¶¬—Dæ“xƒf[ƒ^ƒLƒ
    612 [—p‚Ì—Dæ“xƒf[ƒ^ƒLƒ
    613 [‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     594$ 動的生成優先度データキュー用の優先度データキュー初期化ブロックの生成
    614595$IF num_apdqid > 0$
    615596        PDQINIB _kernel_apdqinib_table[$num_apdqid$];$NL$
     
    618599$END$$NL$
    619600
    620 $ —Dæ“xƒf[ƒ^ƒLƒ
    621 [ŠÇ—ƒuƒƒbƒN‚̐¶¬
     601$ 優先度データキュー管理ブロックの生成
    622602$IF num_pdqid > 0$
    623603        PDQCB _kernel_pdqcb_table[TNUM_PDQID];$NL$
     
    627607
    628608$
    629 ƒ[ƒ‹ƒ{ƒbƒNƒX
     609メールボックス
    630610$
    631611/*$NL$
     
    634614$NL$
    635615
    636 $ Ã“I‚ɐ¶¬‚³‚ꂽƒ[ƒ‹ƒ{ƒbƒNƒX‚̐”
     616$ 静的に生成されたメールボックスの数
    637617#define TNUM_SMBXID     $LENGTH(MBX.ID_LIST)$$NL$
    638618$NL$
    639619
    640 $ ƒ[ƒ‹ƒ{ƒbƒNƒXID”ԍ†‚̍őå’l
     620$ メールボックスID番号の最大値
    641621const ID _kernel_tmax_mbxid = (TMIN_MBXID + TNUM_MBXID - 1);$NL$
    642622const ID _kernel_tmax_smbxid = (TMIN_MBXID + TNUM_SMBXID - 1);$NL$
    643623$NL$
    644624
    645 $ ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     625$ メールボックス初期化ブロックの生成
    646626$IF LENGTH(MBX.ID_LIST)$
    647627        const MBXINIB _kernel_mbxinib_table[TNUM_SMBXID] = {$NL$
    648628        $JOINEACH mbxid MBX.ID_LIST ",\n"$
    649 $               // mbxatr‚ªimTA_TPRInbmTA_MPRInj‚Å‚È‚¢ê‡iE_RSATRj
     629$               // mbxatrが([TA_TPRI]|[TA_MPRI])でない場合(E_RSATR)
    650630                $IF (MBX.MBXATR[mbxid] & ~(TA_TPRI|TA_MPRI)) != 0$
    651631                        $ERROR MBX.TEXT_LINE[mbxid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mbxatr", MBX.MBXATR[mbxid], mbxid, "CRE_MBX")$$END$
    652632                $END$
    653633
    654 $               // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)‚Å‚È‚¢ê‡iE_PARj
     634$               // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)でない場合(E_PAR)
    655635                $IF !(TMIN_MPRI <= MBX.MAXMPRI[mbxid] && MBX.MAXMPRI[mbxid] <= TMAX_MPRI)$
    656636                        $ERROR MBX.TEXT_LINE[mbxid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxmpri", MBX.MAXMPRI[mbxid], mbxid, "CRE_MBX")$$END$
    657637                $END$
    658638
    659 $               // mprihd‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
     639$               // mprihdがNULLでない場合(E_NOSPT)
    660640                $IF !EQ(MBX.MPRIHD[mbxid], "NULL")$
    661641                        $ERROR MBX.TEXT_LINE[mbxid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mprihd", MBX.MPRIHD[mbxid], mbxid, "CRE_MBX")$$END$
    662642                $END$
    663643
    664 $               // ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN
     644$               // メールボックス初期化ブロック
    665645                $TAB${ ($MBX.MBXATR[mbxid]$), ($MBX.MAXMPRI[mbxid]$) }
    666646        $END$$NL$
     
    670650$END$$NL$
    671651
    672 $ “®“I¶¬ƒ[ƒ‹ƒ{ƒbƒNƒX—p‚̃[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     652$ 動的生成メールボックス用のメールボックス初期化ブロックの生成
    673653$IF num_ambxid > 0$
    674654        MBXINIB _kernel_ambxinib_table[$num_ambxid$];$NL$
     
    677657$END$$NL$
    678658
    679 $ ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚̐¶¬
     659$ メールボックス管理ブロックの生成
    680660$IF num_mbxid > 0$
    681661        MBXCB _kernel_mbxcb_table[TNUM_MBXID];$NL$
     
    685665
    686666$
    687 ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹
     667固定長メモリプール
    688668$
    689669/*$NL$
     
    692672$NL$
    693673
    694 $ Ã“I‚ɐ¶¬‚³‚ꂽŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̐”
     674$ 静的に生成された固定長メモリプールの数
    695675#define TNUM_SMPFID     $LENGTH(MPF.ID_LIST)$$NL$
    696676$NL$
    697677
    698 $ ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID”ԍ†‚̍őå’l
     678$ 固定長メモリプールID番号の最大値
    699679const ID _kernel_tmax_mpfid = (TMIN_MPFID + TNUM_MPFID - 1);$NL$
    700680const ID _kernel_tmax_smpfid = (TMIN_MPFID + TNUM_SMPFID - 1);$NL$
     
    703683$IF LENGTH(MPF.ID_LIST)$
    704684        $FOREACH mpfid MPF.ID_LIST$
    705 $               // mpfatr‚ªimTA_TPRInj‚Å‚È‚¢ê‡iE_RSATRj
     685$               // mpfatrが([TA_TPRI])でない場合(E_RSATR)
    706686                $IF (MPF.MPFATR[mpfid] & ~TA_TPRI) != 0$
    707687                        $ERROR MPF.TEXT_LINE[mpfid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfatr", MPF.MPFATR[mpfid], mpfid, "CRE_MPF")$$END$
    708688                $END$
    709689
    710 $               // blkcnt‚ª0ˆÈ‰º‚̏ꍇiE_PARj
     690$               // blkcntが0以下の場合(E_PAR)
    711691                $IF MPF.BLKCNT[mpfid] <= 0$
    712692                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blkcnt", MPF.BLKCNT[mpfid], mpfid, "CRE_MPF")$$END$
    713693                $END$
    714694
    715 $               // blksz‚ª0ˆÈ‰º‚̏ꍇiE_PARj
     695$               // blkszが0以下の場合(E_PAR)
    716696                $IF MPF.BLKSZ[mpfid] <= 0$
    717697                        $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blksz", MPF.BLKSZ[mpfid], mpfid, "CRE_MPF")$$END$
    718698                $END$
    719699
    720 $               // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ
     700$               // 固定長メモリプール領域
    721701                $IF EQ(MPF.MPF[mpfid], "NULL")$
    722702                        static MPF_T _kernel_mpf_$mpfid$[($MPF.BLKCNT[mpfid]$) * COUNT_MPF_T($MPF.BLKSZ[mpfid]$)];$NL$
    723703                $END$
    724704
    725 $               // mpfmb‚ªNULL‚Å‚È‚¢ê‡iE_NOSPTj
     705$               // mpfmbがNULLでない場合(E_NOSPT)
    726706                $IF !EQ(MPF.MPFMB[mpfid], "NULL")$
    727707                        $ERROR MPF.TEXT_LINE[mpfid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfmb", MPF.MPFMB[mpfid], mpfid, "CRE_MPF")$$END$
    728708                $END$
    729709
    730 $               // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ——̈æ
     710$               // 固定長メモリプール管理領域
    731711                static MPFMB _kernel_mpfmb_$mpfid$[$MPF.BLKCNT[mpfid]$];$NL$
    732712        $END$
    733713
    734 $       // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     714$       // 固定長メモリプール初期化ブロックの生成
    735715        const MPFINIB _kernel_mpfinib_table[TNUM_SMPFID] = {$NL$
    736716        $JOINEACH mpfid MPF.ID_LIST ",\n"$
     
    742722$END$$NL$
    743723
    744 $ “®“I¶¬ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—p‚̌Œ蒷ƒƒ‚ƒŠƒv[ƒ‹‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     724$ 動的生成固定長メモリプール用の固定長メモリプール初期化ブロックの生成
    745725$IF num_ampfid > 0$
    746726        MPFINIB _kernel_ampfinib_table[$num_ampfid$];$NL$
     
    749729$END$$NL$
    750730
    751 $ ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚̐¶¬
     731$ 固定長メモリプール管理ブロックの生成
    752732$IF num_mpfid > 0$
    753733        MPFCB _kernel_mpfcb_table[TNUM_MPFID];$NL$
     
    757737
    758738$
    759 ŽüŠúƒnƒ“ƒhƒ‰
     739周期ハンドラ
    760740$
    761741/*$NL$
     
    764744$NL$
    765745
    766 $ Ã“I‚ɐ¶¬‚³‚ꂽŽüŠúƒnƒ“ƒhƒ‰‚̐”
     746$ 静的に生成された周期ハンドラの数
    767747#define TNUM_SCYCID     $LENGTH(CYC.ID_LIST)$$NL$
    768748$NL$
    769749
    770 $ ŽüŠúƒnƒ“ƒhƒ‰ID”ԍ†‚̍őå’l
     750$ 周期ハンドラID番号の最大値
    771751const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$
    772752const ID _kernel_tmax_scycid = (TMIN_CYCID + TNUM_SCYCID - 1);$NL$
    773753$NL$
    774754
    775 $ ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹‚̐¶¬
     755$ 周期ハンドラ初期化テーブルの生成
    776756$IF LENGTH(CYC.ID_LIST)$
    777757        const CYCINIB _kernel_cycinib_table[TNUM_SCYCID] = {$NL$
    778758        $JOINEACH cycid CYC.ID_LIST ",\n"$
    779 $               // cycatr‚ªimTA_STAnj‚Å‚È‚¢ê‡iE_RSATRj
     759$               // cycatrが([TA_STA])でない場合(E_RSATR)
    780760                $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$
    781761                        $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$
    782762                $END$
    783763
    784 $               // (0 < cyctim && cyctim <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
     764$               // (0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR)
    785765                $IF !(0 < CYC.CYCTIM[cycid] && CYC.CYCTIM[cycid] <= TMAX_RELTIM)$
    786766                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$
    787767                $END$
    788768
    789 $               // (0 <= cycphs && cycphs <= TMAX_RELTIM)‚Å‚È‚¢ê‡iE_PARj
     769$               // (0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR)
    790770                $IF !(0 <= CYC.CYCPHS[cycid] && CYC.CYCPHS[cycid] <= TMAX_RELTIM)$
    791771                        $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$
    792772                $END$
    793773
    794 $               // ŒxFcycatr‚ÉTA_STA‚ªÝ’肳‚ê‚Ä‚¢‚āC(cycphs == 0)‚̏ꍇ
     774$               // 警告:cycatrにTA_STAが設定されていて,(cycphs == 0)の場合
    795775                $IF (CYC.CYCATR[cycid] & TA_STA) != 0 && CYC.CYCPHS[cycid] == 0$
    796776                        $WARNING CYC.TEXT_LINE[cycid]$$FORMAT(_("%1% is not recommended when %2% is set to %3% in %4%"), "cycphs==0", "TA_STA", "cycatr", "CRE_CYC")$$END$
    797777                $END$
    798778
    799 $               // ŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     779$               // 周期ハンドラ初期化ブロック
    800780                $TAB${ ($CYC.CYCATR[cycid]$), (intptr_t)($CYC.EXINF[cycid]$), ($CYC.CYCHDR[cycid]$), ($CYC.CYCTIM[cycid]$), ($CYC.CYCPHS[cycid]$) }
    801781        $END$$NL$
     
    805785$END$$NL$
    806786
    807 $ “®“I¶¬ŽüŠúƒnƒ“ƒhƒ‰—p‚ÌŽüŠúƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     787$ 動的生成周期ハンドラ用の周期ハンドラ初期化ブロックの生成
    808788$IF num_acycid > 0$
    809789        CYCINIB _kernel_acycinib_table[$num_acycid$];$NL$
     
    812792$END$$NL$
    813793
    814 $ ŽüŠúƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̐¶¬
     794$ 周期ハンドラ管理ブロックの生成
    815795$IF num_cycid > 0$
    816796        CYCCB _kernel_cyccb_table[TNUM_CYCID];$NL$
     
    820800
    821801$
    822 ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰
     802アラームハンドラ
    823803$
    824804/*$NL$
     
    827807$NL$
    828808
    829 $ Ã“I‚ɐ¶¬‚³‚ꂽƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̐”
     809$ 静的に生成されたアラームハンドラの数
    830810#define TNUM_SALMID     $LENGTH(ALM.ID_LIST)$$NL$
    831811$NL$
    832812
    833 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID”ԍ†‚̍őå’l
     813$ アラームハンドラID番号の最大値
    834814const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$
    835815const ID _kernel_tmax_salmid = (TMIN_ALMID + TNUM_SALMID - 1);$NL$
    836816$NL$
    837817
    838 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     818$ アラームハンドラ初期化ブロックの生成
    839819$IF LENGTH(ALM.ID_LIST)$
    840820        const ALMINIB _kernel_alminib_table[TNUM_SALMID] = {$NL$
    841821        $JOINEACH almid ALM.ID_LIST ",\n"$
    842 $               // almatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     822$               // almatrが(TA_NULL)でない場合(E_RSATR)
    843823                $IF ALM.ALMATR[almid] != 0$
    844824                        $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$
    845825                $END$
    846826
    847 $               // ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN
     827$               // アラームハンドラ初期化ブロック
    848828                $TAB${ ($ALM.ALMATR[almid]$), (intptr_t)($ALM.EXINF[almid]$), ($ALM.ALMHDR[almid]$) }
    849829        $END$$NL$
     
    853833$END$$NL$
    854834
    855 $ “®“I¶¬ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰—p‚̃Aƒ‰[ƒ€ƒnƒ“ƒhƒ‰‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     835$ 動的生成アラームハンドラ用のアラームハンドラ初期化ブロックの生成
    856836$IF num_aalmid > 0$
    857837        ALMINIB _kernel_aalminib_table[$num_aalmid$];$NL$
     
    860840$END$$NL$
    861841
    862 $ ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ŠÇ—ƒuƒƒbƒN‚̐¶¬
     842$ アラームハンドラ管理ブロックの生成
    863843$IF num_almid > 0$
    864844        ALMCB _kernel_almcb_table[TNUM_ALMID];$NL$
     
    868848
    869849$
    870 Š„ž‚ÝŠÇ—‹@”\
     850割込み管理機能
    871851$
    872852/*$NL$
     
    875855$NL$
    876856
    877 $ Š„ž‚ݔԍ†‚ÆŠ„ž‚݃nƒ“ƒhƒ‰”ԍ†‚Ì•ÏŠ·ƒe[ƒuƒ‹‚̍쐬
     857$ 割込み番号と割込みハンドラ番号の変換テーブルの作成
    878858$IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$
    879859        $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$
     
    887867$END$
    888868
    889 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     869$ 割込み要求ラインに関するエラーチェック
    890870$i = 0$
    891871$FOREACH intno INT.ORDER_LIST$
    892 $       // intno‚ªCFG_INT‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     872$       // intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR)
    893873        $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$
    894874                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$
    895875        $END$
    896876
    897 $       // intno‚ªCFG_INT‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
     877$       // intnoがCFG_INTによって設定済みの場合(E_OBJ)
    898878        $j = 0$
    899879        $FOREACH intno2 INT.ORDER_LIST$
     
    904884        $END$
    905885
    906 $       // intatr‚ªimTA_ENAINTnbmTA_EDGEnj‚Å‚È‚¢ê‡iE_RSATRj
     886$       // intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR)
    907887        $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|TARGET_INTATR)) != 0$
    908888                $ERROR INT.TEXT_LINE[intno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "intatr", INT.INTATR[intno], "intno", INT.INTNO[intno], "CFG_INT")$$END$
    909889        $END$
    910890
    911 $       // intpri‚ªCFG_INT‚ɑ΂·‚銄ž‚Ý—Dæ“x‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     891$       // intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR)
    912892        $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$
    913893                $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$
    914894        $END$
    915895
    916 $       // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
    917 $       // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ꂽê‡iE_OBJj
     896$       // カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRI
     897$       // よりも小さい値が指定された場合(E_OBJ)
    918898        $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$
    919899                $IF INT.INTPRI[intno] < TMIN_INTPRI$
     
    922902        $END$
    923903
    924 $       // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éintno‚ɑ΂µ‚āCintpri‚ÉTMIN_INTPRI
    925 $       // ‚æ‚è‚à¬‚³‚¢’l‚ªŽw’肳‚ê‚È‚©‚Á‚½ê‡iE_OBJj
     904$       // カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRI
     905$       // よりも小さい値が指定されなかった場合(E_OBJ)
    926906        $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$
    927907                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
     
    932912$END$
    933913
    934 $ Š„ž‚݃nƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     914$ 割込みハンドラに関するエラーチェック
    935915$i = 0$
    936916$FOREACH inhno INH.ORDER_LIST$
    937 $       // inhno‚ªDEF_INH‚ɑ΂·‚銄ž‚݃nƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     917$       // inhnoがDEF_INHに対する割込みハンドラ番号として正しくない場合(E_PAR)
    938918        $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$
    939919                $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
    940920        $END$
    941921
    942 $       // inhno‚ªDEF_INH‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
     922$       // inhnoがDEF_INHによって設定済みの場合(E_OBJ)
    943923        $j = 0$
    944924        $FOREACH inhno2 INH.ORDER_LIST$
     
    949929        $END$
    950930
    951 $       // inhatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     931$       // inhatrが(TA_NULL)でない場合(E_RSATR)
    952932        $IF (INH.INHATR[inhno] & ~TARGET_INHATR) != 0$
    953933                $ERROR INH.TEXT_LINE[inhno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "inhatr", INH.INHATR[inhno], "inhno", INH.INHNO[inhno], "DEF_INH")$$END$
    954934        $END$
    955935
    956 $       // ƒJ[ƒlƒ‹ŠÇ—‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
    957 $       //@‚ªŽw’肳‚ê‚Ä‚¢‚éê‡iE_RSATRj
     936$       // カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNEL
     937$       // が指定されている場合(E_RSATR)
    958938        $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$
    959939                $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$
     
    962942        $END$
    963943
    964 $       // ƒJ[ƒlƒ‹ŠÇ—ŠO‚ɌŒ肳‚ê‚Ä‚¢‚éinhno‚ɑ΂µ‚āCinhatr‚ÉTA_NONKERNEL
    965 $       // ‚ªŽw’肳‚ê‚Ä‚¢‚È‚¢ê‡iE_RSATRj
     944$       // カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNEL
     945$       // が指定されていない場合(E_RSATR)
    966946        $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$
    967947                $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
     
    972952        $IF LENGTH(INTNO[INH.INHNO[inhno]])$
    973953                $intno = INTNO[INH.INHNO[inhno]]$
    974 $               // inhno‚ɑΉž‚·‚éintno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
     954$               // inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)
    975955                $IF !LENGTH(INT.INTNO[intno])$
    976956                        $ERROR INH.TEXT_LINE[inhno]$E_OBJ: $FORMAT(_("%1% `%2%\' corresponding to %3% `%4%\' is not configured with %5%"), "intno", INT.INTNO[intno], "inhno", INH.INHNO[inhno], "CFG_INT")$$END$
    977957                $ELSE$
    978958                        $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
    979 $                               // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚炸Cinhno‚ɑΉž
    980 $                               // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
    981 $                               // TMIN_INTPRI‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
     959$                               // inhatrにTA_NONKERNELが指定されておらず,inhnoに対応
     960$                               // するintnoに対してCFG_INTで設定された割込み優先度が
     961$                               // TMIN_INTPRIよりも小さい場合(E_OBJ)
    982962                                $IF INT.INTPRI[intno] < TMIN_INTPRI$
    983963                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
    984964                                $END$
    985965                        $ELSE$
    986 $                               // inhatr‚ÉTA_NONKERNEL‚ªŽw’肳‚ê‚Ä‚¨‚èCinhno‚ɑΉž
    987 $                               // ‚·‚éintno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ª
    988 $                               // TMIN_INTPRIˆÈã‚Å‚ ‚éê‡iE_OBJj
     966$                               // inhatrにTA_NONKERNELが指定されており,inhnoに対応
     967$                               // するintnoに対してCFG_INTで設定された割込み優先度が
     968$                               // TMIN_INTPRI以上である場合(E_OBJ)
    989969                                $IF INT.INTPRI[intno] >= TMIN_INTPRI$
    990970                                        $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is lower than or equal to %5%"), "intpri", INT.INTPRI[intno], "inhno", INH.INHNO[inhno], "TMIN_INTPRI")$$END$
     
    996976$END$
    997977
    998 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRj‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     978$ 割込みサービスルーチン(ISR)に関するエラーチェック
    999979$FOREACH order ISR.ORDER_LIST$
    1000 $       // isratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     980$       // isratrが(TA_NULL)でない場合(E_RSATR)
    1001981        $IF (ISR.ISRATR[order] & ~TARGET_ISRATR) != 0$
    1002982                $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isratr", ISR.ISRATR[order], "ATT_ISR")$$END$
    1003983        $END$
    1004984
    1005 $       // intno‚ªATT_ISR‚ɑ΂·‚銄ž‚ݔԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     985$       // intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR)
    1006986        $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$
    1007987                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$
    1008988        $END$
    1009989
    1010 $       // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)‚Å‚È‚¢ê‡iE_PARj
     990$       // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR)
    1011991        $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$
    1012992                $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$
     
    1017997        $inhno = INHNO[intno]$
    1018998
    1019 $       // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚̃ŠƒXƒg‚̍쐬
     999$       // 割込み番号intnoに対して登録されたISRのリストの作成
    10201000        $isr_order_list = {}$
    10211001        $FOREACH order ISR.ORDER_LIST$
     
    10261006        $END$
    10271007
    1028 $       // Š„ž‚ݔԍ†intno‚ɑ΂µ‚Ä“o˜^‚³‚ꂽISR‚ª‘¶Ý‚·‚éê‡
     1008$       // 割込み番号intnoに対して登録されたISRが存在する場合
    10291009        $IF LENGTH(isr_order_list) > 0$
    1030 $               // intno‚ɑΉž‚·‚éinhno‚ɑ΂µ‚ÄDEF_INH‚ª‚ ‚éê‡iE_OBJj
     1010$               // intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)
    10311011                $IF LENGTH(INH.INHNO[inhno])$
    10321012                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' in %3% is duplicated with %4% `%5%\'"), "intno", ISR.INTNO[order_for_error], "ATT_ISR", "inhno", INH.INHNO[inhno])$$END$
    10331013                $END$
    10341014
    1035 $               // intno‚ɑ΂·‚éCFG_INT‚ª‚È‚¢ê‡iE_OBJj
     1015$               // intnoに対するCFG_INTがない場合(E_OBJ)
    10361016                $IF !LENGTH(INT.INTNO[intno])$
    10371017                        $ERROR ISR.TEXT_LINE[order_for_error]$E_OBJ: $FORMAT(_("%1% `%2%\' is not configured with %3%"), "intno", ISR.INTNO[order_for_error], "CFG_INT")$$END$
    10381018                $ELSE$
    1039 $                       // intno‚ɑ΂µ‚ÄCFG_INT‚Őݒ肳‚ꂽŠ„ž‚Ý—Dæ“x‚ªTMIN_INTPRI
    1040 $                       // ‚æ‚è‚à¬‚³‚¢ê‡iE_OBJj
     1019$                       // intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRI
     1020$                       // よりも小さい場合(E_OBJ)
    10411021                        $IF INT.INTPRI[intno] < TMIN_INTPRI$
    10421022                                $ERROR INT.TEXT_LINE[intno]$E_OBJ: $FORMAT(_("%1% `%2%\' configured for %3% `%4%\' is higher than %5%"), "intpri", INT.INTPRI[intno], "intno", ISR.INTNO[order_for_error], "TMIN_INTPRI")$$END$
     
    10461026$END$
    10471027
    1048 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRjŠÇ—‚̃f[ƒ^\‘¢
     1028$ 割込みサービスルーチン(ISR)管理のデータ構造
    10491029$intno_isr_list = {}$
    10501030$FOREACH intno INTNO_ATTISR_VALID$
     
    10821062$END$$NL$
    10831063
    1084 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“iISRjŒÄo‚µ‚Ì‚½‚ß‚ÌŠ„ž‚݃nƒ“ƒhƒ‰‚̐¶¬
     1064$ 割込みサービスルーチン(ISR)呼出しのための割込みハンドラの生成
    10851065$FOREACH intno INTNO_ISR$
    10861066        $inhno = INHNO[intno]$
     
    10921072        $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$
    10931073
    1094 $       // ISR—p‚ÌŠ„ž‚݃nƒ“ƒhƒ‰
     1074$       // ISR用の割込みハンドラ
    10951075        void$NL$
    10961076        _kernel_inthdr_$intno$(void)$NL$
     
    11031083$END$
    11041084
    1105 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐”
     1085$ 割込みサービスルーチンの数
    11061086#define TNUM_SISR       $LENGTH(ISR.ORDER_LIST)$$NL$
    11071087#define TNUM_ISR        $LENGTH(ISR.ORDER_LIST) + num_aisrid$$NL$
    11081088$NL$
    11091089
    1110 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ID”ԍ†‚̍őå’l
     1090$ 割込みサービスルーチンID番号の最大値
    11111091const ID _kernel_tmax_isrid = (TMIN_ISRID + TNUM_ISRID - 1);$NL$
    11121092const uint_t _kernel_tnum_sisr = TNUM_SISR;$NL$
    11131093$NL$
    11141094
    1115 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‰Šú‰»ƒuƒƒbƒN‚̐¶¬
     1095$ 割込みサービスルーチン初期化ブロックの生成
    11161096$IF LENGTH(ISR.ORDER_LIST)$
    11171097        const ISRINIB _kernel_sisrinib_table[TNUM_SISR] = {$NL$
     
    11251105$NL$
    11261106
    1127 $ “®“I¶¬Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“—p‚ÌŠ„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‰Šú‰»ƒuƒƒb
    1128 $ ƒN‚̐¶¬
     1107$ 動的生成割込みサービスルーチン用の割込みサービスルーチン初期化ブロッ
     1108$ クの生成
    11291109$IF num_aisrid > 0$
    11301110        ISRINIB _kernel_aisrinib_table[$num_aisrid$];$NL$
     
    11341114$NL$
    11351115
    1136 $ Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ŠÇ—ƒuƒƒbƒN‚̐¶¬
     1116$ 割込みサービスルーチン管理ブロックの生成
    11371117$IF num_isr > 0$
    11381118        ISRCB _kernel_isrcb_table[TNUM_ISR];$NL$
     
    11431123
    11441124$
    1145 Š„ž‚ÝŠÇ—‹@”\‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
    1146 $
    1147 $ Š„ž‚݃nƒ“ƒhƒ‰‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
     1125割込み管理機能のための標準的な初期化情報の生成
     1126$
     1127$ 割込みハンドラの初期化に必要な情報
    11481128$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$
    11491129
    1150 $ Š„ž‚݃nƒ“ƒhƒ‰”
     1130$ 割込みハンドラ数
    11511131#define TNUM_INHNO      $LENGTH(INH.ORDER_LIST)$$NL$
    11521132const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$
     
    11591139$NL$
    11601140
    1161 $ Š„ž‚݃nƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
     1141$ 割込みハンドラ初期化テーブル
    11621142$IF LENGTH(INH.ORDER_LIST)$
    11631143        const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$
     
    11751155$END$
    11761156
    1177 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‚̏‰Šú‰»‚É•K—v‚ȏî•ñ
     1157$ 割込み要求ラインの初期化に必要な情報
    11781158$IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INTINIB_TABLE,0)$
    11791159
    1180 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“”
     1160$ 割込み要求ライン数
    11811161#define TNUM_INTNO      $LENGTH(INT.ORDER_LIST)$$NL$
    11821162const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$
    11831163$NL$
    11841164
    1185 $ Š„ž‚Ý—v‹ƒ‰ƒCƒ“‰Šú‰»ƒe[ƒuƒ‹
     1165$ 割込み要求ライン初期化テーブル
    11861166$IF LENGTH(INT.ORDER_LIST)$
    11871167        const INTINIB _kernel_intinib_table[TNUM_INTNO] = {$NL$
     
    11961176
    11971177$
    1198 $  CPU—áŠOŠÇ—‹@”\
     1178$  CPU例外管理機能
    11991179$
    12001180/*$NL$
     
    12031183$NL$
    12041184
    1205 $ CPU—áŠOƒnƒ“ƒhƒ‰‚ÉŠÖ‚·‚éƒGƒ‰[ƒ`ƒFƒbƒN
     1185$ CPU例外ハンドラに関するエラーチェック
    12061186$i = 0$
    12071187$FOREACH excno EXC.ORDER_LIST$
    1208 $       // excno‚ªDEF_EXC‚ɑ΂·‚éCPU—áŠOƒnƒ“ƒhƒ‰”ԍ†‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     1188$       // excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR)
    12091189        $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$
    12101190                $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
    12111191        $END$
    12121192
    1213 $       // excno‚ªDEF_EXC‚É‚æ‚Á‚ĐݒèÏ‚݂̏ꍇiE_OBJj
     1193$       // excnoがDEF_EXCによって設定済みの場合(E_OBJ)
    12141194        $j = 0$
    12151195        $FOREACH excno2 EXC.ORDER_LIST$
     
    12201200        $END$
    12211201
    1222 $       // excatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1202$       // excatrが(TA_NULL)でない場合(E_RSATR)
    12231203        $IF (EXC.EXCATR[excno] & ~TARGET_EXCATR) != 0$
    12241204                $ERROR EXC.TEXT_LINE[excno]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "excatr", EXC.EXCATR[excno], "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$
     
    12271207$END$
    12281208
    1229 $ CPU—áŠOƒnƒ“ƒhƒ‰‚Ì‚½‚ß‚Ì•W€“I‚ȏ‰Šú‰»î•ñ‚̐¶¬
     1209$ CPU例外ハンドラのための標準的な初期化情報の生成
    12301210$IF !OMIT_INITIALIZE_EXCEPTION$
    12311211
    1232 $ CPU—áŠOƒnƒ“ƒhƒ‰”
     1212$ CPU例外ハンドラ数
    12331213#define TNUM_EXCNO      $LENGTH(EXC.ORDER_LIST)$$NL$
    12341214const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$
     
    12391219$NL$
    12401220
    1241 $ CPU—áŠOƒnƒ“ƒhƒ‰‰Šú‰»ƒe[ƒuƒ‹
     1221$ CPU例外ハンドラ初期化テーブル
    12421222$IF LENGTH(EXC.ORDER_LIST)$
    12431223        const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$
     
    12521232
    12531233$
    1254 ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
     1234非タスクコンテキスト用のスタック領域
    12551235$
    12561236/*$NL$
     
    12601240
    12611241$IF !LENGTH(ICS.ORDER_LIST)$
    1262 $       // DEF_ICS‚ª‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚̐ݒè
     1242$       // DEF_ICSがない場合のデフォルト値の設定
    12631243        #ifdef DEFAULT_ISTK$NL$
    12641244        $NL$
     
    12751255$ELSE$
    12761256
    1277 $       // Ã“IAPIuDEF_ICSv‚ª•¡”‚ ‚éiE_OBJj
     1257$       // 静的API「DEF_ICS」が複数ある(E_OBJ)
    12781258        $IF LENGTH(ICS.ORDER_LIST) > 1$
    12791259                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$
    12801260        $END$
    12811261
    1282 $       // istksz‚ª0ˆÈ‰º‚©Cƒ^[ƒQƒbƒg’è‹`‚̍ŏ¬’liTARGET_MIN_ISTKSZj‚æ‚è‚à
    1283 $       // ¬‚³‚¢ê‡iE_PARj
     1262$       // istkszが0以下か,ターゲット定義の最小値(TARGET_MIN_ISTKSZ)よりも
     1263$       // 小さい場合(E_PAR)
    12841264        $IF ICS.ISTKSZ[1] <= 0 || (TARGET_MIN_ISTKSZ
    12851265                                                                        && ICS.ISTKSZ[1] < TARGET_MIN_ISTKSZ)$
     
    12871267        $END$
    12881268
    1289 $       // istksz‚ªƒXƒ^ƒbƒN—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     1269$       // istkszがスタック領域のサイズとして正しくない場合(E_PAR)
    12901270        $IF !EQ(ICS.ISTK[1], "NULL") && CHECK_STKSZ_ALIGN
    12911271                                                        && (ICS.ISTKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$
     
    12941274
    12951275        $IF EQ(ICS.ISTK[1], "NULL")$
    1296 $               // ƒXƒ^ƒbƒN—̈æ‚ÌŽ©“®Š„•t‚¯
     1276$               // スタック領域の自動割付け
    12971277                static STK_T                            _kernel_istack[COUNT_STK_T($ICS.ISTKSZ[1]$)];$NL$
    12981278                #define TOPPERS_ISTKSZ          ROUND_STK_T($ICS.ISTKSZ[1]$)$NL$
     
    13051285$NL$
    13061286
    1307 $ ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ
     1287$ 非タスクコンテキスト用のスタック領域
    13081288const SIZE              _kernel_istksz = TOPPERS_ISTKSZ;$NL$
    13091289STK_T *const    _kernel_istk = TOPPERS_ISTK;$NL$
     
    13151295
    13161296$
    1317 ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ
     1297カーネルが割り付けるメモリ領域
    13181298$
    13191299/*$NL$
     
    13231303
    13241304$IF !LENGTH(KMM.ORDER_LIST)$
    1325 $       // DEF_KMM‚ª‚È‚¢ê‡‚̃fƒtƒHƒ‹ƒg’l‚̐ݒè
     1305$       // DEF_KMMがない場合のデフォルト値の設定
    13261306        #define TOPPERS_KMMSZ           0$NL$
    13271307        #define TOPPERS_KMM                     NULL$NL$
    13281308$ELSE$
    1329 $       // Ã“IAPIuDEF_KMMv‚ª•¡”‚ ‚éiE_OBJj
     1309$       // 静的API「DEF_KMM」が複数ある(E_OBJ)
    13301310        $IF LENGTH(KMM.ORDER_LIST) > 1$
    13311311                $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_KMM")$$END$
    13321312        $END$
    13331313
    1334 $       // kmmsz‚ª0ˆÈ‰º‚̏ꍇiE_PARj
     1314$       // kmmszが0以下の場合(E_PAR)
    13351315        $IF KMM.KMMSZ[1] <= 0$
    13361316                $ERROR KMM.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' is zero in %3%"), "kmmsz", KMM.KMMSZ[1], "DEF_KMM")$$END$
    13371317        $END$
    13381318
    1339 $       // kmmsz‚ªƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚̃TƒCƒY‚Æ‚µ‚Đ³‚µ‚­‚È‚¢ê‡iE_PARj
     1319$       // kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合(E_PAR)
    13401320        $IF !EQ(KMM.KMM[1], "NULL") && CHECK_MB_ALIGN
    13411321                                                        && (KMM.KMMSZ[1] & (CHECK_MB_ALIGN - 1))$
     
    13441324
    13451325        $IF EQ(KMM.KMM[1], "NULL")$
    1346 $               // ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚ÌŽ©“®Š„•t‚¯
     1326$               // カーネルが割り付けるメモリ領域の自動割付け
    13471327                static MB_T                                     _kernel_memory[TOPPERS_COUNT_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))];$NL$
    13481328                #define TOPPERS_KMMSZ           TOPPERS_ROUND_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))$NL$
     
    13551335$NL$
    13561336
    1357 $ ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ
     1337$ カーネルが割り付けるメモリ領域
    13581338const SIZE              _kernel_kmmsz = TOPPERS_KMMSZ;$NL$
    13591339MB_T *const             _kernel_kmm = TOPPERS_KMM;$NL$
     
    13611341
    13621342$
    1363 ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—
     1343タイムイベント管理
    13641344$
    13651345/*$NL$
     
    13711351
    13721352$
    1373 $  Šeƒ‚ƒWƒ
    1374 [ƒ‹‚̏‰Šú‰»ŠÖ”
     1353$  各モジュールの初期化関数
    13751354$
    13761355/*$NL$
     
    13971376
    13981377$
    1399 ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
     1378初期化ルーチンの実行関数
    14001379$
    14011380/*$NL$
     
    14071386{$NL$
    14081387$FOREACH order INI.ORDER_LIST$
    1409 $       // iniatr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1388$       // iniatrが(TA_NULL)でない場合(E_RSATR)
    14101389        $IF INI.INIATR[order] != 0$
    14111390                $ERROR INI.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "iniatr", INI.INIATR[order], "inirtn", INI.INIRTN[order], "ATT_INI")$$END$
     
    14171396
    14181397$
    1419 I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsŠÖ”
     1398終了処理ルーチンの実行関数
    14201399$
    14211400/*$NL$
     
    14271406{$NL$
    14281407$FOREACH rorder TER.RORDER_LIST$
    1429 $       // teratr‚ªiTA_NULLj‚Å‚È‚¢ê‡iE_RSATRj
     1408$       // teratrが(TA_NULL)でない場合(E_RSATR)
    14301409        $IF TER.TERATR[rorder] != 0$
    14311410                $ERROR TER.TEXT_LINE[rorder]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of %3% `%4%\' in %5%"), "teratr", TER.TERATR[rorder], "terrtn", TER.TERRTN[rorder], "ATT_TER")$$END$
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_api.csv

    • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_check.tf

    • Property svn:mime-type changed from text/plain to text/plain; charset=SHIFT_JIS
    r164 r167  
    88$               Graduate School of Information Science, Nagoya Univ., JAPAN
    99
    10 $   ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    11 $   ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    12 $   •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    13 $   (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    14 $       Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    15 $       ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    16 $   (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    17 $       —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    18 ƒƒ“ƒgi—˜—p
    19 $       ŽÒƒ}ƒjƒ
    20 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    21 $       ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    22 $   (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    23 $       —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    24 $       ‚ƁD
    25 $     (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    26 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    27 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    28 $         ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    29 $     (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    30 $         •ñ‚·‚邱‚ƁD
    31 $   (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    32 $       ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    33 $       ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    34 $       —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    35 $       –Ɛӂ·‚邱‚ƁD
     10$   上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     11$   ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     12$   変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     13$   (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     14$       権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     15$       スコード中に含まれていること.
     16$   (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     17$       用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     18$       者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     19$       の無保証規定を掲載すること.
     20$   (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     21$       用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     22$       と.
     23$     (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     24$         作権表示,この利用条件および下記の無保証規定を掲載すること.
     25$     (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     26$         報告すること.
     27$   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     28$       害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     29$       また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     30$       由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     31$       免責すること.
    3632
    37 $   –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    38 $   ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    39 $   ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    40 $   ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    41 $   ‚̐ӔC‚𕉂í‚È‚¢D
     33$   本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     34$   よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     35$   に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     36$   アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     37$   の責任を負わない.
    4238$
    4339$   @(#) $Id$
     
    4642
    4743$
    48 ƒf[ƒ^ƒZƒNƒVƒ‡ƒ“‚ÌLMA‚©‚çVMA‚ւ̃Rƒs[
     44データセクションのLMAからVMAへのコピー
    4945$
    5046$FOREACH lma LMA.ORDER_LIST$
     
    6460
    6561$
    66 ŠÖ”‚̐擪”Ô’n‚̃`ƒFƒbƒN
     62関数の先頭番地のチェック
    6763$
    6864$IF CHECK_FUNC_ALIGN || CHECK_FUNC_NONNULL$
    69 $       // ƒ^ƒXƒN‚ƃ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚̐擪”Ô’n‚̃`ƒFƒbƒN
     65$       // タスクとタスク例外処理ルーチンの先頭番地のチェック
    7066        $tinib = SYMBOL("_kernel_tinib_table")$
    7167        $FOREACH tskid TSK.ID_LIST$
     
    9086        $END$
    9187
    92 $       // ŽüŠúƒnƒ“ƒhƒ‰‚̐擪”Ô’n‚̃`ƒFƒbƒN
     88$       // 周期ハンドラの先頭番地のチェック
    9389        $cycinib = SYMBOL("_kernel_cycinib_table")$
    9490        $FOREACH cycid CYC.ID_LIST$
     
    107103        $END$
    108104
    109 $       // ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰‚̐擪”Ô’n‚̃`ƒFƒbƒN
     105$       // アラームハンドラの先頭番地のチェック
    110106        $alminib = SYMBOL("_kernel_alminib_table")$
    111107        $FOREACH almid ALM.ID_LIST$
     
    124120        $END$
    125121
    126 $       // Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“‚̐擪”Ô’n‚̃`ƒFƒbƒN
     122$       // 割込みサービスルーチンの先頭番地のチェック
    127123        $isrinib = SYMBOL("_kernel_sisrinib_table")$
    128124        $FOREACH order ISR.ORDER_LIST$
     
    143139
    144140$
    145 ƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     141スタック領域の先頭番地のチェック
    146142$
    147143$IF CHECK_STACK_ALIGN || CHECK_STACK_NONNULL$
    148 $       // ƒ^ƒXƒN‚̃Xƒ^ƒbƒN—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     144$       // タスクのスタック領域の先頭番地のチェック
    149145        $tinib = SYMBOL("_kernel_tinib_table")$
    150146        $FOREACH tskid TSK.ID_LIST$
     
    167163        $END$
    168164
    169 $       // ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     165$       // 非タスクコンテキスト用のスタック領域の先頭番地のチェック
    170166        $istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$
    171167        $IF CHECK_STACK_ALIGN && (istk & (CHECK_STACK_ALIGN - 1)) != 0$
     
    182178
    183179$
    184 ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     180固定長メモリプール領域の先頭番地のチェック
    185181$
    186182$IF CHECK_MPF_ALIGN || CHECK_MPF_NONNULL$
    187 $       // ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     183$       // 固定長メモリプール領域の先頭番地のチェック
    188184        $mpfinib = SYMBOL("_kernel_mpfinib_table")$
    189185        $FOREACH mpfid MPF.ID_LIST$
     
    204200
    205201$
    206 ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     202カーネルが割り付けるメモリ領域の先頭番地のチェック
    207203$
    208204$IF CHECK_MB_ALIGN$
    209 $       // ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚̐擪”Ô’n‚̃`ƒFƒbƒN
     205$       // カーネルが割り付けるメモリ領域の先頭番地のチェック
    210206        $kmm = PEEK(SYMBOL("_kernel_kmm"), sizeof_void_ptr)$
    211207        $IF CHECK_MB_ALIGN && (kmm & (CHECK_MB_ALIGN - 1)) != 0$
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_def.csv

    • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_impl.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              TOPPERS/ASPƒJ[ƒlƒ‹“à•”Œü‚¯•W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹
    49  *
    50  *  ‚±‚̃wƒbƒ_ƒtƒ@ƒCƒ‹‚́CƒJ[ƒlƒ‹‚ð\¬‚·‚éƒvƒƒOƒ‰ƒ€‚̃\[ƒXƒtƒ@ƒCƒ‹
    51  *  ‚Å•K‚¸ƒCƒ“ƒNƒ‹[ƒh‚·‚é‚ׂ«•W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚Å‚ ‚éD
    52  *
    53  *  ƒAƒZƒ“ƒuƒŠŒ¾Œê‚̃\[ƒXƒtƒ@ƒCƒ‹‚©‚炱‚̃tƒ@ƒCƒ‹‚ðƒCƒ“ƒNƒ‹[ƒh‚·‚鎞
    54  *  ‚́CTOPPERS_MACRO_ONLY‚ð’è‹`‚µ‚Ä‚¨‚­D‚±‚ê‚É‚æ‚èCƒ}ƒNƒ’è‹`ˆÈŠO‚ð
    55  *  œ‚­‚悤‚É‚È‚Á‚Ä‚¢‚éD
     44 *              TOPPERS/ASPカーネル内部向け標準ヘッダファイル
     45 *
     46 *  このヘッダファイルは,カーネルを構成するプログラムのソースファイル
     47 *  で必ずインクルードするべき標準ヘッダファイルである.
     48 *
     49 *  アセンブリ言語のソースファイルからこのファイルをインクルードする時
     50 *  は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を
     51 *  除くようになっている.
    5652 */
    5753
     
    6056
    6157/*
    62  *  ƒJ[ƒlƒ‹‚Ì“à•”Ž¯•Ê–¼‚̃Šƒl[ƒ€
     58 *  カーネルの内部識別名のリネーム
    6359 */
    6460#include "kernel_rename.h"
    6561
    6662/*
    67  *  ƒAƒvƒŠƒP[ƒVƒ‡ƒ“‚Æ‹¤’ʂ̃wƒbƒ_ƒtƒ@ƒCƒ‹
     63 *  アプリケーションと共通のヘッダファイル
    6864 */
    6965#include <kernel.h>
    7066
    7167/*
    72  *  ƒVƒXƒeƒ€ƒƒO‹@”\‚Ì‚½‚ß‚Ì’è‹`
     68 *  システムログ機能のための定義
    7369 */
    7470#include <t_syslog.h>
    7571
    7672/*
    77  *  Œ^ƒLƒƒƒXƒg‚ðs‚¤ƒ}ƒNƒ‚Ì’è‹`
     73 *  型キャストを行うマクロの定義
    7874 */
    7975#ifndef CAST
     
    8278
    8379/*
    84  *  ƒ^[ƒQƒbƒgˆË‘¶î•ñ‚Ì’è‹`
     80 *  ターゲット依存情報の定義
    8581 */
    8682#include "target_config.h"
    8783
    8884/*
    89  *  ‚·‚ׂĂ̊֐”‚ðƒRƒ“ƒpƒCƒ‹‚·‚邽‚ß‚Ì’è‹`
     85 *  すべての関数をコンパイルするための定義
    9086 */
    9187#ifdef ALLFUNC
     
    9490
    9591/*
    96  *  ƒrƒbƒgƒtƒB[ƒ‹ƒh‚Å‚Ì•„†–³‚µ®”Œ^
    97  *
    98  *  8ƒrƒbƒgˆÈ‰º‚Ì•‚̃rƒbƒgƒtƒB[ƒ‹ƒh‚ŁC•„†–³‚µ®”’l‚ð•ÛŽ‚µ‚½‚¢ê‡
    99  *  ‚É—p‚¢‚é‚ׂ«ƒf[ƒ^Œ^DANSI C‚ł́CƒrƒbƒgƒtƒB[ƒ‹ƒh‚̃f[ƒ^Œ^‚É‚Í
    100  *  int‚Æunsigned int‚µ‚©‹–‚³‚ê‚È‚¢‚½‚߁CƒfƒtƒHƒ‹ƒg‚Ì’è‹`‚Íunsigned
    101  *  int‚Æ‚µ‚Ä‚¢‚邪Cƒ^[ƒQƒbƒg‚¨‚æ‚уc[ƒ‹ˆË‘¶‚ŁCunsigned char‚Ü‚½‚Í
    102  *  unsigned short‚É’è‹`‚µ‚½•û‚ªŒø—¦‚ª—Ç‚¢ê‡‚ª‚ ‚éD
     92 *  ビットフィールドでの符号無し整数型
     93 *
     94 *  8ビット以下の幅のビットフィールドで,符号無し整数値を保持したい場合
     95 *  に用いるべきデータ型.ANSI Cでは,ビットフィールドのデータ型には
     96 *  intとunsigned intしか許されないため,デフォルトの定義はunsigned
     97 *  intとしているが,ターゲットおよびツール依存で,unsigned charまたは
     98 *  unsigned shortに定義した方が効率が良い場合がある.
    10399 */
    104100#ifndef BIT_FIELD_UINT
     
    107103
    108104/*
    109  *  ƒrƒbƒgƒtƒB[ƒ‹ƒh‚ł̃u[ƒ‹Œ^
    110  *
    111  *  1ƒrƒbƒg•‚̃rƒbƒgƒtƒB[ƒ‹ƒh‚ŁCƒu[ƒ‹’l‚ð•ÛŽ‚µ‚½‚¢ê‡‚É—p‚¢‚é‚ׂ«
    112  *  ƒf[ƒ^Œ^DƒfƒtƒHƒ‹ƒg‚Å‚ÍBIT_FIELD_UINT‚Æ“¯ˆê‚É’è‹`‚µ‚Ä‚¢‚邪Cƒu[
    113  *  ƒ‹’l‚ð•ÛŽ‚·‚邱‚Ƃ𖾎¦‚·‚邽‚ß‚É•Ê‚Ì–¼Ì‚Æ‚µ‚Ä‚¢‚éD
     105 *  ビットフィールドでのブール型
     106 *
     107 *  1ビット幅のビットフィールドで,ブール値を保持したい場合に用いるべき
     108 *  データ型.デフォルトではBIT_FIELD_UINTと同一に定義しているが,ブー
     109 *  ル値を保持することを明示するために別の名称としている.
    114110 */
    115111#ifndef BIT_FIELD_BOOL
     
    118114
    119115/*
    120  *  ƒIƒuƒWƒFƒNƒgID‚̍ŏ¬’l‚Ì’è‹`
    121  */
    122 #define TMIN_TSKID              1               /* ƒ^ƒXƒNID‚̍ŏ¬’l */
    123 #define TMIN_SEMID              1               /* ƒZƒ}ƒtƒHID‚̍ŏ¬’l */
    124 #define TMIN_FLGID              1               /* ƒtƒ‰ƒOID‚̍ŏ¬’l */
    125 #define TMIN_DTQID              1               /* ƒf[ƒ^ƒLƒ
    126 [ID‚̍ŏ¬’l */
    127 #define TMIN_PDQID              1               /* —Dæ“xƒf[ƒ^ƒLƒ
    128 [ID‚̍ŏ¬’l */
    129 #define TMIN_MBXID              1               /* ƒ[ƒ‹ƒ{ƒbƒNƒXID‚̍ŏ¬’l */
    130 #define TMIN_MPFID              1               /* ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID‚̍ŏ¬’l */
    131 #define TMIN_CYCID              1               /* ŽüŠúƒnƒ“ƒhƒ‰ID‚̍ŏ¬’l */
    132 #define TMIN_ALMID              1               /* ƒAƒ‰[ƒ€ƒnƒ“ƒhƒ‰ID‚̍ŏ¬’l */
    133 #define TMIN_ISRID              1               /* Š„ž‚݃T[ƒrƒXƒ‹[ƒ`ƒ“ID‚̍ŏ¬’l */
    134 
    135 /*
    136  *  —Dæ“x‚Ì’iŠK”‚Ì’è‹`
     116 *  オブジェクトIDの最小値の定義
     117 */
     118#define TMIN_TSKID              1               /* タスクIDの最小値 */
     119#define TMIN_SEMID              1               /* セマフォIDの最小値 */
     120#define TMIN_FLGID              1               /* フラグIDの最小値 */
     121#define TMIN_DTQID              1               /* データキューIDの最小値 */
     122#define TMIN_PDQID              1               /* 優先度データキューIDの最小値 */
     123#define TMIN_MBXID              1               /* メールボックスIDの最小値 */
     124#define TMIN_MPFID              1               /* 固定長メモリプールIDの最小値 */
     125#define TMIN_CYCID              1               /* 周期ハンドラIDの最小値 */
     126#define TMIN_ALMID              1               /* アラームハンドラIDの最小値 */
     127#define TMIN_ISRID              1               /* 割込みサービスルーチンIDの最小値 */
     128
     129/*
     130 *  優先度の段階数の定義
    137131 */
    138132#define TNUM_TPRI               (TMAX_TPRI - TMIN_TPRI + 1)
     
    141135
    142136/*
    143  *  ƒJ[ƒlƒ‹“à•”‚ÅŽg—p‚·‚é‘®«‚Ì’è‹`
    144  */
    145 #define TA_NOEXS                ((ATR)(-1))                     /* –¢“o˜^ó‘Ô */
     137 *  カーネル内部で使用する属性の定義
     138 */
     139#define TA_NOEXS                ((ATR)(-1))                     /* 未登録状態 */
    146140
    147141#ifndef TA_MEMALLOC
    148 #define TA_MEMALLOC             UINT_C(0x8000)          /* ƒƒ‚ƒŠ—̈æ‚ðƒJ[ƒlƒ‹‚ÅŠm•Û */
     142#define TA_MEMALLOC             UINT_C(0x8000)          /* メモリ領域をカーネルで確保 */
    149143#endif /* TA_MEMALLOC */
    150144#ifndef TA_MBALLOC
    151 #define TA_MBALLOC              UINT_C(0x4000)          /* ŠÇ——̈æ‚ðƒJ[ƒlƒ‹‚ÅŠm•Û */
     145#define TA_MBALLOC              UINT_C(0x4000)          /* 管理領域をカーネルで確保 */
    152146#endif /* TA_MBALLOC */
    153147
    154148/*
    155  *  ƒ^[ƒQƒbƒg’è‹`‚̃Gƒ‰[ƒ`ƒFƒbƒNƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’l‚Ì’è‹`
     149 *  ターゲット定義のエラーチェックマクロのデフォルト値の定義
    156150 */
    157151#ifndef TARGET_TSKATR
    158 #define TARGET_TSKATR           0U              /* ƒ^[ƒQƒbƒg’è‹`‚̃^ƒXƒN‘®« */
     152#define TARGET_TSKATR           0U              /* ターゲット定義のタスク属性 */
    159153#endif /* TARGET_TSKATR */
    160154
    161155#ifndef TARGET_ISRATR
    162 #define TARGET_ISRATR           0U              /* ƒ^[ƒQƒbƒg’è‹`‚ÌISR‘®« */
     156#define TARGET_ISRATR           0U              /* ターゲット定義のISR属性 */
    163157#endif /* TARGET_ISRATR */
    164158
    165159/*
    166  *  ƒwƒbƒ_ƒtƒ@ƒCƒ‹‚ðŽ‚½‚È‚¢ƒ‚ƒWƒ
    167 [ƒ‹‚̊֐”E•Ï”‚̐錾
     160 *  ヘッダファイルを持たないモジュールの関数・変数の宣言
    168161 */
    169162#ifndef TOPPERS_MACRO_ONLY
    170163
    171164/*
    172  *  Šeƒ‚ƒWƒ
    173 [ƒ‹‚̏‰Šú‰»ikernel_cfg.cj
     165 *  各モジュールの初期化(kernel_cfg.c)
    174166 */
    175167extern void     initialize_object(void);
    176168
    177169/*
    178  *  ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀsikernel_cfg.cj
     170 *  初期化ルーチンの実行(kernel_cfg.c)
    179171 */
    180172extern void     call_inirtn(void);
    181173
    182174/*
    183  *  I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀsikernel_cfg.cj
     175 *  終了処理ルーチンの実行(kernel_cfg.c)
    184176 */
    185177extern void     call_terrtn(void);
    186178
    187179/*
    188  *  ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—p‚̃Xƒ^ƒbƒN—̈æikernel_cfg.cj
    189  */
    190 extern const SIZE       istksz;         /* ƒXƒ^ƒbƒN—̈æ‚̃TƒCƒYiŠÛ‚ß‚½’lj */
    191 extern STK_T *const     istk;           /* ƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’n */
     180 *  非タスクコンテキスト用のスタック領域(kernel_cfg.c)
     181 */
     182extern const SIZE       istksz;         /* スタック領域のサイズ(丸めた値) */
     183extern STK_T *const     istk;           /* スタック領域の先頭番地 */
    192184#ifdef TOPPERS_ISTKPT
    193 extern STK_T *const     istkpt;         /* ƒXƒ^ƒbƒNƒ|ƒCƒ“ƒ^‚̏‰Šú’l */
     185extern STK_T *const     istkpt;         /* スタックポインタの初期値 */
    194186#endif /* TOPPERS_ISTKPT */
    195187
    196188/*
    197  *  ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æikernel_cfg.cj
    198  */
    199 extern const SIZE       kmmsz;          /* ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚̃TƒCƒY */
    200 extern MB_T *const      kmm;            /* ƒJ[ƒlƒ‹‚ªŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚̐擪”Ô’n */
    201 
    202 /*
    203  *  ƒJ[ƒlƒ‹“®ìó‘Ôƒtƒ‰ƒOistartup.cj
     189 *  カーネルが割り付けるメモリ領域(kernel_cfg.c)
     190 */
     191extern const SIZE       kmmsz;          /* カーネルが割り付けるメモリ領域のサイズ */
     192extern MB_T *const      kmm;            /* カーネルが割り付けるメモリ領域の先頭番地 */
     193
     194/*
     195 *  カーネル動作状態フラグ(startup.c)
    204196 */
    205197extern bool_t   kerflg;
    206198
    207199/*
    208  *  ƒJ[ƒlƒ‹‚Ì‹N“®istartup.cj
     200 *  カーネルの起動(startup.c)
    209201 */
    210202extern void     sta_ker(void);
    211203
    212204/*
    213  *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—istartup.cj
     205 *  カーネルの終了処理(startup.c)
    214206 */
    215207extern void     exit_kernel(void);
    216208
    217209/*
    218  *  ƒJ[ƒlƒ‹‚ÌŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚ÌŠÇ—istartup.cj
     210 *  カーネルの割り付けるメモリ領域の管理(startup.c)
    219211 */
    220212extern void initialize_kmm(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_int.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              kernel_cfg.ci‚¨‚æ‚Ñcfg1_out.cj—pƒwƒbƒ_ƒtƒ@ƒCƒ‹
     44 *              kernel_cfg.c(およびcfg1_out.c)用ヘッダファイル
    4945 */
    5046
     
    5349
    5450/*
    55  *  ƒJ[ƒlƒ‹•W€ƒwƒbƒ_ƒtƒ@ƒCƒ‹
     51 *  カーネル標準ヘッダファイル
    5652 */
    5753#include "kernel_impl.h"
    5854
    5955/*
    60  *  ƒJ[ƒlƒ‹‚ÌŠeƒwƒbƒ_ƒtƒ@ƒCƒ‹
     56 *  カーネルの各ヘッダファイル
    6157 */
    6258#include "task.h"
     
    7470
    7571/*
    76  *  ƒŠƒl[ƒ€‚µ‚½ƒVƒ“ƒ{ƒ‹‚ðŒ³‚É–ß‚·‚½‚߂̃wƒbƒ_ƒtƒ@ƒCƒ‹
     72 *  リネームしたシンボルを元に戻すためのヘッダファイル
    7773 */
    7874#include "kernel_unrename.h"
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_rename.def

    • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_rename.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
  • UsbWattMeter/trunk/asp_dcre/kernel/kernel_unrename.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
  • UsbWattMeter/trunk/asp_dcre/kernel/mailbox.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒ[ƒ‹ƒ{ƒbƒNƒX‹@”\
     44 *              メールボックス機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    5955 */
    6056#ifndef LOG_ACRE_MBX_ENTER
     
    123119
    124120/*
    125  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚̐”
     121 *  メールボックスの数
    126122 */
    127123#define tnum_mbx        ((uint_t)(tmax_mbxid - TMIN_MBXID + 1))
     
    129125
    130126/*
    131  *  ƒ[ƒ‹ƒ{ƒbƒNƒXID‚©‚烁[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     127 *  メールボックスIDからメールボックス管理ブロックを取り出すためのマクロ
    132128 */
    133129#define INDEX_MBX(mbxid)        ((uint_t)((mbxid) - TMIN_MBXID))
     
    137133
    138134/*
    139  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     135 *  使用していないメールボックス管理ブロックのリスト
    140136 */
    141137QUEUE   free_mbxcb;
    142138
    143139/*
    144  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‹@”\‚̏‰Šú‰»
     140 *  メールボックス機能の初期化
    145141 */
    146142void
     
    170166
    171167/*
    172  *  ƒƒbƒZ[ƒW—Dæ“x‚ÌŽæo‚µ
     168 *  メッセージ優先度の取出し
    173169 */
    174170#define MSGPRI(pk_msg)  (((T_MSG_PRI *)(pk_msg))->msgpri)
    175171
    176172/*
    177  *  —Dæ“x‡ƒƒbƒZ[ƒWƒLƒ
    178 [‚Ö‚Ì‘}“ü
     173 *  優先度順メッセージキューへの挿入
    179174 */
    180175Inline void
     
    194189
    195190/*
    196  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚̐¶¬
     191 *  メールボックスの生成
    197192 */
    198193#ifdef TOPPERS_acre_mbx
     
    235230
    236231/*
    237  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚̍폜
     232 *  メールボックスの削除
    238233 */
    239234#ifdef TOPPERS_del_mbx
     
    279274
    280275/*
    281  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚Ö‚Ì‘—M
     276 *  メールボックスへの送信
    282277 */
    283278#ifdef TOPPERS_snd_mbx
     
    337332
    338333/*
    339  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚©‚ç‚ÌŽóM
     334 *  メールボックスからの受信
    340335 */
    341336#ifdef TOPPERS_rcv_mbx
     
    381376
    382377/*
    383  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚©‚ç‚ÌŽóMiƒ|[ƒŠƒ“ƒOj
     378 *  メールボックスからの受信(ポーリング)
    384379 */
    385380#ifdef TOPPERS_prcv_mbx
     
    418413
    419414/*
    420  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚©‚ç‚ÌŽóMiƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     415 *  メールボックスからの受信(タイムアウトあり)
    421416 */
    422417#ifdef TOPPERS_trcv_mbx
     
    468463
    469464/*
    470  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚̍ú‰»
     465 *  メールボックスの再初期化
    471466 */
    472467#ifdef TOPPERS_ini_mbx
     
    506501
    507502/*
    508  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‚̏ó‘ÔŽQÆ
     503 *  メールボックスの状態参照
    509504 */
    510505#ifdef TOPPERS_ref_mbx
  • UsbWattMeter/trunk/asp_dcre/kernel/mailbox.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒ[ƒ‹ƒ{ƒbƒNƒX‹@”\
     44 *              メールボックス機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN
     53 *  メールボックス初期化ブロック
    5854 *
    59  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    60  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    61  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     55 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     56 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     57 *  最初のフィールドが共通になっている.
    6258 */
    6359typedef struct mailbox_initialization_block {
    64         ATR                     mbxatr;                 /* ƒ[ƒ‹ƒ{ƒbƒNƒX‘®« */
    65         PRI                     maxmpri;                /* ƒƒbƒZ[ƒW—Dæ“x‚̍őå’l */
     60        ATR                     mbxatr;                 /* メールボックス属性 */
     61        PRI                     maxmpri;                /* メッセージ優先度の最大値 */
    6662} MBXINIB;
    6763
    6864/*
    69  *  ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN
     65 *  メールボックス管理ブロック
    7066 *
    71  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    72  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    73  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     67 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     68 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     69 *  フィールドが共通になっている.
    7470 *
    75  *  ƒƒbƒZ[ƒWƒLƒ
    76 [‚ªƒƒbƒZ[ƒW‚Ì—Dæ“x‡‚̏ꍇ‚ɂ́Cpk_last‚ÍŽg‚í‚È
    77  *  ‚¢D‚Ü‚½CƒƒbƒZ[ƒWƒLƒ
    78 [‚ª‹ó‚̏ꍇipk_head‚ªNULL‚̏ꍇj‚É‚àC
    79  *  pk_last‚Í–³Œø‚Å‚ ‚éD
     71 *  メッセージキューがメッセージの優先度順の場合には,pk_lastは使わな
     72 *  い.また,メッセージキューが空の場合(pk_headがNULLの場合)にも,
     73 *  pk_lastは無効である.
    8074 */
    8175typedef struct mailbox_control_block {
    82         QUEUE           wait_queue;             /* ƒ[ƒ‹ƒ{ƒbƒNƒX‘Ò‚¿ƒLƒ
    83 [ */
    84         const MBXINIB *p_mbxinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    85         T_MSG           *pk_head;               /* æ“ª‚̃ƒbƒZ[ƒW */
    86         T_MSG           *pk_last;               /* ––”ö‚̃ƒbƒZ[ƒW */
     76        QUEUE           wait_queue;             /* メールボックス待ちキュー */
     77        const MBXINIB *p_mbxinib;       /* 初期化ブロックへのポインタ */
     78        T_MSG           *pk_head;               /* 先頭のメッセージ */
     79        T_MSG           *pk_last;               /* 末尾のメッセージ */
    8780} MBXCB;
    8881
    8982/*
    90  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     83 *  メールボックス待ち情報ブロックの定義
    9184 *
    92  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    93  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    94  *  Å‰‚Ì2‚‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     85 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     86 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     87 *  最初の2つのフィールドが共通になっている.
    9588 */
    9689typedef struct mailbox_waiting_information {
    97         WINFO           winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    98         MBXCB           *p_mbxcb;               /* ‘Ò‚Á‚Ä‚¢‚郁[ƒ‹ƒ{ƒbƒNƒX‚ÌŠÇ—ƒuƒƒbƒN */
    99         T_MSG           *pk_msg;                /* ŽóM‚µ‚½ƒƒbƒZ[ƒW */
     90        WINFO           winfo;                  /* 標準の待ち情報ブロック */
     91        MBXCB           *p_mbxcb;               /* 待っているメールボックスの管理ブロック */
     92        T_MSG           *pk_msg;                /* 受信したメッセージ */
    10093} WINFO_MBX;
    10194
    10295/*
    103  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     96 *  使用していないメールボックス管理ブロックのリスト
    10497 */
    10598extern QUEUE    free_mbxcb;
    10699
    107100/*
    108  *  ƒ[ƒ‹ƒ{ƒbƒNƒXID‚̍őå’likernel_cfg.cj
     101 *  メールボックスIDの最大値(kernel_cfg.c)
    109102 */
    110103extern const ID tmax_mbxid;
     
    112105
    113106/*
    114  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     107 *  メールボックス初期化ブロックのエリア(kernel_cfg.c)
    115108 */
    116109extern const MBXINIB    mbxinib_table[];
     
    118111
    119112/*
    120  *  ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     113 *  メールボックス管理ブロックのエリア(kernel_cfg.c)
    121114 */
    122115extern MBXCB    mbxcb_table[];
    123116
    124117/*
    125  *  ƒ[ƒ‹ƒ{ƒbƒNƒXŠÇ—ƒuƒƒbƒN‚©‚烁[ƒ‹ƒ{ƒbƒNƒXID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     118 *  メールボックス管理ブロックからメールボックスIDを取り出すためのマクロ
    126119 */
    127120#define MBXID(p_mbxcb)  ((ID)(((p_mbxcb) - mbxcb_table) + TMIN_MBXID))
    128121
    129122/*
    130  *  ƒ[ƒ‹ƒ{ƒbƒNƒX‹@”\‚̏‰Šú‰»
     123 *  メールボックス機能の初期化
    131124 */
    132125extern void     initialize_mailbox(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/mempfix.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‹@”\
     44 *              固定長メモリプール機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    5955 */
    6056#ifndef LOG_ACRE_MPF_ENTER
     
    123119
    124120/*
    125  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̐”
     121 *  固定長メモリプールの数
    126122 */
    127123#define tnum_mpf        ((uint_t)(tmax_mpfid - TMIN_MPFID + 1))
     
    129125
    130126/*
    131  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID‚©‚çŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½
    132  *  ‚߂̃}ƒNƒ
     127 *  固定長メモリプールIDから固定長メモリプール管理ブロックを取り出すた
     128 *  めのマクロ
    133129 */
    134130#define INDEX_MPF(mpfid)        ((uint_t)((mpfid) - TMIN_MPFID))
     
    136132
    137133/*
    138  *  “ÁŽê‚ȃCƒ“ƒfƒbƒNƒX’l‚Ì’è‹`
    139  */
    140 #define INDEX_NULL              (~0U)           /* ‹ó‚«ƒuƒƒbƒNƒŠƒXƒg‚̍Ōã */
    141 #define INDEX_ALLOC             (~1U)           /* Š„“–‚čς݂̃uƒƒbƒN */
     134 *  特殊なインデックス値の定義
     135 */
     136#define INDEX_NULL              (~0U)           /* 空きブロックリストの最後 */
     137#define INDEX_ALLOC             (~1U)           /* 割当て済みのブロック */
    142138
    143139#ifdef TOPPERS_mpfini
    144140
    145141/*
    146  *  Žg—p‚µ‚Ä‚¢‚È‚¢ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     142 *  使用していない固定長メモリプール管理ブロックのリスト
    147143 */
    148144QUEUE   free_mpfcb;
    149145
    150146/*
    151  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‹@”\‚̏‰Šú‰»
     147 *  固定長メモリプール機能の初期化
    152148 */
    153149void
     
    179175
    180176/*
    181  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚©‚çƒuƒƒbƒN‚ðŠl“¾
     177 *  固定長メモリプールからブロックを獲得
    182178 */
    183179#ifdef TOPPERS_mpfget
     
    205201
    206202/*
    207  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̐¶¬
     203 *  固定長メモリプールの生成
    208204 */
    209205#ifdef TOPPERS_acre_mpf
     
    284280
    285281/*
    286  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̍폜
     282 *  固定長メモリプールの削除
    287283 */
    288284#ifdef TOPPERS_del_mpf
     
    334330
    335331/*
    336  *  ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒN‚ÌŠl“¾
     332 *  固定長メモリブロックの獲得
    337333 */
    338334#ifdef TOPPERS_get_mpf
     
    377373
    378374/*
    379  *  ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒN‚ÌŠl“¾iƒ|[ƒŠƒ“ƒOj
     375 *  固定長メモリブロックの獲得(ポーリング)
    380376 */
    381377#ifdef TOPPERS_pget_mpf
     
    413409
    414410/*
    415  *  ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒN‚ÌŠl“¾iƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     411 *  固定長メモリブロックの獲得(タイムアウトあり)
    416412 */
    417413#ifdef TOPPERS_tget_mpf
     
    462458
    463459/*
    464  *  ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒN‚Ì•Ô‹p
     460 *  固定長メモリブロックの返却
    465461 */
    466462#ifdef TOPPERS_rel_mpf
     
    519515
    520516/*
    521  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̍ú‰»
     517 *  固定長メモリプールの再初期化
    522518 */
    523519#ifdef TOPPERS_ini_mpf
     
    559555
    560556/*
    561  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚̏ó‘ÔŽQÆ
     557 *  固定長メモリプールの状態参照
    562558 */
    563559#ifdef TOPPERS_ref_mpf
  • UsbWattMeter/trunk/asp_dcre/kernel/mempfix.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‹@”\
     44 *              固定長メモリプール機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒNŠÇ—ƒuƒƒbƒN
     53 *  固定長メモリブロック管理ブロック
    5854 *
    59  *  nextƒtƒB[ƒ‹ƒh‚ɂ́Cƒƒ‚ƒŠƒuƒƒbƒN‚ªŠ„“–‚čς݂̏ꍇ‚ÍINDEX_ALLOC‚ðC
    60  *  –¢Š„“–‚Ă̏ꍇ‚ÍŽŸ‚Ì–¢Š„“–‚ăuƒƒbƒN‚̃Cƒ“ƒfƒbƒNƒX”ԍ†‚ðŠi”[‚·‚éD
    61  *  ÅŒã‚Ì–¢Š„“–‚ăuƒƒbƒN‚̏ꍇ‚ɂ́CINDEX_NULL‚ðŠi”[‚·‚éD
     55 *  nextフィールドには,メモリブロックが割当て済みの場合はINDEX_ALLOCを,
     56 *  未割当ての場合は次の未割当てブロックのインデックス番号を格納する.
     57 *  最後の未割当てブロックの場合には,INDEX_NULLを格納する.
    6258 */
    6359typedef struct fixed_memoryblock_management_block {
    64         uint_t          next;                   /* ŽŸ‚Ì–¢Š„“–‚ăuƒƒbƒN */
     60        uint_t          next;                   /* 次の未割当てブロック */
    6561} MPFMB;
    6662
    6763/*
    68  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‰Šú‰»ƒuƒƒbƒN
     64 *  固定長メモリプール初期化ブロック
    6965 *
    70  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    71  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    72  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     66 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     67 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     68 *  最初のフィールドが共通になっている.
    7369 */
    7470typedef struct fixed_memorypool_initialization_block {
    75         ATR                     mpfatr;                 /* ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‘®« */
    76         uint_t          blkcnt;                 /* ƒƒ‚ƒŠƒuƒƒbƒN” */
    77         uint_t          blksz;                  /* ƒƒ‚ƒŠƒuƒƒbƒN‚̃TƒCƒYiŠÛ‚ß‚½’lj */
    78         void            *mpf;                   /* ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹—̈æ‚̐擪”Ô’n */
    79         MPFMB           *p_mpfmb;               /* ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ——̈æ‚̐擪”Ô’n */
     71        ATR                     mpfatr;                 /* 固定長メモリプール属性 */
     72        uint_t          blkcnt;                 /* メモリブロック数 */
     73        uint_t          blksz;                  /* メモリブロックのサイズ(丸めた値) */
     74        void            *mpf;                   /* 固定長メモリプール領域の先頭番地 */
     75        MPFMB           *p_mpfmb;               /* 固定長メモリプール管理領域の先頭番地 */
    8076} MPFINIB;
    8177
    8278/*
    83  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN
     79 *  固定長メモリプール管理ブロック
    8480 *
    85  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    86  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    87  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     81 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     82 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     83 *  フィールドが共通になっている.
    8884 */
    8985typedef struct fixed_memorypool_control_block {
    90         QUEUE           wait_queue;             /* ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‘Ò‚¿ƒLƒ
    91 [ */
    92         const MPFINIB *p_mpfinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    93         uint_t          fblkcnt;                /* –¢Š„“–‚ăuƒƒbƒN” */
    94         uint_t          unused;                 /* –¢Žg—pƒuƒƒbƒN‚̐擪 */
    95         uint_t          freelist;               /* –¢Š„“–‚ăuƒƒbƒN‚̃ŠƒXƒg */
     86        QUEUE           wait_queue;             /* 固定長メモリプール待ちキュー */
     87        const MPFINIB *p_mpfinib;       /* 初期化ブロックへのポインタ */
     88        uint_t          fblkcnt;                /* 未割当てブロック数 */
     89        uint_t          unused;                 /* 未使用ブロックの先頭 */
     90        uint_t          freelist;               /* 未割当てブロックのリスト */
    9691} MPFCB;
    9792
    9893/*
    99  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     94 *  固定長メモリプール待ち情報ブロックの定義
    10095 *
    101  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    102  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    103  *  Å‰‚Ì2‚‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     96 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     97 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     98 *  最初の2つのフィールドが共通になっている.
    10499 */
    105100typedef struct fixed_memorypool_waiting_information {
    106         WINFO           winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    107         MPFCB           *p_mpfcb;               /* ‘Ò‚Á‚Ä‚¢‚éŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚ÌŠÇ—ƒuƒƒbƒN*/
    108         void            *blk;                   /* Šl“¾‚µ‚½ƒƒ‚ƒŠƒuƒƒbƒN */
     101        WINFO           winfo;                  /* 標準の待ち情報ブロック */
     102        MPFCB           *p_mpfcb;               /* 待っている固定長メモリプールの管理ブロック*/
     103        void            *blk;                   /* 獲得したメモリブロック */
    109104} WINFO_MPF;
    110105
    111106/*
    112  *  Žg—p‚µ‚Ä‚¢‚È‚¢ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     107 *  使用していない固定長メモリプール管理ブロックのリスト
    113108 */
    114109extern QUEUE    free_mpfcb;
    115110
    116111/*
    117  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID‚̍őå’likernel_cfg.cj
     112 *  固定長メモリプールIDの最大値(kernel_cfg.c)
    118113 */
    119114extern const ID tmax_mpfid;
     
    121116
    122117/*
    123  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     118 *  固定長メモリプール初期化ブロックのエリア(kernel_cfg.c)
    124119 */
    125120extern const MPFINIB    mpfinib_table[];
     
    127122
    128123/*
    129  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     124 *  固定長メモリプール管理ブロックのエリア(kernel_cfg.c)
    130125 */
    131126extern MPFCB    mpfcb_table[];
    132127
    133128/*
    134  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ŠÇ—ƒuƒƒbƒN‚©‚çŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹ID‚ðŽæ‚èo‚·‚½
    135  *  ‚߂̃}ƒNƒ
     129 *  固定長メモリプール管理ブロックから固定長メモリプールIDを取り出すた
     130 *  めのマクロ
    136131 */
    137132#define MPFID(p_mpfcb)  ((ID)(((p_mpfcb) - mpfcb_table) + TMIN_MPFID))
    138133
    139134/*
    140  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‹@”\‚̏‰Šú‰»
     135 *  固定長メモリプール機能の初期化
    141136 */
    142137extern void     initialize_mempfix(void);
    143138
    144139/*
    145  *  ŒÅ’è’·ƒƒ‚ƒŠƒv[ƒ‹‚©‚çƒuƒƒbƒN‚ðŠl“¾
     140 *  固定長メモリプールからブロックを獲得
    146141 */
    147142extern void     get_mpf_block(MPFCB *p_mpfcb, void **p_blk);
  • UsbWattMeter/trunk/asp_dcre/kernel/pridataq.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              —Dæ“xƒf[ƒ^ƒLƒ
    49 [‹@”\
     44 *              優先度データキュー機能
    5045 */
    5146
     
    5752
    5853/*
    59  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    6055 */
    6156#ifndef LOG_ACRE_PDQ_ENTER
     
    148143
    149144/*
    150  *  —Dæ“xƒf[ƒ^ƒLƒ
    151 [‚̐”
     145 *  優先度データキューの数
    152146 */
    153147#define tnum_pdq        ((uint_t)(tmax_pdqid - TMIN_PDQID + 1))
     
    155149
    156150/*
    157  *  —Dæ“xƒf[ƒ^ƒLƒ
    158 [ID‚©‚ç—Dæ“xƒf[ƒ^ƒLƒ
    159 [ŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½
    160  *  ‚߂̃}ƒNƒ
     151 *  優先度データキューIDから優先度データキュー管理ブロックを取り出すた
     152 *  めのマクロ
    161153 */
    162154#define INDEX_PDQ(pdqid)        ((uint_t)((pdqid) - TMIN_PDQID))
     
    166158
    167159/*
    168  *  Žg—p‚µ‚Ä‚¢‚È‚¢—Dæ“xƒf[ƒ^ƒLƒ
    169 [ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     160 *  使用していない優先度データキュー管理ブロックのリスト
    170161 */
    171162QUEUE   free_pdqcb;
    172163
    173164/*
    174  *  —Dæ“xƒf[ƒ^ƒLƒ
    175 [‹@”\‚̏‰Šú‰»
     165 *  優先度データキュー機能の初期化
    176166 */
    177167void
     
    205195
    206196/*
    207  *  —Dæ“xƒf[ƒ^ƒLƒ
    208 [ŠÇ——̈æ‚ւ̃f[ƒ^‚ÌŠi”[
     197 *  優先度データキュー管理領域へのデータの格納
    209198 */
    210199#ifdef TOPPERS_pdqenq
     
    243232
    244233/*
    245  *  —Dæ“xƒf[ƒ^ƒLƒ
    246 [ŠÇ——̈悩‚ç‚̃f[ƒ^‚ÌŽæo‚µ
     234 *  優先度データキュー管理領域からのデータの取出し
    247235 */
    248236#ifdef TOPPERS_pdqdeq
     
    267255
    268256/*
    269  *  —Dæ“xƒf[ƒ^ƒLƒ
    270 [‚ւ̃f[ƒ^‘—M
     257 *  優先度データキューへのデータ送信
    271258 */
    272259#ifdef TOPPERS_pdqsnd
     
    297284
    298285/*
    299  *  —Dæ“xƒf[ƒ^ƒLƒ
    300 [‚©‚ç‚̃f[ƒ^ŽóM
     286 *  優先度データキューからのデータ受信
    301287 */
    302288#ifdef TOPPERS_pdqrcv
     
    339325
    340326/*
    341  *  —Dæ“xƒf[ƒ^ƒLƒ
    342 [‚̐¶¬
     327 *  優先度データキューの生成
    343328 */
    344329#ifdef TOPPERS_acre_pdq
     
    402387
    403388/*
    404  *  —Dæ“xƒf[ƒ^ƒLƒ
    405 [‚̍폜
     389 *  優先度データキューの削除
    406390 */
    407391#ifdef TOPPERS_del_pdq
     
    453437
    454438/*
    455  *  —Dæ“xƒf[ƒ^ƒLƒ
    456 [‚Ö‚Ì‘—M
     439 *  優先度データキューへの送信
    457440 */
    458441#ifdef TOPPERS_snd_pdq
     
    503486
    504487/*
    505  *  —Dæ“xƒf[ƒ^ƒLƒ
    506 [‚Ö‚Ì‘—Miƒ|[ƒŠƒ“ƒOj
     488 *  優先度データキューへの送信(ポーリング)
    507489 */
    508490#ifdef TOPPERS_psnd_pdq
     
    547529
    548530/*
    549  *  —Dæ“xƒf[ƒ^ƒLƒ
    550 [‚Ö‚Ì‘—Miƒ|[ƒŠƒ“ƒOC”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     531 *  優先度データキューへの送信(ポーリング,非タスクコンテキスト用)
    551532 */
    552533#ifdef TOPPERS_ipsnd_pdq
     
    591572
    592573/*
    593  *  —Dæ“xƒf[ƒ^ƒLƒ
    594 [‚Ö‚Ì‘—Miƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     574 *  優先度データキューへの送信(タイムアウトあり)
    595575 */
    596576#ifdef TOPPERS_tsnd_pdq
     
    647627
    648628/*
    649  *  —Dæ“xƒf[ƒ^ƒLƒ
    650 [‚©‚ç‚ÌŽóM
     629 *  優先度データキューからの受信
    651630 */
    652631#ifdef TOPPERS_rcv_pdq
     
    698677
    699678/*
    700  *  —Dæ“xƒf[ƒ^ƒLƒ
    701 [‚©‚ç‚ÌŽóMiƒ|[ƒŠƒ“ƒOj
     679 *  優先度データキューからの受信(ポーリング)
    702680 */
    703681#ifdef TOPPERS_prcv_pdq
     
    738716
    739717/*
    740  *  —Dæ“xƒf[ƒ^ƒLƒ
    741 [‚©‚ç‚ÌŽóMiƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     718 *  優先度データキューからの受信(タイムアウトあり)
    742719 */
    743720#ifdef TOPPERS_trcv_pdq
     
    794771
    795772/*
    796  *  —Dæ“xƒf[ƒ^ƒLƒ
    797 [‚̍ú‰»
     773 *  優先度データキューの再初期化
    798774 */
    799775#ifdef TOPPERS_ini_pdq
     
    839815
    840816/*
    841  *  —Dæ“xƒf[ƒ^ƒLƒ
    842 [‚̏ó‘ÔŽQÆ
     817 *  優先度データキューの状態参照
    843818 */
    844819#ifdef TOPPERS_ref_pdq
  • UsbWattMeter/trunk/asp_dcre/kernel/pridataq.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              —Dæ“xƒf[ƒ^ƒLƒ
    49 [‹@”\
     44 *              優先度データキュー機能
    5045 */
    5146
     
    5651
    5752/*
    58  *  —Dæ“xƒf[ƒ^ŠÇ—ƒuƒƒbƒN
     53 *  優先度データ管理ブロック
    5954 */
    6055typedef struct pridata_management_block PDQMB;
    6156
    6257struct pridata_management_block {
    63         PDQMB           *p_next;                /* ŽŸ‚̃f[ƒ^ */
    64         intptr_t        data;                   /* ƒf[ƒ^–{‘Ì */
    65         PRI                     datapri;                /* ƒf[ƒ^—Dæ“x */
     58        PDQMB           *p_next;                /* 次のデータ */
     59        intptr_t        data;                   /* データ本体 */
     60        PRI                     datapri;                /* データ優先度 */
    6661};
    6762
    6863/*
    69  *  —Dæ“xƒf[ƒ^ƒLƒ
    70 [‰Šú‰»ƒuƒƒbƒN
     64 *  優先度データキュー初期化ブロック
    7165 *
    72  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    73  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    74  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     66 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     67 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     68 *  最初のフィールドが共通になっている.
    7569 */
    7670typedef struct pridataq_initialization_block {
    77         ATR                     pdqatr;                 /* —Dæ“xƒf[ƒ^ƒLƒ
    78 [‘®« */
    79         uint_t          pdqcnt;                 /* —Dæ“xƒf[ƒ^ƒLƒ
    80 [‚Ì—e—Ê */
    81         PRI                     maxdpri;                /* ƒf[ƒ^—Dæ“x‚̍őå’l */
    82         PDQMB           *p_pdqmb;               /* —Dæ“xƒf[ƒ^ƒLƒ
    83 [ŠÇ——̈æ‚̐擪”Ô’n */
     71        ATR                     pdqatr;                 /* 優先度データキュー属性 */
     72        uint_t          pdqcnt;                 /* 優先度データキューの容量 */
     73        PRI                     maxdpri;                /* データ優先度の最大値 */
     74        PDQMB           *p_pdqmb;               /* 優先度データキュー管理領域の先頭番地 */
    8475} PDQINIB;
    8576
    8677/*
    87  *  —Dæ“xƒf[ƒ^ƒLƒ
    88 [ŠÇ—ƒuƒƒbƒN
     78 *  優先度データキュー管理ブロック
    8979 *
    90  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    91  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    92  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     80 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     81 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     82 *  フィールドが共通になっている.
    9383 */
    9484typedef struct pridataq_control_block {
    95         QUEUE           swait_queue;    /* —Dæ“xƒf[ƒ^ƒLƒ
    96 [‘—M‘Ò‚¿ƒLƒ
    97 [ */
    98         const PDQINIB *p_pdqinib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    99         QUEUE           rwait_queue;    /* —Dæ“xƒf[ƒ^ƒLƒ
    100 [ŽóM‘Ò‚¿ƒLƒ
    101 [ */
    102         uint_t          count;                  /* —Dæ“xƒf[ƒ^ƒLƒ
    103 [’†‚̃f[ƒ^‚̐” */
    104         PDQMB           *p_head;                /* Å‰‚̃f[ƒ^ */
    105         uint_t          unused;                 /* –¢Žg—pƒf[ƒ^ŠÇ—ƒuƒƒbƒN‚̐擪 */
    106         PDQMB           *p_freelist;    /* –¢Š„“–‚ăf[ƒ^ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg */
     85        QUEUE           swait_queue;    /* 優先度データキュー送信待ちキュー */
     86        const PDQINIB *p_pdqinib;       /* 初期化ブロックへのポインタ */
     87        QUEUE           rwait_queue;    /* 優先度データキュー受信待ちキュー */
     88        uint_t          count;                  /* 優先度データキュー中のデータの数 */
     89        PDQMB           *p_head;                /* 最初のデータ */
     90        uint_t          unused;                 /* 未使用データ管理ブロックの先頭 */
     91        PDQMB           *p_freelist;    /* 未割当てデータ管理ブロックのリスト */
    10792} PDQCB;
    10893
    10994/*
    110  *  —Dæ“xƒf[ƒ^ƒLƒ
    111 [‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     95 *  優先度データキュー待ち情報ブロックの定義
    11296 *
    113  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    114  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    115  *  Å‰‚Ì2‚‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
    116  *  —Dæ“xƒf[ƒ^ƒLƒ
    117 [‚Ö‚Ì‘—M‘Ò‚¿‚Æ—Dæ“xƒf[ƒ^ƒLƒ
    118 [‚©‚ç‚ÌŽóM‘Ò‚¿‚ŁC
    119  *  “¯‚¶‘Ò‚¿î•ñƒuƒƒbƒN‚ðŽg‚¤D
     97 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     98 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     99 *  最初の2つのフィールドが共通になっている.
     100 *  優先度データキューへの送信待ちと優先度データキューからの受信待ちで,
     101 *  同じ待ち情報ブロックを使う.
    120102 */
    121103typedef struct pridataq_waiting_information {
    122         WINFO           winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    123         PDQCB           *p_pdqcb;               /* ‘Ò‚Á‚Ä‚¢‚é—Dæ“xƒf[ƒ^ƒLƒ
    124 [‚ÌŠÇ—ƒuƒƒbƒN*/
    125         intptr_t        data;                   /* ‘—ŽóMƒf[ƒ^ */
    126         PRI                     datapri;                /* ƒf[ƒ^—Dæ“x */
     104        WINFO           winfo;                  /* 標準の待ち情報ブロック */
     105        PDQCB           *p_pdqcb;               /* 待っている優先度データキューの管理ブロック*/
     106        intptr_t        data;                   /* 送受信データ */
     107        PRI                     datapri;                /* データ優先度 */
    127108} WINFO_PDQ;
    128109
    129110/*
    130  *  Žg—p‚µ‚Ä‚¢‚È‚¢—Dæ“xƒf[ƒ^ƒLƒ
    131 [ŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     111 *  使用していない優先度データキュー管理ブロックのリスト
    132112 */
    133113extern QUEUE    free_pdqcb;
    134114
    135115/*
    136  *  —Dæ“xƒf[ƒ^ƒLƒ
    137 [ID‚̍őå’likernel_cfg.cj
     116 *  優先度データキューIDの最大値(kernel_cfg.c)
    138117 */
    139118extern const ID tmax_pdqid;
     
    141120
    142121/*
    143  *  —Dæ“xƒf[ƒ^ƒLƒ
    144 [‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     122 *  優先度データキュー初期化ブロックのエリア(kernel_cfg.c)
    145123 */
    146124extern const PDQINIB    pdqinib_table[];
     
    148126
    149127/*
    150  *  —Dæ“xƒf[ƒ^ƒLƒ
    151 [ŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     128 *  優先度データキュー管理ブロックのエリア(kernel_cfg.c)
    152129 */
    153130extern PDQCB    pdqcb_table[];
    154131
    155132/*
    156  *  —Dæ“xƒf[ƒ^ƒLƒ
    157 [ŠÇ—ƒuƒƒbƒN‚©‚ç—Dæ“xƒf[ƒ^ƒLƒ
    158 [ID‚ðŽæ‚èo‚·‚½
    159  *  ‚߂̃}ƒNƒ
     133 *  優先度データキュー管理ブロックから優先度データキューIDを取り出すた
     134 *  めのマクロ
    160135 */
    161136#define PDQID(p_pdqcb)  ((ID)(((p_pdqcb) - pdqcb_table) + TMIN_PDQID))
    162137
    163138/*
    164  *  —Dæ“xƒf[ƒ^ƒLƒ
    165 [‹@”\‚̏‰Šú‰»
     139 *  優先度データキュー機能の初期化
    166140 */
    167141extern void     initialize_pridataq(void);
    168142
    169143/*
    170  *  —Dæ“xƒf[ƒ^ƒLƒ
    171 [ŠÇ——̈æ‚ւ̃f[ƒ^‚ÌŠi”[
     144 *  優先度データキュー管理領域へのデータの格納
    172145 */
    173146extern void     enqueue_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri);
    174147
    175148/*
    176  *  —Dæ“xƒf[ƒ^ƒLƒ
    177 [ŠÇ——̈悩‚ç‚̃f[ƒ^‚ÌŽæo‚µ
     149 *  優先度データキュー管理領域からのデータの取出し
    178150 */
    179151extern void     dequeue_pridata(PDQCB *p_pdqcb, intptr_t *p_data, PRI *p_datapri);
    180152
    181153/*
    182  *  —Dæ“xƒf[ƒ^ƒLƒ
    183 [‚ւ̃f[ƒ^‘—M
     154 *  優先度データキューへのデータ送信
    184155 */
    185156extern bool_t   send_pridata(PDQCB *p_pdqcb, intptr_t data,
     
    187158
    188159/*
    189  *  —Dæ“xƒf[ƒ^ƒLƒ
    190 [‚©‚ç‚̃f[ƒ^ŽóM
     160 *  優先度データキューからのデータ受信
    191161 */
    192162extern bool_t   receive_pridata(PDQCB *p_pdqcb, intptr_t *p_data,
  • UsbWattMeter/trunk/asp_dcre/kernel/semaphore.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒZƒ}ƒtƒH‹@”\
     44 *              セマフォ機能
    4945 */
    5046
     
    5652
    5753/*
    58  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    5955 */
    6056#ifndef LOG_ACRE_SEM_ENTER
     
    131127
    132128/*
    133  *  ƒZƒ}ƒtƒH‚̐”
     129 *  セマフォの数
    134130 */
    135131#define tnum_sem        ((uint_t)(tmax_semid - TMIN_SEMID + 1))
     
    137133
    138134/*
    139  *  ƒZƒ}ƒtƒHID‚©‚çƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     135 *  セマフォIDからセマフォ管理ブロックを取り出すためのマクロ
    140136 */
    141137#define INDEX_SEM(semid)        ((uint_t)((semid) - TMIN_SEMID))
     
    145141
    146142/*
    147  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     143 *  使用していないセマフォ管理ブロックのリスト
    148144 */
    149145QUEUE   free_semcb;
    150146
    151147/*
    152  *  ƒZƒ}ƒtƒH‹@”\‚̏‰Šú‰»
     148 *  セマフォ機能の初期化
    153149 */
    154150void
     
    178174
    179175/*
    180  *  ƒZƒ}ƒtƒH‚̐¶¬
     176 *  セマフォの生成
    181177 */
    182178#ifdef TOPPERS_acre_sem
     
    220216
    221217/*
    222  *  ƒZƒ}ƒtƒH‚̍폜
     218 *  セマフォの削除
    223219 */
    224220#ifdef TOPPERS_del_sem
     
    264260
    265261/*
    266  *  ƒZƒ}ƒtƒHŽ‘Œ¹‚Ì•Ô‹p
     262 *  セマフォ資源の返却
    267263 */
    268264#ifdef TOPPERS_sig_sem
     
    308304
    309305/*
    310  *  ƒZƒ}ƒtƒHŽ‘Œ¹‚Ì•Ô‹pi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     306 *  セマフォ資源の返却(非タスクコンテキスト用)
    311307 */
    312308#ifdef TOPPERS_isig_sem
     
    352348
    353349/*
    354  *  ƒZƒ}ƒtƒHŽ‘Œ¹‚ÌŠl“¾
     350 *  セマフォ資源の獲得
    355351 */
    356352#ifdef TOPPERS_wai_sem
     
    392388
    393389/*
    394  *  ƒZƒ}ƒtƒHŽ‘Œ¹‚ÌŠl“¾iƒ|[ƒŠƒ“ƒOj
     390 *  セマフォ資源の獲得(ポーリング)
    395391 */
    396392#ifdef TOPPERS_pol_sem
     
    428424
    429425/*
    430  *  ƒZƒ}ƒtƒHŽ‘Œ¹‚ÌŠl“¾iƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     426 *  セマフォ資源の獲得(タイムアウトあり)
    431427 */
    432428#ifdef TOPPERS_twai_sem
     
    474470
    475471/*
    476  *  ƒZƒ}ƒtƒH‚̍ú‰»
     472 *  セマフォの再初期化
    477473 */
    478474#ifdef TOPPERS_ini_sem
     
    512508
    513509/*
    514  *  ƒZƒ}ƒtƒH‚̏ó‘ÔŽQÆ
     510 *  セマフォの状態参照
    515511 */
    516512#ifdef TOPPERS_ref_sem
  • UsbWattMeter/trunk/asp_dcre/kernel/semaphore.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒZƒ}ƒtƒH‹@”\
     44 *              セマフォ機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN
     53 *  セマフォ初期化ブロック
    5854 *
    59  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    60  *  iWOBJINIBj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    61  *  Å‰‚̃tƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     55 *  この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分
     56 *  (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので,
     57 *  最初のフィールドが共通になっている.
    6258 */
    6359typedef struct semaphore_initialization_block {
    64         ATR                     sematr;                 /* ƒZƒ}ƒtƒH‘®« */
    65         uint_t          isemcnt;                /* ƒZƒ}ƒtƒH‚ÌŽ‘Œ¹”‚̏‰Šú’l */
    66         uint_t          maxsem;                 /* ƒZƒ}ƒtƒH‚̍ő厑Œ¹” */
     60        ATR                     sematr;                 /* セマフォ属性 */
     61        uint_t          isemcnt;                /* セマフォの資源数の初期値 */
     62        uint_t          maxsem;                 /* セマフォの最大資源数 */
    6763} SEMINIB;
    6864
    6965/*
    70  *  ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN
     66 *  セマフォ管理ブロック
    7167 *
    72  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj
    73  *  ‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁCÅ‰‚Ì2‚‚Ì
    74  *  ƒtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     68 *  この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)
     69 *  を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの
     70 *  フィールドが共通になっている.
    7571 */
    7672typedef struct semaphore_control_block {
    77         QUEUE           wait_queue;             /* ƒZƒ}ƒtƒH‘Ò‚¿ƒLƒ
    78 [ */
    79         const SEMINIB *p_seminib;       /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    80         uint_t          semcnt;                 /* ƒZƒ}ƒtƒHŒ»ÝƒJƒEƒ“ƒg’l */
     73        QUEUE           wait_queue;             /* セマフォ待ちキュー */
     74        const SEMINIB *p_seminib;       /* 初期化ブロックへのポインタ */
     75        uint_t          semcnt;                 /* セマフォ現在カウント値 */
    8176} SEMCB;
    8277
    8378/*
    84  *  ƒZƒ}ƒtƒH‘Ò‚¿î•ñƒuƒƒbƒN‚Ì’è‹`
     79 *  セマフォ待ち情報ブロックの定義
    8580 *
    86  *  ‚±‚̍\‘¢‘̂́C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    87  *  iWINFO_WOBJj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚̂ŁC
    88  *  ‚·‚ׂẴtƒB[ƒ‹ƒh‚ª‹¤’Ê‚É‚È‚Á‚Ä‚¢‚éD
     81 *  この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分
     82 *  (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので,
     83 *  すべてのフィールドが共通になっている.
    8984 */
    9085typedef struct semaphore_waiting_information {
    91         WINFO   winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    92         SEMCB   *p_semcb;               /* ‘Ò‚Á‚Ä‚¢‚éƒZƒ}ƒtƒH‚ÌŠÇ—ƒuƒƒbƒN */
     86        WINFO   winfo;                  /* 標準の待ち情報ブロック */
     87        SEMCB   *p_semcb;               /* 待っているセマフォの管理ブロック */
    9388} WINFO_SEM;
    9489
    9590/*
    96  *  Žg—p‚µ‚Ä‚¢‚È‚¢ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚̃ŠƒXƒg
     91 *  使用していないセマフォ管理ブロックのリスト
    9792 */
    9893extern QUEUE    free_semcb;
    9994
    10095/*
    101  *  ƒZƒ}ƒtƒHID‚̍őå’likernel_cfg.cj
     96 *  セマフォIDの最大値(kernel_cfg.c)
    10297 */
    10398extern const ID tmax_semid;
     
    105100
    106101/*
    107  *  ƒZƒ}ƒtƒH‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     102 *  セマフォ初期化ブロックのエリア(kernel_cfg.c)
    108103 */
    109104extern const SEMINIB    seminib_table[];
     
    111106
    112107/*
    113  *  ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     108 *  セマフォ管理ブロックのエリア(kernel_cfg.c)
    114109 */
    115110extern SEMCB    semcb_table[];
    116111
    117112/*
    118  *  ƒZƒ}ƒtƒHŠÇ—ƒuƒƒbƒN‚©‚çƒZƒ}ƒtƒHID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     113 *  セマフォ管理ブロックからセマフォIDを取り出すためのマクロ
    119114 */
    120115#define SEMID(p_semcb)  ((ID)(((p_semcb) - semcb_table) + TMIN_SEMID))
    121116
    122117/*
    123  *  ƒZƒ}ƒtƒH‹@”\‚̏‰Šú‰»
     118 *  セマフォ機能の初期化
    124119 */
    125120extern void     initialize_semaphore(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/startup.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒJ[ƒlƒ‹‚̏‰Šú‰»‚ƏI—¹ˆ—
     44 *              カーネルの初期化と終了処理
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_KER_ENTER
     
    7571
    7672/*
    77  *  ƒJ[ƒlƒ‹“®ìó‘Ôƒtƒ‰ƒO
     73 *  カーネル動作状態フラグ
    7874 *
    79  *  ƒXƒ^[ƒgƒAƒbƒvƒ‹[ƒ`ƒ“‚ŁCfalsei0j‚ɏ‰Šú‰»‚³‚ê‚邱‚Æ‚ðŠú‘Ò‚µ‚Ä
    80  *  ‚¢‚éD
     75 *  スタートアップルーチンで,false(=0)に初期化されることを期待して
     76 *  いる.
    8177 */
    8278bool_t  kerflg = false;
    8379
    8480/*
    85  *  ƒJ[ƒlƒ‹‚Ì‹N“®
     81 *  カーネルの起動
    8682 */
    8783void
     
    8985{
    9086        /*
    91          *  ƒ^[ƒQƒbƒgˆË‘¶‚̏‰Šú‰»
     87         *  ターゲット依存の初期化
    9288         */
    9389        target_initialize();
    9490
    9591        /*
    96          *  Šeƒ‚ƒWƒ
    97 [ƒ‹‚̏‰Šú‰»
     92         *  各モジュールの初期化
    9893         *
    99          *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ
    100 [ƒ‹‚Í‘¼‚̃‚ƒWƒ
    101 [ƒ‹‚æ‚èæ‚ɏ‰Šú‰»
    102          *  ‚·‚é•K—v‚ª‚ ‚éD
     94         *  タイムイベント管理モジュールは他のモジュールより先に初期化
     95         *  する必要がある.
    10396         */
    10497        initialize_kmm();
     
    107100
    108101        /*
    109          *  ‰Šú‰»ƒ‹[ƒ`ƒ“‚ÌŽÀs
     102         *  初期化ルーチンの実行
    110103         */
    111104        call_inirtn();
    112105
    113106        /*
    114          *  ƒJ[ƒlƒ‹“®ì‚ÌŠJŽn
     107         *  カーネル動作の開始
    115108         */
    116109        kerflg = true;
     
    123116
    124117/*
    125  *  ƒJ[ƒlƒ‹‚̏I—¹
     118 *  カーネルの終了
    126119 */
    127120#ifdef TOPPERS_ext_ker
     
    135128
    136129        /*
    137          *  Š„ž‚݃ƒbƒNó‘ԂɈڍs
     130         *  割込みロック状態に移行
    138131         */
    139132        SIL_LOC_INT();
    140133
    141134        /*
    142          *  ƒJ[ƒlƒ‹“®ì‚̏I—¹
     135         *  カーネル動作の終了
    143136         */
    144137        LOG_KER_LEAVE();
     
    146139
    147140        /*
    148          *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—‚̌ďo‚µ
     141         *  カーネルの終了処理の呼出し
    149142         *
    150          *  ”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg‚ɐ؂芷‚¦‚āCexit_kernel‚ðŒÄ‚яo‚·D
     143         *  非タスクコンテキストに切り換えて,exit_kernelを呼び出す.
    151144         */
    152145        call_exit_kernel();
    153146
    154147        /*
    155          *  ƒRƒ“ƒpƒCƒ‰‚ÌŒx‘΍ôi‚±‚±‚Ö—ˆ‚邱‚Æ‚Í‚È‚¢‚Í‚¸j
     148         *  コンパイラの警告対策(ここへ来ることはないはず)
    156149         */
    157150        SIL_UNL_INT();
     
    161154
    162155/*
    163  *  ƒJ[ƒlƒ‹‚̏I—¹ˆ—
     156 *  カーネルの終了処理
    164157 */
    165158void
     
    167160{
    168161        /*
    169          *  I—¹ˆ—ƒ‹[ƒ`ƒ“‚ÌŽÀs
     162         *  終了処理ルーチンの実行
    170163         */
    171164        call_terrtn();
    172165
    173166        /*
    174          *  ƒ^[ƒQƒbƒgˆË‘¶‚̏I—¹ˆ—
     167         *  ターゲット依存の終了処理
    175168         */
    176169        target_exit();
     
    181174
    182175/*
    183  *  ƒJ[ƒlƒ‹‚ÌŠ„‚è•t‚¯‚郁ƒ‚ƒŠ—̈æ‚ÌŠÇ—
     176 *  カーネルの割り付けるメモリ領域の管理
    184177 *
    185  *  ƒƒ‚ƒŠ—̈æ‚ðæ“ª‚©‚珇‚ÉŠ„‚è“–‚āC‰ð•ú‚³‚ꂽƒƒ‚ƒŠ—̈æ‚ðÄ—˜—p‚µ‚È
    186  *  ‚¢ƒƒ‚ƒŠŠÇ—ƒ‚ƒWƒ
    187 [ƒ‹D
     178 *  メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しな
     179 *  いメモリ管理モジュール.
    188180 */
    189181#ifdef TOPPERS_kermem
  • UsbWattMeter/trunk/asp_dcre/kernel/sys_manage.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒVƒXƒeƒ€ó‘ÔŠÇ—‹@”\
     44 *              システム状態管理機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_ROT_RDQ_ENTER
     
    177173
    178174/*
    179  *  ƒ^ƒXƒN‚Ì—Dæ‡ˆÊ‚̉ñ“]
     175 *  タスクの優先順位の回転
    180176 */
    181177#ifdef TOPPERS_rot_rdq
     
    207203
    208204/*
    209  *  ƒ^ƒXƒN‚Ì—Dæ‡ˆÊ‚̉ñ“]i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     205 *  タスクの優先順位の回転(非タスクコンテキスト用)
    210206 */
    211207#ifdef TOPPERS_irot_rdq
     
    235231
    236232/*
    237  *  ŽÀsó‘Ԃ̃^ƒXƒNID‚ÌŽQÆ
     233 *  実行状態のタスクIDの参照
    238234 */
    239235#ifdef TOPPERS_get_tid
     
    260256
    261257/*
    262  *  ŽÀsó‘Ԃ̃^ƒXƒNID‚ÌŽQÆi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     258 *  実行状態のタスクIDの参照(非タスクコンテキスト用)
    263259 */
    264260#ifdef TOPPERS_iget_tid
     
    285281
    286282/*
    287  *  CPUƒƒbƒNó‘Ԃւ̈ڍs
     283 *  CPUロック状態への移行
    288284 */
    289285#ifdef TOPPERS_loc_cpu
     
    310306
    311307/*
    312  *  CPUƒƒbƒNó‘Ԃւ̈ڍsi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     308 *  CPUロック状態への移行(非タスクコンテキスト用)
    313309 */
    314310#ifdef TOPPERS_iloc_cpu
     
    335331
    336332/*
    337  *  CPUƒƒbƒNó‘Ԃ̉ðœ
     333 *  CPUロック状態の解除
    338334 *
    339  *  CPUƒƒbƒN’†‚́CƒfƒBƒXƒpƒbƒ`‚ª•K—v‚Æ‚È‚éƒT[ƒrƒXƒR[ƒ‹‚ðŒÄ‚яo‚·‚±
    340  *  ‚Æ‚Í‚Å‚«‚È‚¢‚½‚߁CCPUƒƒbƒNó‘Ô‚Ì‰ðœŽž‚ɃfƒBƒXƒpƒbƒ`ƒƒ‚ð‹N“®‚·‚é
    341  *  •K—v‚Í‚È‚¢D
     335 *  CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ
     336 *  とはできないため,CPUロック状態の解除時にディスパッチャを起動する
     337 *  必要はない.
    342338 */
    343339#ifdef TOPPERS_unl_cpu
     
    364360
    365361/*
    366  *  CPUƒƒbƒNó‘Ô‚Ì‰ðœi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     362 *  CPUロック状態の解除(非タスクコンテキスト用)
    367363 *
    368  *  CPUƒƒbƒN’†‚́CƒfƒBƒXƒpƒbƒ`‚ª•K—v‚Æ‚È‚éƒT[ƒrƒXƒR[ƒ‹‚ðŒÄ‚яo‚·‚±
    369  *  ‚Æ‚Í‚Å‚«‚È‚¢‚½‚߁CCPUƒƒbƒNó‘Ô‚Ì‰ðœŽž‚ɃfƒBƒXƒpƒbƒ`ƒƒ‚Ì‹N“®‚ð—v
    370  *  ‹‚·‚é•K—v‚Í‚È‚¢D
     364 *  CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ
     365 *  とはできないため,CPUロック状態の解除時にディスパッチャの起動を要
     366 *  求する必要はない.
    371367 */
    372368#ifdef TOPPERS_iunl_cpu
     
    393389
    394390/*
    395  *  ƒfƒBƒXƒpƒbƒ`‚Ì‹ÖŽ~
     391 *  ディスパッチの禁止
    396392 */
    397393#ifdef TOPPERS_dis_dsp
     
    419415
    420416/*
    421  *  ƒfƒBƒXƒpƒbƒ`‚Ì‹–‰Â
     417 *  ディスパッチの許可
    422418 */
    423419#ifdef TOPPERS_ena_dsp
     
    450446
    451447/*
    452  *  ƒRƒ“ƒeƒLƒXƒg‚ÌŽQÆ
     448 *  コンテキストの参照
    453449 */
    454450#ifdef TOPPERS_sns_ctx
     
    468464
    469465/*
    470  *  CPUƒƒbƒNó‘Ô‚ÌŽQÆ
     466 *  CPUロック状態の参照
    471467 */
    472468#ifdef TOPPERS_sns_loc
     
    486482
    487483/*
    488  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚ÌŽQÆ
     484 *  ディスパッチ禁止状態の参照
    489485 */
    490486#ifdef TOPPERS_sns_dsp
     
    504500
    505501/*
    506  *  ƒfƒBƒXƒpƒbƒ`•Û—¯ó‘Ô‚ÌŽQÆ
     502 *  ディスパッチ保留状態の参照
    507503 */
    508504#ifdef TOPPERS_sns_dpn
     
    522518
    523519/*
    524  *  ƒJ[ƒlƒ‹”ñ“®ìó‘Ô‚ÌŽQÆ
     520 *  カーネル非動作状態の参照
    525521 */
    526522#ifdef TOPPERS_sns_ker
  • UsbWattMeter/trunk/asp_dcre/kernel/task.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              タスク管理モジュール
    5045 */
    5146
     
    5550
    5651/*
    57  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5853 */
    5954#ifndef LOG_TEX_ENTER
     
    6863
    6964/*
    70  *  ŽÀsó‘Ԃ̃^ƒXƒN
     65 *  実行状態のタスク
    7166 */
    7267TCB             *p_runtsk;
    7368
    7469/*
    75  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN
     70 *  最高優先順位のタスク
    7671 */
    7772TCB             *p_schedtsk;
    7873
    7974/*
    80  *  ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`^ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‹N“®—v‹ƒtƒ‰ƒO
     75 *  タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ
    8176 */
    8277bool_t  reqflg;
    8378
    8479/*
    85  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô
     80 *  割込み優先度マスク全解除状態
    8681 */
    8782bool_t  ipmflg;
    8883
    8984/*
    90  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô
     85 *  ディスパッチ禁止状態
    9186 */
    9287bool_t  disdsp;
    9388
    9489/*
    95  *  ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`‰Â”\ó‘Ô
     90 *  タスクディスパッチ可能状態
    9691 */
    9792bool_t  dspflg;
    9893
    9994/*
    100  *  ƒŒƒfƒBƒLƒ
    101 [
     95 *  レディキュー
    10296 */
    10397QUEUE   ready_queue[TNUM_TPRI];
    10498
    10599/*
    106  *  ƒŒƒfƒBƒLƒ
    107 [ƒT[ƒ`‚Ì‚½‚߂̃rƒbƒgƒ}ƒbƒv
     100 *  レディキューサーチのためのビットマップ
    108101 */
    109102uint16_t        ready_primap;
    110103
    111104/*
    112  *  Žg—p‚µ‚Ä‚¢‚È‚¢TCB‚̃ŠƒXƒg
     105 *  使用していないTCBのリスト
    113106 */
    114107QUEUE   free_tcb;
    115108
    116109/*
    117  *  ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ
    118 [ƒ‹‚̏‰Šú‰»
     110 *  タスク管理モジュールの初期化
    119111 */
    120112void
     
    160152
    161153/*
    162  *  ƒrƒbƒgƒ}ƒbƒvƒT[ƒ`ŠÖ”
    163  *
    164  *  bitmap“à‚Ì1‚̃rƒbƒg‚Ì“àCÅ‚à‰ºˆÊi‰Ej‚Ì‚à‚Ì‚ðƒT[ƒ`‚µC‚»‚̃rƒb
    165  *  ƒg”ԍ†‚ð•Ô‚·Dƒrƒbƒg”ԍ†‚́CÅ‰ºˆÊƒrƒbƒg‚ð0‚Æ‚·‚éDbitmap‚É0‚ðŽw’è
    166  *  ‚µ‚Ä‚Í‚È‚ç‚È‚¢D‚±‚̊֐”‚ł́Cbitmap‚ª16ƒrƒbƒg‚Å‚ ‚邱‚Æ‚ð‰¼’è‚µC
    167  *  uint16_tŒ^‚Æ‚µ‚Ä‚¢‚éD
    168  *
    169  *  ƒrƒbƒgƒT[ƒ`–½—ß‚ðŽ‚ÂƒvƒƒZƒbƒT‚ł́CƒrƒbƒgƒT[ƒ`–½—ß‚ðŽg‚¤‚悤‚É
    170  *  ‘‚«’¼‚µ‚½•û‚ªŒø—¦‚ª—Ç‚¢ê‡‚ª‚ ‚éD‚±‚̂悤‚ȏꍇ‚ɂ́Cƒ^[ƒQƒbƒg
    171  *  ˆË‘¶•”‚ŃrƒbƒgƒT[ƒ`–½—ß‚ðŽg‚Á‚½bitmap_search‚ð’è‹`‚µC
    172  *  OMIT_BITMAP_SEARCH‚ðƒ}ƒNƒ’è‹`‚·‚ê‚΂悢D‚Ü‚½CƒrƒbƒgƒT[ƒ`–½—ß‚Ì
    173  *  ƒT[ƒ`•ûŒü‚ª‹t‚È‚Ç‚Ì——R‚Å—Dæ“x‚ƃrƒbƒg‚Ƃ̑Ήž‚ð•ÏX‚µ‚½‚¢ê‡‚É
    174  *  ‚́CPRIMAP_BIT‚ðƒ}ƒNƒ’è‹`‚·‚ê‚΂悢D
    175  *
    176  *  ‚Ü‚½Cƒ‰ƒCƒuƒ‰ƒŠ‚Éffs‚ª‚ ‚é‚È‚çCŽŸ‚̂悤‚É’è‹`‚µ‚ă‰ƒCƒuƒ‰ƒŠŠÖ”‚ð
    177  *  Žg‚Á‚½•û‚ªŒø—¦‚ª—Ç‚¢‰Â”\«‚à‚ ‚éD
     154 *  ビットマップサーチ関数
     155 *
     156 *  bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ
     157 *  ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定
     158 *  してはならない.この関数では,bitmapが16ビットであることを仮定し,
     159 *  uint16_t型としている.
     160 *
     161 *  ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように
     162 *  書き直した方が効率が良い場合がある.このような場合には,ターゲット
     163 *  依存部でビットサーチ命令を使ったbitmap_searchを定義し,
     164 *  OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の
     165 *  サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に
     166 *  は,PRIMAP_BITをマクロ定義すればよい.
     167 *
     168 *  また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を
     169 *  使った方が効率が良い可能性もある.
    178170 *              #define bitmap_search(bitmap) (ffs(bitmap) - 1)
    179171 */
     
    207199
    208200/*
    209  *  —Dæ“xƒrƒbƒgƒ}ƒbƒv‚ª‹ó‚©‚̃`ƒFƒbƒN
     201 *  優先度ビットマップが空かのチェック
    210202 */
    211203Inline bool_t
     
    216208
    217209/*
    218  *  —Dæ“xƒrƒbƒgƒ}ƒbƒv‚̃T[ƒ`
     210 *  優先度ビットマップのサーチ
    219211 */
    220212Inline uint_t
     
    225217
    226218/*
    227  *  —Dæ“xƒrƒbƒgƒ}ƒbƒv‚̃Zƒbƒg
     219 *  優先度ビットマップのセット
    228220 */
    229221Inline void
     
    234226
    235227/*
    236  *  —Dæ“xƒrƒbƒgƒ}ƒbƒv‚̃NƒŠƒA
     228 *  優先度ビットマップのクリア
    237229 */
    238230Inline void
     
    243235
    244236/*
    245  *  Å‚—Dæ‡ˆÊƒ^ƒXƒN‚̃T[ƒ`
     237 *  最高優先順位タスクのサーチ
    246238 */
    247239#ifdef TOPPERS_tsksched
     
    259251
    260252/*
    261  *  ŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
    262  *
    263  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚·‚é‚̂́CŽÀs‚Å‚«‚éƒ^ƒXƒN‚ª‚È‚©‚Á‚½ê‡
    264  *  ‚ƁCp_tcb‚Ì—Dæ“x‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚Ì—Dæ“x‚æ‚è‚à‚‚¢ê‡‚Å‚ 
    265  *  ‚éD
     253 *  実行できる状態への遷移
     254 *
     255 *  最高優先順位のタスクを更新するのは,実行できるタスクがなかった場合
     256 *  と,p_tcbの優先度が最高優先順位のタスクの優先度よりも高い場合であ
     257 *  る.
    266258 */
    267259#ifdef TOPPERS_tskrun
     
    285277
    286278/*
    287  *  ŽÀs‚Å‚«‚éó‘Ô‚©‚瑼‚̏ó‘Ô‚Ö‚Ì‘JˆÚ
    288  *
    289  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚·‚é‚̂́Cp_tcb‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚Å
    290  *  ‚ ‚Á‚½ê‡‚Å‚ ‚éDp_tcb‚Æ“¯‚¶—Dæ“x‚̃^ƒXƒN‚ª‘¼‚É‚ ‚éê‡‚́Cp_tcb
    291  *  ‚ÌŽŸ‚̃^ƒXƒN‚ªÅ‚—Dæ‡ˆÊ‚É‚È‚éD‚»‚¤‚Å‚È‚¢ê‡‚́CƒŒƒfƒBƒLƒ
    292 [‚ð
    293  *  ƒT[ƒ`‚·‚é•K—v‚ª‚ ‚éD
     279 *  実行できる状態から他の状態への遷移
     280 *
     281 *  最高優先順位のタスクを更新するのは,p_tcbが最高優先順位のタスクで
     282 *  あった場合である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcb
     283 *  の次のタスクが最高優先順位になる.そうでない場合は,レディキューを
     284 *  サーチする必要がある.
    294285 */
    295286#ifdef TOPPERS_tsknrun
     
    321312
    322313/*
    323  *  ‹xŽ~ó‘Ô‚Ö‚Ì‘JˆÚ
     314 *  休止状態への遷移
    324315 */
    325316#ifdef TOPPERS_tskdmt
     
    339330
    340331/*
    341  *  ‹xŽ~ó‘Ô‚©‚çŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
     332 *  休止状態から実行できる状態への遷移
    342333 */
    343334#ifdef TOPPERS_tskact
     
    355346
    356347/*
    357  *  ƒ^ƒXƒN‚Ì—Dæ“x‚̕ύX
    358  *
    359  *  ƒ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘Ԃ̏ꍇ‚ɂ́CƒŒƒfƒBƒLƒ
    360 [‚Ì’†‚ł̈ʒu‚ð•ÏX‚·
    361  *  ‚éDƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    362 [‚Ì’†‚Å‘Ò‚¿ó‘Ô‚É‚È‚Á‚Ä‚¢‚éê‡‚ɂ́C‘Ò
    363  *  ‚¿ƒLƒ
    364 [‚Ì’†‚ł̈ʒu‚ð•ÏX‚·‚éD
    365  *
    366  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚·‚é‚̂́C(1) p_tcb‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒX
    367  *  ƒN‚Å‚ ‚Á‚āC‚»‚Ì—Dæ“x‚ð‰º‚°‚½ê‡C(2) p_tcb‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒX
    368  *  ƒN‚Å‚Í‚È‚­C•ÏXŒã‚Ì—Dæ“x‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚Ì—Dæ“x‚æ‚è‚à‚‚¢
    369  *  ê‡‚Å‚ ‚éD(1)‚̏ꍇ‚ɂ́CƒŒƒfƒBƒLƒ
    370 [‚ðƒT[ƒ`‚·‚é•K—v‚ª‚ ‚éD
     348 *  タスクの優先度の変更
     349 *
     350 *  タスクが実行できる状態の場合には,レディキューの中での位置を変更す
     351 *  る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待
     352 *  ちキューの中での位置を変更する.
     353 *
     354 *  最高優先順位のタスクを更新するのは,(1) p_tcbが最高優先順位のタス
     355 *  クであって,その優先度を下げた場合,(2) p_tcbが最高優先順位のタス
     356 *  クではなく,変更後の優先度が最高優先順位のタスクの優先度よりも高い
     357 *  場合である.(1)の場合には,レディキューをサーチする必要がある.
    371358 */
    372359#ifdef TOPPERS_tskpri
     
    382369        if (TSTAT_RUNNABLE(p_tcb->tstat)) {
    383370                /*
    384                  *  ƒ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘Ԃ̏ꍇ
     371                 *  タスクが実行できる状態の場合
    385372                 */
    386373                queue_delete(&(p_tcb->task_queue));
     
    407394                if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) {
    408395                        /*
    409                          *  ƒ^ƒXƒN‚ªC“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”
    410                          *  •ªiWOBJCBj‚Ì‘Ò‚¿ƒLƒ
    411 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚éê‡
     396                         *  タスクが,同期・通信オブジェクトの管理ブロックの共通部
     397                         *  分(WOBJCB)の待ちキューにつながれている場合
    412398                         */
    413399                        wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb,
     
    421407
    422408/*
    423  *  ƒŒƒfƒBƒLƒ
    424 [‚̉ñ“]
    425  *
    426  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚·‚é‚̂́CÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ªƒ^ƒXƒNƒL
    427  *  ƒ
    428 [‚Ì––”ö‚Ɉړ®‚µ‚½ê‡‚Å‚ ‚éD
     409 *  レディキューの回転
     410 *
     411 *  最高優先順位のタスクを更新するのは,最高優先順位のタスクがタスクキ
     412 *  ューの末尾に移動した場合である.
    429413 */
    430414#ifdef TOPPERS_tskrot
     
    450434
    451435/*
    452  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚̌ďo‚µ
    453  *
    454  *  ASPƒJ[ƒlƒ‹‚ł́Cƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ““à‚ÅCPUƒƒbƒNó‘Ô‚É‘JˆÚ‚µC
    455  *  Œ³‚̏ó‘Ô‚É–ß‚³‚¸‚ɃŠƒ^[ƒ“‚µ‚½ê‡CƒJ[ƒlƒ‹‚ªŒ³‚̏ó‘Ô‚É–ß‚·D
     436 *  タスク例外処理ルーチンの呼出し
     437 *
     438 *  ASPカーネルでは,タスク例外処理ルーチン内でCPUロック状態に遷移し,
     439 *  元の状態に戻さずにリターンした場合,カーネルが元の状態に戻す.
    456440 */
    457441#ifdef TOPPERS_tsktex
     
    486470                if (p_runtsk != p_schedtsk && dspflg) {
    487471                        /*
    488                          *  ‚±‚±‚Ådispatch‚ðŒÄ‚яo‚·ˆ—‚́C‘ŠŒÝÄ‹AŒÄo‚µ‚É‚È‚Á‚Ä
    489                          *  ‚¢‚邪Cdispatch‚ðŒÄ‚Ô‘O‚Ép_runtsk->enatex‚ðfalse‚É‚µ‚Ä
    490                          *  ‚¨‚¯‚ÎŽxá‚ª‚È‚¢D‚»‚Ì——R‚ɂ‚¢‚ẮCuTOPPERS/ASP ƒJ[
    491                          *  ƒlƒ‹ ÝŒvƒƒ‚v‚ðŽQÆ‚Ì‚±‚ƁD
     472                         *  ここでdispatchを呼び出す処理は,相互再帰呼出しになって
     473                         *  いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして
     474                         *  おけば支障がない.その理由については,「TOPPERS/ASP カー
     475                         *  ネル 設計メモ」を参照のこと.
    492476                         */
    493477                        dispatch();
     
    498482
    499483/*
    500  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®
     484 *  タスク例外処理ルーチンの起動
    501485 */
    502486#ifndef OMIT_CALLTEX
  • UsbWattMeter/trunk/asp_dcre/kernel/task.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              タスク管理モジュール
    5045 */
    5146
     
    5752
    5853/*
    59  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     54 *  トレースログマクロのデフォルト定義
    6055 */
    6156#ifndef LOG_TSKSTAT
     
    6459
    6560/*
    66  *  ƒ^ƒXƒN—Dæ“x‚Ì“à•”•\Œ»EŠO•”•\Œ»•ÏŠ·ƒ}ƒNƒ
     61 *  タスク優先度の内部表現・外部表現変換マクロ
    6762 */
    6863#define INT_PRIORITY(x)         ((uint_t)((x) - TMIN_TPRI))
     
    7065
    7166/*
    72  *  ƒ^ƒXƒNó‘Ô‚Ì“à•”•\Œ»
    73  *
    74  *  TCB’†‚̃^ƒXƒNó‘Ԃł́CŽÀsó‘ԁiRUNNINGj‚ÆŽÀs‰Â”\ó‘ԁiREADYj
    75  *  ‚Í‹æ•Ê‚µ‚È‚¢D—¼ó‘Ԃ𑍏̂µ‚āCŽÀs‚Å‚«‚éó‘ԁiRUNNABLEj‚ƌĂԁD
    76  *  “ñd‘Ò‚¿ó‘Ԃ́C(TS_WAITING | TS_SUSPENDED)‚Å•\‚·DTS_WAIT_???‚Í‘Ò
    77  *  ‚¿—vˆö‚ð•\‚µC‘Ò‚¿ó‘ԁi“ñd‘Ò‚¿ó‘Ô‚ðŠÜ‚ށj‚̏ꍇ‚ɂ̂ݐݒ肷‚éD
    78  */
    79 #define TS_DORMANT              0x00U                   /* ‹xŽ~ó‘Ô */
    80 #define TS_RUNNABLE             0x01U                   /* ŽÀs‚Å‚«‚éó‘Ô */
    81 #define TS_WAITING              0x02U                   /* ‘Ò‚¿ó‘Ô */
    82 #define TS_SUSPENDED    0x04U                   /* ‹­§‘Ò‚¿ó‘Ô */
    83 
    84 #define TS_WAIT_DLY             (0x00U << 3)    /* ŽžŠÔŒo‰ß‘Ò‚¿ */
    85 #define TS_WAIT_SLP             (0x01U << 3)    /* ‹N°‘Ò‚¿ */
    86 #define TS_WAIT_RDTQ    (0x02U << 3)    /* ƒf[ƒ^ƒLƒ
    87 [‚©‚ç‚ÌŽóM‘Ò‚¿ */
    88 #define TS_WAIT_RPDQ    (0x03U << 3)    /* —Dæ“xƒf[ƒ^ƒLƒ
    89 [‚©‚ç‚ÌŽóM‘Ò‚¿ */
    90 #define TS_WAIT_SEM             (0x04U << 3)    /* ƒZƒ}ƒtƒHŽ‘Œ¹‚ÌŠl“¾‘Ò‚¿ */
    91 #define TS_WAIT_FLG             (0x05U << 3)    /* ƒCƒxƒ“ƒgƒtƒ‰ƒO‘Ò‚¿ */
    92 #define TS_WAIT_SDTQ    (0x06U << 3)    /* ƒf[ƒ^ƒLƒ
    93 [‚Ö‚Ì‘—M‘Ò‚¿ */
    94 #define TS_WAIT_SPDQ    (0x07U << 3)    /* —Dæ“xƒf[ƒ^ƒLƒ
    95 [‚Ö‚Ì‘—M‘Ò‚¿ */
    96 #define TS_WAIT_MBX             (0x08U << 3)    /* ƒ[ƒ‹ƒ{ƒbƒNƒX‚©‚ç‚ÌŽóM‘Ò‚¿ */
    97 #define TS_WAIT_MPF             (0x09U << 3)    /* ŒÅ’è’·ƒƒ‚ƒŠƒuƒƒbƒN‚ÌŠl“¾‘Ò‚¿ */
    98 
    99 /*
    100  *  ƒ^ƒXƒNó‘Ô”»•Êƒ}ƒNƒ
    101  *
    102  *  TSTAT_DORMANT‚̓^ƒXƒN‚ª‹xŽ~ó‘Ô‚Å‚ ‚é‚©‚Ç‚¤‚©‚ðCTSTAT_RUNNABLE‚Í
    103  *  ƒ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘Ô‚Å‚ ‚é‚©‚Ç‚¤‚©‚ð”»•Ê‚·‚éDTSTAT_WAITING‚Í‘Ò
    104  *  ‚¿ó‘Ô‚Æ“ñd‘Ò‚¿ó‘Ô‚Ì‚¢‚¸‚ê‚©‚Å‚ ‚é‚©‚Ç‚¤‚©‚ðCTSTAT_SUSPENDED‚Í
    105  *  ‹­§‘Ò‚¿ó‘Ô‚Æ“ñd‘Ò‚¿ó‘Ô‚Ì‚¢‚¸‚ê‚©‚Å‚ ‚é‚©‚Ç‚¤‚©‚ð”»•Ê‚·‚éD
     67 *  タスク状態の内部表現
     68 *
     69 *  TCB中のタスク状態では,実行状態(RUNNING)と実行可能状態(READY)
     70 *  は区別しない.両状態を総称して,実行できる状態(RUNNABLE)と呼ぶ.
     71 *  二重待ち状態は,(TS_WAITING | TS_SUSPENDED)で表す.TS_WAIT_???は待
     72 *  ち要因を表し,待ち状態(二重待ち状態を含む)の場合にのみ設定する.
     73 */
     74#define TS_DORMANT              0x00U                   /* 休止状態 */
     75#define TS_RUNNABLE             0x01U                   /* 実行できる状態 */
     76#define TS_WAITING              0x02U                   /* 待ち状態 */
     77#define TS_SUSPENDED    0x04U                   /* 強制待ち状態 */
     78
     79#define TS_WAIT_DLY             (0x00U << 3)    /* 時間経過待ち */
     80#define TS_WAIT_SLP             (0x01U << 3)    /* 起床待ち */
     81#define TS_WAIT_RDTQ    (0x02U << 3)    /* データキューからの受信待ち */
     82#define TS_WAIT_RPDQ    (0x03U << 3)    /* 優先度データキューからの受信待ち */
     83#define TS_WAIT_SEM             (0x04U << 3)    /* セマフォ資源の獲得待ち */
     84#define TS_WAIT_FLG             (0x05U << 3)    /* イベントフラグ待ち */
     85#define TS_WAIT_SDTQ    (0x06U << 3)    /* データキューへの送信待ち */
     86#define TS_WAIT_SPDQ    (0x07U << 3)    /* 優先度データキューへの送信待ち */
     87#define TS_WAIT_MBX             (0x08U << 3)    /* メールボックスからの受信待ち */
     88#define TS_WAIT_MPF             (0x09U << 3)    /* 固定長メモリブロックの獲得待ち */
     89
     90/*
     91 *  タスク状態判別マクロ
     92 *
     93 *  TSTAT_DORMANTはタスクが休止状態であるかどうかを,TSTAT_RUNNABLEは
     94 *  タスクが実行できる状態であるかどうかを判別する.TSTAT_WAITINGは待
     95 *  ち状態と二重待ち状態のいずれかであるかどうかを,TSTAT_SUSPENDEDは
     96 *  強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する.
    10697 */
    10798#define TSTAT_DORMANT(tstat)    ((tstat) == TS_DORMANT)
     
    111102
    112103/*
    113  *  ƒ^ƒXƒN‘Ò‚¿—vˆö”»•Êƒ}ƒNƒ
    114  *
    115  *  TSTAT_WAIT_SLP‚̓^ƒXƒN‚ª‹N°‘Ò‚¿‚Å‚ ‚é‚©‚Ç‚¤‚©‚ðCTSTAT_WAIT_WOBJ
    116  *  ‚̓^ƒXƒN‚ª“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿‚Å‚ ‚é‚©iŒ¾‚¢Š·‚¦‚é‚ƁC
    117  *  “¯Šú’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    118 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚é‚©j‚Ç‚¤‚©‚ð”»•Ê‚·
    119  *  ‚éD‚Ü‚½CTSTAT_WAIT_WOBJCB‚̓^ƒXƒN‚ª“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—
    120  *  ƒuƒƒbƒN‚Ì‹¤’Ê•”•ªiWOBJCBj‚Ì‘Ò‚¿ƒLƒ
    121 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ð
    122  *  ”»•Ê‚·‚éD
    123  *
    124  *  TSTAT_WAIT_SLP‚́C”CˆÓ‚̃^ƒXƒNó‘Ô‚Ì’†‚©‚çCƒ^ƒXƒN‚ª‹N°‘Ò‚¿‚Å‚ ‚é
    125  *  ‚±‚Æ‚ð”»•Ê‚Å‚«‚éD‚·‚È‚í‚¿CTSTAT_WAITING‚É‚æ‚è‘Ò‚¿ó‘Ô‚Å‚ ‚邱‚Æ‚ð
    126  *  ”»•Ê‚¹‚¸‚ɁCTSTAT_SLP‚¾‚¯‚ð—p‚¢‚Ä‹N°‘Ò‚¿ó‘Ô‚Å‚ ‚邱‚Æ‚ð”»•Ê‚Å‚«‚éD
    127  *  ‚±‚ê‚ðŒø—¦“I‚ÉŽÀŒ»‚·‚邽‚߂ɁCTS_WAIT_SLP‚Ì’l‚ðC(0x00U << 3)‚Å‚Í‚È
    128  *  ‚­(0x01U << 3)‚Æ‚µ‚Ä‚¢‚éD‚»‚Ì‚½‚߁Cƒ^ƒXƒN‚ªŽžŠÔŒo‰ß‘Ò‚¿ó‘Ô‚Å‚ ‚é
    129  *  ‚±‚Æ‚ð”»•Ê‚·‚邽‚ß‚ÌTSTAT_WAIT_DLY‚ðCTSTAT_WAIT_SLP‚Æ“¯—l‚Ì•û–@‚Å
    130  *  ŽÀŒ»‚·‚邱‚Æ‚Í‚Å‚«‚È‚¢D
    131  */
    132 #define TS_WAIT_MASK    (0x0fU << 3)    /* ‘Ò‚¿—vˆö‚ÌŽæo‚µƒ}ƒXƒN */
     104 *  タスク待ち要因判別マクロ
     105 *
     106 *  TSTAT_WAIT_SLPはタスクが起床待ちであるかどうかを,TSTAT_WAIT_WOBJ
     107 *  はタスクが同期・通信オブジェクトに対する待ちであるか(言い換えると,
     108 *  同期通信オブジェクトの待ちキューにつながれているか)どうかを判別す
     109 *  る.また,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェクトの管理
     110 *  ブロックの共通部分(WOBJCB)の待ちキューにつながれているかどうかを
     111 *  判別する.
     112 *
     113 *  TSTAT_WAIT_SLPは,任意のタスク状態の中から,タスクが起床待ちである
     114 *  ことを判別できる.すなわち,TSTAT_WAITINGにより待ち状態であることを
     115 *  判別せずに,TSTAT_SLPだけを用いて起床待ち状態であることを判別できる.
     116 *  これを効率的に実現するために,TS_WAIT_SLPの値を,(0x00U << 3)ではな
     117 *  く(0x01U << 3)としている.そのため,タスクが時間経過待ち状態である
     118 *  ことを判別するためのTSTAT_WAIT_DLYを,TSTAT_WAIT_SLPと同様の方法で
     119 *  実現することはできない.
     120 */
     121#define TS_WAIT_MASK    (0x0fU << 3)    /* 待ち要因の取出しマスク */
    133122
    134123#define TSTAT_WAIT_SLP(tstat)           (((tstat) & TS_WAIT_MASK) == TS_WAIT_SLP)
     
    137126
    138127/*
    139  *  ‘Ò‚¿î•ñƒuƒƒbƒNiWINFOj‚Ì’è‹`
    140  *
    141  *  ƒ^ƒXƒN‚ª‘Ò‚¿ó‘Ԃ̊Ԃ́CTCB‚¨‚æ‚Ñ‚»‚Ìp_winfo‚ÅŽw‚³‚ê‚éWINFO‚ðŽŸ‚Ì
    142  *  ‚悤‚ɐݒ肵‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    143  *
    144  *  (a) TCB‚̃^ƒXƒNó‘Ô‚ð‘Ò‚¿ó‘ԁiTS_WAITINGj‚É‚·‚éD‚»‚̍ۂɁC‘Ò‚¿
    145  *  —vˆöiTS_WAIT_???j‚àÝ’è‚·‚éD
    146  *
    147  *  (b) ƒ^ƒCƒ€ƒAƒEƒg‚ðŠÄŽ‹‚·‚邽‚߂ɁCƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·‚éD
    148  *  “o˜^‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚́C‘Ò‚¿‚É“ü‚éƒT[ƒrƒXƒR[ƒ‹ˆ—ŠÖ”
    149  *  ‚̃[ƒJƒ‹•Ï”‚Æ‚µ‚ÄŠm•Û‚µC‚»‚ê‚ւ̃|ƒCƒ“ƒ^‚ðWINFO‚Ìp_tmevtb‚É‹L
    150  *  ‰¯‚·‚éDƒ^ƒCƒ€ƒAƒEƒg‚ÌŠÄŽ‹‚ª•K—v‚È‚¢ê‡i‰i‹v‘Ò‚¿‚̏ꍇj‚ɂ́C
    151  *  p_tmevtb‚ðNULL‚É‚·‚éD
    152  *
    153  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿ó‘Ԃ̏ꍇ‚ɂ́C•W€‚ÌWINFO‚É
    154  *  p_wobjcbƒtƒB[ƒ‹ƒh‚ð’ljÁ‚µ‚½\‘¢‘́iWINFO_WOBJCwait.h‚Å’è‹`j‚ðŽg
    155  *  ‚¤D‚Ü‚½CˆÈ‰º‚Ì(c)`(e)‚̐ݒè‚ðs‚¤•K—v‚ª‚ ‚éD“¯ŠúE’ʐMƒIƒuƒWƒF
    156  *  ƒNƒg‚ÉŠÖŒW‚µ‚È‚¢‘Ò‚¿i‹N°‘Ò‚¿CŽžŠÔŒo‰ß‘Ò‚¿j‚̏ꍇ‚ɂ́C(c)`(e)
    157  *  ‚Í•K—v‚È‚¢D
    158  *
    159  *  (c) TCB‚ð‘Ò‚¿‘Ώۂ̓¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    160 [‚ɂ‚Ȃ®D‘Ò
    161  *  ‚¿ƒLƒ
    162 [‚ɂ‚Ȃ®‚½‚߂ɁCtask_queue‚ðŽg‚¤D
    163  *
    164  *  (d) ‘Ò‚¿‘Ώۂ̓¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^‚ðC
    165  *  WINFO_WOBJ‚Ìp_wobjcb‚É‹L‰¯‚·‚éD
    166  *
    167  *  (e) ‘Ò‚¿‘Ώۂ̓¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ɉˑ¶‚µ‚Ä‹L‰¯‚·‚邱‚Æ‚ª•K—v‚È
    168  *  î•ñ‚ª‚ ‚éê‡‚ɂ́CWINFO_WOBJ‚É•K—v‚ȏî•ñ‚Ì‚½‚߂̃tƒB[ƒ‹ƒh‚ð’ljÁ
    169  *  ‚µ‚½\‘¢‘Ì‚ð’è‹`‚µCWINFO_WOBJ‚Ì‘ã‚í‚è‚É—p‚¢‚éD
    170  *
    171  *  ‘Ò‚¿ó‘Ô‚ð‰ðœ‚·‚éÛ‚ɂ́C‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚ɑ΂·‚é•Ô’l‚ðWINFO‚Ì
    172  *  wercd‚ɐݒ肷‚éDwercd‚ª•K—v‚È‚Ì‚Í‘Ò‚¿‰ðœˆÈ~‚Å‚ ‚é‚̂ɑ΂µ‚āC
    173  *  p_tmevtb‚Í‘Ò‚¿‰ðœŒã‚Í•K—v‚È‚¢‚½‚߁Cƒƒ‚ƒŠß–ñ‚Ì‚½‚ß‚É‹¤—p‘Ì‚ðŽg‚Á
    174  *  ‚Ä‚¢‚éD‚»‚Ì‚½‚߁Cwercd‚ÖƒGƒ‰[ƒR[ƒh‚ðÝ’è‚·‚é‚̂́Cƒ^ƒCƒ€ƒCƒxƒ“ƒg
    175  *  ƒuƒƒbƒN‚ð“o˜^‰ðœ‚µ‚½Œã‚É‚µ‚È‚¯‚ê‚΂Ȃç‚È‚¢D
     128 *  待ち情報ブロック(WINFO)の定義
     129 *
     130 *  タスクが待ち状態の間は,TCBおよびそのp_winfoで指されるWINFOを次の
     131 *  ように設定しなければならない.
     132 *
     133 *  (a) TCBのタスク状態を待ち状態(TS_WAITING)にする.その際に,待ち
     134 *  要因(TS_WAIT_???)も設定する.
     135 *
     136 *  (b) タイムアウトを監視するために,タイムイベントブロックを登録する.
     137 *  登録するタイムイベントブロックは,待ちに入るサービスコール処理関数
     138 *  のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記
     139 *  憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には,
     140 *  p_tmevtbをNULLにする.
     141 *
     142 *  同期・通信オブジェクトに対する待ち状態の場合には,標準のWINFOに
     143 *  p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)を使
     144 *  う.また,以下の(c)〜(e)の設定を行う必要がある.同期・通信オブジェ
     145 *  クトに関係しない待ち(起床待ち,時間経過待ち)の場合には,(c)〜(e)
     146 *  は必要ない.
     147 *
     148 *  (c) TCBを待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待
     149 *  ちキューにつなぐために,task_queueを使う.
     150 *
     151 *  (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを,
     152 *  WINFO_WOBJのp_wobjcbに記憶する.
     153 *
     154 *  (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な
     155 *  情報がある場合には,WINFO_WOBJに必要な情報のためのフィールドを追加
     156 *  した構造体を定義し,WINFO_WOBJの代わりに用いる.
     157 *
     158 *  待ち状態を解除する際には,待ち解除したタスクに対する返値をWINFOの
     159 *  wercdに設定する.wercdが必要なのは待ち解除以降であるのに対して,
     160 *  p_tmevtbは待ち解除後は必要ないため,メモリ節約のために共用体を使っ
     161 *  ている.そのため,wercdへエラーコードを設定するのは,タイムイベント
     162 *  ブロックを登録解除した後にしなければならない.
    176163 */
    177164typedef union waiting_information {
    178         ER              wercd;                  /* ‘Ò‚¿‰ðœŽž‚̃Gƒ‰[ƒR[ƒh */
    179         TMEVTB  *p_tmevtb;              /* ‘Ò‚¿ó‘Ô—p‚̃^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN */
     165        ER              wercd;                  /* 待ち解除時のエラーコード */
     166        TMEVTB  *p_tmevtb;              /* 待ち状態用のタイムイベントブロック */
    180167} WINFO;
    181168
    182169/*
    183  *  ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN
    184  *
    185  *  ƒ^ƒXƒN‚ÉŠÖ‚·‚éî•ñ‚ðC’l‚ª•Ï‚í‚ç‚È‚¢‚½‚ß‚ÉROM‚É’u‚¯‚é•”•ªiƒ^ƒXƒN
    186  *  ‰Šú‰»ƒuƒƒbƒNj‚ƁC’l‚ª•Ï‰»‚·‚邽‚ß‚ÉRAM‚É’u‚©‚È‚¯‚ê‚΂Ȃç‚È‚¢•”
    187  *  •ªiƒ^ƒXƒNŠÇ—ƒuƒƒbƒNCTCBj‚É•ª—£‚µCTCB“à‚ɑΉž‚·‚éƒ^ƒXƒN‰Šú‰»
    188  *  ƒuƒƒbƒN‚ðŽw‚·ƒ|ƒCƒ“ƒ^‚ð“ü‚ê‚éDƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN“à‚ɑΉž‚·‚é
    189  *  TCB‚ðŽw‚·ƒ|ƒCƒ“ƒ^‚ð“ü‚ê‚é•û–@‚Ì•û‚ªCRAM‚̐ߖñ‚ÌŠÏ“_‚©‚ç‚Í–]‚Ü‚µ‚¢
    190  *  ‚ªCŽÀsŒø—¦‚ªˆ«‚­‚Ȃ邽‚߂ɍ̗p‚µ‚Ä‚¢‚È‚¢D‘¼‚̃IƒuƒWƒFƒNƒg‚ɂ‚¢
    191  *  ‚Ä‚à“¯—l‚Ɉµ‚¤D
    192  *
    193  *  ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚ɂ́CDEF_TEX‚Å’è‹`‚³‚ê‚éƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`
    194  *  ƒ“‚ÉŠÖ‚·‚éî•ñ‚àŠÜ‚ށD
     170 *  タスク初期化ブロック
     171 *
     172 *  タスクに関する情報を,値が変わらないためにROMに置ける部分(タスク
     173 *  初期化ブロック)と,値が変化するためにRAMに置かなければならない部
     174 *  分(タスク管理ブロック,TCB)に分離し,TCB内に対応するタスク初期化
     175 *  ブロックを指すポインタを入れる.タスク初期化ブロック内に対応する
     176 *  TCBを指すポインタを入れる方法の方が,RAMの節約の観点からは望ましい
     177 *  が,実行効率が悪くなるために採用していない.他のオブジェクトについ
     178 *  ても同様に扱う.
     179 *
     180 *  タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ
     181 *  ンに関する情報も含む.
    195182 */
    196183typedef struct task_initialization_block {
    197         ATR                     tskatr;                 /* ƒ^ƒXƒN‘®« */
    198         intptr_t        exinf;                  /* ƒ^ƒXƒN‚ÌŠg’£î•ñ */
    199         TASK            task;                   /* ƒ^ƒXƒN‚Ì‹N“®”Ô’n */
    200         uint_t          ipriority;              /* ƒ^ƒXƒN‚Ì‹N“®Žž—Dæ“xi“à•”•\Œ»j */
     184        ATR                     tskatr;                 /* タスク属性 */
     185        intptr_t        exinf;                  /* タスクの拡張情報 */
     186        TASK            task;                   /* タスクの起動番地 */
     187        uint_t          ipriority;              /* タスクの起動時優先度(内部表現) */
    201188
    202189#ifdef USE_TSKINICTXB
    203         TSKINICTXB      tskinictxb;             /* ƒ^ƒXƒN‰Šú‰»ƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒN */
     190        TSKINICTXB      tskinictxb;             /* タスク初期化コンテキストブロック */
    204191#else /* USE_TSKINICTXB */
    205         SIZE            stksz;                  /* ƒXƒ^ƒbƒN—̈æ‚̃TƒCƒYiŠÛ‚ß‚½’lj */
    206         void            *stk;                   /* ƒXƒ^ƒbƒN—̈æ‚̐擪”Ô’n */
     192        SIZE            stksz;                  /* スタック領域のサイズ(丸めた値) */
     193        void            *stk;                   /* スタック領域の先頭番地 */
    207194#endif /* USE_TSKINICTXB */
    208195
    209         ATR                     texatr;                 /* ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‘®« */
    210         TEXRTN          texrtn;                 /* ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®”Ô’n */
     196        ATR                     texatr;                 /* タスク例外処理ルーチン属性 */
     197        TEXRTN          texrtn;                 /* タスク例外処理ルーチンの起動番地 */
    211198} TINIB;
    212199
    213200/*
    214  *  TCB’†‚̃tƒB[ƒ‹ƒh‚̃rƒbƒg•‚Ì’è‹`
    215  *
    216  *  ƒvƒƒZƒbƒT‚É‚æ‚Á‚ẮCTCB’†‚̃tƒB[ƒ‹ƒh‚̃rƒbƒg•‚сƒ‚ƒŠŽg—p—Ê‚Æ
    217  *  «”\‚ªƒgƒŒ[ƒhƒIƒt‚ɂȂ邽‚߁Cƒ^[ƒQƒbƒgˆË‘¶‚ɃtƒB[ƒ‹ƒh‚̃rƒbƒg•
    218  *  ‚ð•ÏX‚·‚邱‚Æ‚ð‹–‚µ‚Ä‚¢‚éD
     201 *  TCB中のフィールドのビット幅の定義
     202 *
     203 *  プロセッサによっては,TCB中のフィールドのビット幅でメモリ使用量と
     204 *  性能がトレードオフになるため,ターゲット依存にフィールドのビット幅
     205 *  を変更することを許している.
    219206 */
    220207#ifndef TBIT_TCB_PRIORITY
    221 #define TBIT_TCB_PRIORITY               8               /* priorityƒtƒB[ƒ‹ƒh‚̃rƒbƒg• */
     208#define TBIT_TCB_PRIORITY               8               /* priorityフィールドのビット幅 */
    222209#endif /* TBIT_TCB_PRIORITY */
    223210
    224211/*
    225  *  ƒ^ƒXƒNŠÇ—ƒuƒƒbƒNiTCBj
    226  *
    227  *  ASPƒJ[ƒlƒ‹‚ł́Cƒ^ƒXƒN‚Ì‹N“®—v‹ƒLƒ
    228 [ƒCƒ“ƒO”‚̍őå’liTMAX_ACTCNTj
    229  *  ‚Æ‹N°—v‹ƒLƒ
    230 [ƒCƒ“ƒO”‚̍őå’liTMAX_WUPCNTj‚Í1‚ɌŒ肳‚ê‚Ä‚¢‚é
    231  *  ‚½‚߁CƒLƒ
    232 [ƒCƒ“ƒO‚³‚ê‚Ä‚¢‚é‚©‚Ç‚¤‚©‚̐^‹U’l‚Å•\Œ»‚·‚邱‚Æ‚ª‚Å‚«‚éD
    233  *  ‚Ü‚½C‹­§‘Ò‚¿—v‹ƒlƒXƒg”‚̍őå’liTMAX_SUSCNTj‚ª1‚ɌŒ肳‚ê‚Ä‚¢
    234  *  ‚é‚̂ŁC‹­§‘Ò‚¿—v‹ƒlƒXƒg”isuscntj‚Í•K—v‚È‚¢D
    235  *
    236  *  TCB‚Ì‚¢‚­‚‚©‚̃tƒB[ƒ‹ƒh‚́C“Á’è‚̃^ƒXƒNó‘Ô‚Å‚Ì‚Ý—LŒø‚È’l‚ð•ÛŽ‚µC
    237  *  ‚»‚êˆÈŠO‚̏ꍇ‚Í’l‚ª•ÛØ‚³‚ê‚È‚¢i‚æ‚Á‚āCŽQÆ‚µ‚Ä‚Í‚È‚ç‚È‚¢jDŠe
    238  *  ƒtƒB[ƒ‹ƒh‚ª—LŒø‚È’l‚ð•ÛŽ‚·‚éðŒ‚ÍŽŸ‚Ì’Ê‚èD
    239  *
    240  *  E‰Šú‰»Œã‚͏í‚É—LŒøF
    241  *              p_tinibCtstatCactque
    242  *  E‹xŽ~ó‘ԈȊO‚Å—LŒøi‹xŽ~ó‘Ԃł͏‰Šú’l‚É‚È‚Á‚Ä‚¢‚éjF
    243  *              priorityCwupqueCenatexCtexptn
    244  *  E‘Ò‚¿ó‘ԁi“ñd‘Ò‚¿ó‘Ô‚ðŠÜ‚ށj‚Å—LŒøF
     212 *  タスク管理ブロック(TCB)
     213 *
     214 *  ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT)
     215 *  と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている
     216 *  ため,キューイングされているかどうかの真偽値で表現することができる.
     217 *  また,強制待ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい
     218 *  るので,強制待ち要求ネスト数(suscnt)は必要ない.
     219 *
     220 *  TCBのいくつかのフィールドは,特定のタスク状態でのみ有効な値を保持し,
     221 *  それ以外の場合は値が保証されない(よって,参照してはならない).各
     222 *  フィールドが有効な値を保持する条件は次の通り.
     223 *
     224 *  ・初期化後は常に有効:
     225 *              p_tinib,tstat,actque
     226 *  ・休止状態以外で有効(休止状態では初期値になっている):
     227 *              priority,wupque,enatex,texptn
     228 *  ・待ち状態(二重待ち状態を含む)で有効:
    245229 *              p_winfo
    246  *  EŽÀs‚Å‚«‚éó‘Ô‚Æ“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿ó‘Ô‚Å—LŒøF
     230 *  ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効:
    247231 *              task_queue
    248  *  EŽÀs‰Â”\ó‘ԁC‘Ò‚¿ó‘ԁC‹­§‘Ò‚¿ó‘ԁC“ñd‘Ò‚¿ó‘Ô‚Å—LŒøF
     232 *  ・実行可能状態,待ち状態,強制待ち状態,二重待ち状態で有効:
    249233 *              tskctxb
    250234 */
    251235typedef struct task_control_block {
    252         QUEUE                   task_queue;             /* ƒ^ƒXƒNƒLƒ
    253 [ */
    254         const TINIB             *p_tinib;               /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
     236        QUEUE                   task_queue;             /* タスクキュー */
     237        const TINIB             *p_tinib;               /* 初期化ブロックへのポインタ */
    255238
    256239#ifdef UINT8_MAX
    257         uint8_t                 tstat;                  /* ƒ^ƒXƒNó‘ԁi“à•”•\Œ»j*/
     240        uint8_t                 tstat;                  /* タスク状態(内部表現)*/
    258241#else /* UINT8_MAX */
    259         BIT_FIELD_UINT  tstat : 8;              /* ƒ^ƒXƒNó‘ԁi“à•”•\Œ»j*/
     242        BIT_FIELD_UINT  tstat : 8;              /* タスク状態(内部表現)*/
    260243#endif /* UINT8_MAX */
    261244#if defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8)
    262         uint8_t                 priority;               /* Œ»Ý‚Ì—Dæ“xi“à•”•\Œ»j*/
     245        uint8_t                 priority;               /* 現在の優先度(内部表現)*/
    263246#else /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */
    264247        BIT_FIELD_UINT  priority : TBIT_TCB_PRIORITY;
    265                                                                         /* Œ»Ý‚Ì—Dæ“xi“à•”•\Œ»j*/
     248                                                                        /* 現在の優先度(内部表現)*/
    266249#endif /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */
    267         BIT_FIELD_BOOL  actque : 1;             /* ‹N“®—v‹ƒLƒ
    268 [ƒCƒ“ƒO */
    269         BIT_FIELD_BOOL  wupque : 1;             /* ‹N°—v‹ƒLƒ
    270 [ƒCƒ“ƒO */
    271         BIT_FIELD_BOOL  enatex : 1;             /* ƒ^ƒXƒN—áŠOˆ—‹–‰Âó‘Ô */
    272 
    273         TEXPTN                  texptn;                 /* •Û—¯—áŠO—vˆö */
    274         WINFO                   *p_winfo;               /* ‘Ò‚¿î•ñƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
    275         TSKCTXB                 tskctxb;                /* ƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒgƒuƒƒbƒN */
     250        BIT_FIELD_BOOL  actque : 1;             /* 起動要求キューイング */
     251        BIT_FIELD_BOOL  wupque : 1;             /* 起床要求キューイング */
     252        BIT_FIELD_BOOL  enatex : 1;             /* タスク例外処理許可状態 */
     253
     254        TEXPTN                  texptn;                 /* 保留例外要因 */
     255        WINFO                   *p_winfo;               /* 待ち情報ブロックへのポインタ */
     256        TSKCTXB                 tskctxb;                /* タスクコンテキストブロック */
    276257} TCB;
    277258
    278259/*
    279  *  ŽÀsó‘Ԃ̃^ƒXƒN
    280  *
    281  *  ŽÀsó‘Ԃ̃^ƒXƒNiƒvƒƒZƒbƒT‚ªƒRƒ“ƒeƒLƒXƒg‚ðŽ‚Á‚Ä‚¢‚éƒ^ƒXƒNj‚Ì
    282  *  TCB‚ðŽw‚·ƒ|ƒCƒ“ƒ^DŽÀsó‘Ԃ̃^ƒXƒN‚ª‚È‚¢ê‡‚ÍNULL‚É‚·‚éD
    283  *
    284  *  ƒT[ƒrƒXƒR[ƒ‹‚̏ˆ—’†‚ŁCŽ©ƒ^ƒXƒNiƒT[ƒrƒXƒR[ƒ‹‚ðŒÄ‚яo‚µ‚½ƒ^ƒX
    285  *  ƒNj‚ÉŠÖ‚·‚éî•ñ‚ðŽQÆ‚·‚éê‡‚Íp_runtsk‚ðŽg‚¤Dp_runtsk‚ð‘‚«Š·‚¦
    286  *  ‚é‚̂́CƒfƒBƒXƒpƒbƒ`ƒƒi‚Ə‰Šú‰»ˆ—j‚Ì‚Ý‚Å‚ ‚éD
     260 *  実行状態のタスク
     261 *
     262 *  実行状態のタスク(=プロセッサがコンテキストを持っているタスク)の
     263 *  TCBを指すポインタ.実行状態のタスクがない場合はNULLにする.
     264 *
     265 *  サービスコールの処理中で,自タスク(サービスコールを呼び出したタス
     266 *  ク)に関する情報を参照する場合はp_runtskを使う.p_runtskを書き換え
     267 *  るのは,ディスパッチャ(と初期化処理)のみである.
    287268 */
    288269extern TCB      *p_runtsk;
    289270
    290271/*
    291  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN
    292  *
    293  *  ŽÀs‚Å‚«‚éƒ^ƒXƒN‚Ì’†‚ōō‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ÌTCB‚ðŽw‚·ƒ|ƒCƒ“ƒ^DŽÀ
    294  *  s‚Å‚«‚éƒ^ƒXƒN‚ª‚È‚¢ê‡‚ÍNULL‚É‚·‚éD
    295  *
    296  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘ԂȂǁCƒfƒBƒXƒpƒbƒ`‚ª•Û—¯‚³‚ê‚Ä‚¢‚éŠÔ‚Íp_runtsk
    297  *  ‚ƈê’v‚µ‚Ä‚¢‚é‚Æ‚ÍŒÀ‚ç‚È‚¢D
     272 *  最高優先順位のタスク
     273 *
     274 *  実行できるタスクの中で最高優先順位のタスクのTCBを指すポインタ.実
     275 *  行できるタスクがない場合はNULLにする.
     276 *
     277 *  ディスパッチ禁止状態など,ディスパッチが保留されている間はp_runtsk
     278 *  と一致しているとは限らない.
    298279 */
    299280extern TCB      *p_schedtsk;
    300281
    301282/*
    302  *  ƒfƒBƒXƒpƒbƒ`^ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‹N“®—v‹ƒtƒ‰ƒO
    303  *
    304  *  Š„ž‚݃nƒ“ƒhƒ‰^CPU—áŠOƒnƒ“ƒhƒ‰‚̏oŒûˆ—‚ɁCƒfƒBƒXƒpƒbƒ`‚Ü‚½‚Í
    305  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®‚ð—v‹‚·‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     283 *  ディスパッチ/タスク例外処理ルーチン起動要求フラグ
     284 *
     285 *  割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは
     286 *  タスク例外処理ルーチンの起動を要求することを示すフラグ.
    306287 */
    307288extern bool_t   reqflg;
    308289
    309290/*
    310  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô
    311  *
    312  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     291 *  割込み優先度マスク全解除状態
     292 *
     293 *  割込み優先度マスク全解除状態であることを示すフラグ.
    313294 */
    314295extern bool_t   ipmflg;
    315296
    316297/*
    317  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô
    318  *
    319  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Å‚ ‚邱‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     298 *  ディスパッチ禁止状態
     299 *
     300 *  ディスパッチ禁止状態であることを示すフラグ.
    320301 */
    321302extern bool_t   disdsp;
    322303
    323304/*
    324  *  ƒ^ƒXƒNƒfƒBƒXƒpƒbƒ`‰Â”\ó‘Ô
    325  *
    326  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒN‘S‰ðœó‘Ô‚Å‚ ‚èCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ô‚Å‚ ‚éiƒfƒB
    327  *  ƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Å‚È‚¢j‚±‚Æ‚ðŽ¦‚·ƒtƒ‰ƒOD
     305 *  タスクディスパッチ可能状態
     306 *
     307 *  割込み優先度マスク全解除状態であり,ディスパッチ許可状態である(ディ
     308 *  スパッチ禁止状態でない)ことを示すフラグ.
    328309 */
    329310extern bool_t   dspflg;
    330311
    331312/*
    332  *  ƒŒƒfƒBƒLƒ
    333 [
    334  *
    335  *  ƒŒƒfƒBƒLƒ
    336 [‚́CŽÀs‚Å‚«‚éó‘Ԃ̃^ƒXƒN‚ðŠÇ—‚·‚邽‚߂̃Lƒ
    337 [‚Å‚ ‚éD
    338  *  ŽÀsó‘Ԃ̃^ƒXƒN‚àŠÇ—‚µ‚Ä‚¢‚邽‚߁CƒŒƒfƒBiŽÀs‰Â”\jƒLƒ
    339 [‚Æ‚¢‚¤
    340  *  –¼Ì‚͐³Šm‚Å‚Í‚È‚¢‚ªCƒŒƒfƒBƒLƒ
    341 [‚Æ‚¢‚¤–¼Ì‚ª’è’
    342 ‚µ‚Ä‚¢‚邽‚߁C‚±
    343  *  ‚Ì–¼Ì‚ŌĂԂ±‚Æ‚É‚·‚éD
    344  *
    345  *  ƒŒƒfƒBƒLƒ
    346 [‚́C—Dæ“x‚²‚Ƃ̃^ƒXƒNƒLƒ
    347 [‚ō\¬‚³‚ê‚Ä‚¢‚éDƒ^ƒXƒN‚Ì
    348  *  TCB‚́CŠY“–‚·‚é—Dæ“x‚̃Lƒ
    349 [‚É“o˜^‚³‚ê‚éD
     313 *  レディキュー
     314 *
     315 *  レディキューは,実行できる状態のタスクを管理するためのキューである.
     316 *  実行状態のタスクも管理しているため,レディ(実行可能)キューという
     317 *  名称は正確ではないが,レディキューという名称が定着しているため,こ
     318 *  の名称で呼ぶことにする.
     319 *
     320 *  レディキューは,優先度ごとのタスクキューで構成されている.タスクの
     321 *  TCBは,該当する優先度のキューに登録される.
    350322 */
    351323extern QUEUE    ready_queue[TNUM_TPRI];
    352324
    353325/*
    354  *  ƒŒƒfƒBƒLƒ
    355 [ƒT[ƒ`‚Ì‚½‚߂̃rƒbƒgƒ}ƒbƒv
    356  *
    357  *  ƒŒƒfƒBƒLƒ
    358 [‚̃T[ƒ`‚ðŒø—¦‚æ‚­s‚¤‚½‚߂ɁC—Dæ“x‚²‚Ƃ̃^ƒXƒNƒLƒ
    359 [
    360  *  ‚Ƀ^ƒXƒN‚ª“ü‚Á‚Ä‚¢‚é‚©‚Ç‚¤‚©‚ðŽ¦‚·ƒrƒbƒgƒ}ƒbƒv‚ð—pˆÓ‚µ‚Ä‚¢‚éDƒrƒb
    361  *  ƒgƒ}ƒbƒv‚ðŽg‚¤‚±‚ƂŁCƒƒ‚ƒŠƒAƒNƒZƒX‚̉ñ”‚ðŒ¸‚ç‚·‚±‚Æ‚ª‚Å‚«‚邪C
    362  *  ƒrƒbƒg‘€ì–½—ß‚ª[ŽÀ‚µ‚Ä‚¢‚È‚¢ƒvƒƒZƒbƒT‚ŁC—Dæ“x‚Ì’iŠK”‚ª­‚È‚¢
    363  *  ê‡‚ɂ́Cƒrƒbƒgƒ}ƒbƒv‘€ì‚̃I[ƒo[ƒwƒbƒh‚Ì‚½‚߂ɁC‹t‚ÉŒø—¦‚ª—Ž‚¿
    364  *  ‚é‰Â”\«‚à‚ ‚éD
    365  *
    366  *  —Dæ“x‚ª16’iŠK‚Å‚ ‚邱‚Æ‚ð‰¼’è‚µ‚Ä‚¢‚邽‚߁Cuint16_tŒ^‚Æ‚µ‚Ä‚¢‚éD
     326 *  レディキューサーチのためのビットマップ
     327 *
     328 *  レディキューのサーチを効率よく行うために,優先度ごとのタスクキュー
     329 *  にタスクが入っているかどうかを示すビットマップを用意している.ビッ
     330 *  トマップを使うことで,メモリアクセスの回数を減らすことができるが,
     331 *  ビット操作命令が充実していないプロセッサで,優先度の段階数が少ない
     332 *  場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち
     333 *  る可能性もある.
     334 *
     335 *  優先度が16段階であることを仮定しているため,uint16_t型としている.
    367336 */
    368337extern uint16_t ready_primap;
    369338
    370339/*
    371  *  Žg—p‚µ‚Ä‚¢‚È‚¢TCB‚̃ŠƒXƒg
     340 *  使用していないTCBのリスト
    372341 */
    373342extern QUEUE    free_tcb;
    374343
    375344/*
    376  *  ƒ^ƒXƒNID‚̍őå’likernel_cfg.cj
     345 *  タスクIDの最大値(kernel_cfg.c)
    377346 */
    378347extern const ID tmax_tskid;
     
    380349
    381350/*
    382  *  ƒ^ƒXƒN‰Šú‰»ƒuƒƒbƒN‚̃GƒŠƒAikernel_cfg.cj
     351 *  タスク初期化ブロックのエリア(kernel_cfg.c)
    383352 */
    384353extern const TINIB      tinib_table[];
     
    386355
    387356/*
    388  *  ƒ^ƒXƒN¶¬‡˜ƒe[ƒuƒ‹ikernel_cfg.cj
     357 *  タスク生成順序テーブル(kernel_cfg.c)
    389358 */
    390359extern const ID torder_table[];
    391360
    392361/*
    393  *  TCB‚̃GƒŠƒAikernel_cfg.cj
     362 *  TCBのエリア(kernel_cfg.c)
    394363 */
    395364extern TCB      tcb_table[];
    396365
    397366/*
    398  *  ƒ^ƒXƒN‚̐”
     367 *  タスクの数
    399368 */
    400369#define tnum_tsk        ((uint_t)(tmax_tskid - TMIN_TSKID + 1))
     
    402371
    403372/*
    404  *  ƒ^ƒXƒNID‚©‚çTCB‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     373 *  タスクIDからTCBを取り出すためのマクロ
    405374 */
    406375#define INDEX_TSK(tskid)        ((uint_t)((tskid) - TMIN_TSKID))
     
    409378
    410379/*
    411  *  TCB‚©‚çƒ^ƒXƒNID‚ðŽæ‚èo‚·‚½‚߂̃}ƒNƒ
     380 *  TCBからタスクIDを取り出すためのマクロ
    412381 */
    413382#define TSKID(p_tcb)    ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID))
    414383
    415384/*
    416  *  ƒ^ƒXƒNŠÇ—ƒ‚ƒWƒ
    417 [ƒ‹‚̏‰Šú‰»
     385 *  タスク管理モジュールの初期化
    418386 */
    419387extern void     initialize_task(void);
    420388
    421389/*
    422  *  Å‚—Dæ‡ˆÊƒ^ƒXƒN‚̃T[ƒ`
    423  *
    424  *  ƒŒƒfƒBƒLƒ
    425 [’†‚̍ō‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðƒT[ƒ`‚µC‚»‚ÌTCB‚ւ̃|ƒCƒ“ƒ^
    426  *  ‚ð•Ô‚·DƒŒƒfƒBƒLƒ
    427 [‚ª‹ó‚̏ꍇ‚ɂ́C‚±‚̊֐”‚ðŒÄ‚яo‚µ‚Ä‚Í‚È‚ç‚È‚¢D
     390 *  最高優先順位タスクのサーチ
     391 *
     392 *  レディキュー中の最高優先順位のタスクをサーチし,そのTCBへのポインタ
     393 *  を返す.レディキューが空の場合には,この関数を呼び出してはならない.
    428394 */
    429395extern TCB      *search_schedtsk(void);
    430396
    431397/*
    432  *  ŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
    433  *
    434  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ðƒŒƒfƒBƒLƒ
    435 [‚É‘}“ü‚·‚éDƒŒƒfƒBƒLƒ
    436 [‚É‘}“ü
    437  *  ‚µ‚½ƒ^ƒXƒN‚Ì—Dæ“x‚ªCÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚Ì—Dæ“x‚æ‚è‚à‚‚¢ê‡‚́C
    438  *  Å‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚µCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ô‚Å‚ ‚ê‚Îtrue‚ð•Ô
    439  *  ‚·D‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
     398 *  実行できる状態への遷移
     399 *
     400 *  p_tcbで指定されるタスクをレディキューに挿入する.レディキューに挿入
     401 *  したタスクの優先度が,最高優先順位のタスクの優先度よりも高い場合は,
     402 *  最高優先順位のタスクを更新し,ディスパッチ許可状態であればtrueを返
     403 *  す.そうでない場合はfalseを返す.
    440404 */
    441405extern bool_t   make_runnable(TCB *p_tcb);
    442406
    443407/*
    444  *  ŽÀs‚Å‚«‚éó‘Ô‚©‚瑼‚̏ó‘Ô‚Ö‚Ì‘JˆÚ
    445  *
    446  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ðƒŒƒfƒBƒLƒ
    447 [‚©‚çíœ‚·‚éDp_tcb‚ÅŽw’肵‚½
    448  *  ƒ^ƒXƒN‚ªÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN‚Å‚ ‚Á‚½ê‡‚ɂ́CÅ‚—Dæ‡ˆÊ‚̃^ƒXƒN
    449  *  ‚ðÝ’肵‚È‚¨‚µCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ô‚Å‚ ‚ê‚Îtrue‚ð•Ô‚·D‚»‚¤‚Å‚È‚¢
    450  *  ê‡‚Ífalse‚ð•Ô‚·Dƒ^ƒXƒN‚̏ó‘Ԃ͍XV‚µ‚È‚¢D
     408 *  実行できる状態から他の状態への遷移
     409 *
     410 *  p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した
     411 *  タスクが最高優先順位のタスクであった場合には,最高優先順位のタスク
     412 *  を設定しなおし,ディスパッチ許可状態であればtrueを返す.そうでない
     413 *  場合はfalseを返す.タスクの状態は更新しない.
    451414 */
    452415extern bool_t   make_non_runnable(TCB *p_tcb);
    453416
    454417/*
    455  *  ‹xŽ~ó‘Ô‚Ö‚Ì‘JˆÚ
    456  *
    457  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚̏ó‘Ô‚ð‹xŽ~ó‘Ô‚Æ‚·‚éD‚Ü‚½Cƒ^ƒXƒN‚Ì‹N“®
    458  *  Žž‚ɏ‰Šú‰»‚·‚ׂ«•Ï”‚̏‰Šú‰»‚ƁCƒ^ƒXƒN‹N“®‚Ì‚½‚߂̃Rƒ“ƒeƒLƒXƒg‚ðÝ
    459  *  ’è‚·‚éD
     418 *  休止状態への遷移
     419 *
     420 *  p_tcbで指定されるタスクの状態を休止状態とする.また,タスクの起動
     421 *  時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設
     422 *  定する.
    460423 */
    461424extern void     make_dormant(TCB *p_tcb);
    462425
    463426/*
    464  *  ‹xŽ~ó‘Ô‚©‚çŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
    465  *
    466  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚̏ó‘Ô‚ð‹xŽ~ó‘Ô‚©‚çŽÀs‚Å‚«‚éó‘Ô‚Æ‚·‚éD
    467  *  ŽÀs‚Å‚«‚éó‘Ô‚É‘JˆÚ‚µ‚½ƒ^ƒXƒN‚ւ̃fƒBƒXƒpƒbƒ`‚ª•K—v‚ȏꍇ‚ÍtrueC
    468  *  ‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
     427 *  休止状態から実行できる状態への遷移
     428 *
     429 *  p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする.
     430 *  実行できる状態に遷移したタスクへのディスパッチが必要な場合はtrue,
     431 *  そうでない場合はfalseを返す.
    469432 */
    470433extern bool_t   make_active(TCB *p_tcb);
    471434
    472435/*
    473  *  ƒ^ƒXƒN‚Ì—Dæ“x‚̕ύX
    474  *
    475  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚Ì—Dæ“x‚ðnewprii“à•”•\Œ»j‚ɕύX‚·‚éD‚Ü‚½C
    476  *  •K—v‚ȏꍇ‚ɂ͍ō‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ðXV‚µCƒfƒBƒXƒpƒbƒ`‹–‰Âó‘Ô‚Å
    477  *  ‚ ‚ê‚Îtrue‚ð•Ô‚·D‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
     436 *  タスクの優先度の変更
     437 *
     438 *  p_tcbで指定されるタスクの優先度をnewpri(内部表現)に変更する.また,
     439 *  必要な場合には最高優先順位のタスクを更新し,ディスパッチ許可状態で
     440 *  あればtrueを返す.そうでない場合はfalseを返す.
    478441 */
    479442extern bool_t   change_priority(TCB *p_tcb, uint_t newpri);
    480443
    481444/*
    482  *  ƒŒƒfƒBƒLƒ
    483 [‚̉ñ“]
    484  *
    485  *  ƒŒƒfƒBƒLƒ
    486 [’†‚́Cpri‚ÅŽw’肳‚ê‚é—Dæ“x‚̃^ƒXƒNƒLƒ
    487 [‚ð‰ñ“]‚³‚¹‚éD
    488  *  ‚Ü‚½C•K—v‚ȏꍇ‚ɂ͍ō‚—Dæ‡ˆÊ‚̃^ƒXƒN‚ð•ÏX‚µCƒfƒBƒXƒpƒbƒ`‚ª•Û
    489  *  —¯‚³‚ê‚Ä‚¢‚È‚¯‚ê‚Îtrue‚ð•Ô‚·D‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
     445 *  レディキューの回転
     446 *
     447 *  レディキュー中の,priで指定される優先度のタスクキューを回転させる.
     448 *  また,必要な場合には最高優先順位のタスクを変更し,ディスパッチが保
     449 *  留されていなければtrueを返す.そうでない場合はfalseを返す.
    490450 */
    491451extern bool_t   rotate_ready_queue(uint_t pri);
    492452
    493453/*
    494  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚̌ďo‚µ
    495  *
    496  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·DŒÄ‚яo‚·‘O‚ɁCŽÀsó‘Ԃ̃^ƒXƒN‚Ì
    497  *  •Û—¯—áŠO—vˆö‚ðƒNƒŠƒA‚µCƒ^ƒXƒN—áŠOˆ—‹ÖŽ~ó‘Ô‚É‚µCCPUƒƒbƒN‚ð‰ð
    498  *  œ‚·‚éD
    499  *
    500  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚©‚ç–ß‚é‚ƁC‚Ü‚¸CPUƒƒbƒNó‘Ô‚É–ß‚µC‚»‚ÌŠÔ
    501  *  ‚É•Û—¯—áŠO—vˆö‚ª0‚Å‚È‚­‚È‚Á‚Ä‚¢‚ê‚΁CÄ‚у^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚ð
    502  *  ŒÄ‚яo‚·D•Û—¯—áŠO—vˆö‚ª0‚̏ꍇ‚ɂ́C—áŠOˆ—‹–‰Âó‘Ô‚É‚µ‚Ċ֐”‚©
    503  *  ‚烊ƒ^[ƒ“‚·‚éD
    504  *
    505  *  ‚±‚̊֐”‚́CŽÀsó‘Ԃ̃^ƒXƒN‚ªCƒ^ƒXƒN—áŠOˆ—‹–‰Âó‘ԁienatex‚ª
    506  *  truej‚ŁC•Û—¯—áŠO—vˆö‚ª0‚Å‚È‚¢itexptn‚ª0‚Å‚È‚¢jê‡‚ɌĂяo‚·‚±
    507  *  ‚Æ‚ð‘z’肵‚Ä‚¢‚éD‚±‚̊֐”‚́CCPUƒƒbƒNó‘ԂŌĂяo‚³‚È‚¯‚ê‚΂Ȃç
    508  *  ‚È‚¢D
     454 *  タスク例外処理ルーチンの呼出し
     455 *
     456 *  タスク例外処理ルーチンを呼び出す.呼び出す前に,実行状態のタスクの
     457 *  保留例外要因をクリアし,タスク例外処理禁止状態にし,CPUロックを解
     458 *  除する.
     459 *
     460 *  タスク例外処理ルーチンから戻ると,まずCPUロック状態に戻し,その間
     461 *  に保留例外要因が0でなくなっていれば,再びタスク例外処理ルーチンを
     462 *  呼び出す.保留例外要因が0の場合には,例外処理許可状態にして関数か
     463 *  らリターンする.
     464 *
     465 *  この関数は,実行状態のタスクが,タスク例外処理許可状態(enatexが
     466 *  true)で,保留例外要因が0でない(texptnが0でない)場合に呼び出すこ
     467 *  とを想定している.この関数は,CPUロック状態で呼び出さなければなら
     468 *  ない.
    509469 */
    510470extern void     call_texrtn(void);
    511471
    512472/*
    513  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®
    514  *
    515  *  ŽÀsó‘Ԃ̃^ƒXƒN‚ªƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì‹N“®ðŒ‚ð–ž‚½‚µ‚Ä‚¢‚ê‚΁C
    516  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·DCPU—áŠOˆ—ƒ‹[ƒ`ƒ“‚ðŒÄ‚яo‚·Žž
    517  *  ‚́CˆêŽž“I‚ÉCPUƒƒbƒN‚ð‰ðœ‚·‚éD
    518  *
    519  *  ‚±‚̊֐”‚́CƒfƒBƒXƒpƒbƒ`ƒƒ‚⊄ž‚݃nƒ“ƒhƒ‰^CPU—áŠOƒnƒ“ƒhƒ‰‚̏oŒû
    520  *  ˆ—‚©‚çŒÄ‚яo‚³‚ê‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD‚±‚̊֐”‚́CCPUƒƒbƒNó‘Ô
    521  *  ‚ŌĂяo‚³‚È‚¯‚ê‚΂Ȃç‚È‚¢D
    522  *
    523  *  ŽÀsŒø—¦‚ðã‚°‚邽‚߂ɁC‚±‚̊֐”‚ðƒ^[ƒQƒbƒgˆË‘¶•”‚Å‹Lq‚µ‚Ä‚à‚æ‚¢D
    524  *  ‚»‚̏ꍇ‚ɂ́COMIT_CALLTEX‚ðƒ}ƒNƒ’è‹`‚·‚éD
     473 *  タスク例外処理ルーチンの起動
     474 *
     475 *  実行状態のタスクがタスク例外処理ルーチンの起動条件を満たしていれば,
     476 *  タスク例外処理ルーチンを呼び出す.CPU例外処理ルーチンを呼び出す時
     477 *  は,一時的にCPUロックを解除する.
     478 *
     479 *  この関数は,ディスパッチャや割込みハンドラ/CPU例外ハンドラの出口
     480 *  処理から呼び出されることを想定している.この関数は,CPUロック状態
     481 *  で呼び出さなければならない.
     482 *
     483 *  実行効率を上げるために,この関数をターゲット依存部で記述してもよい.
     484 *  その場合には,OMIT_CALLTEXをマクロ定義する.
    525485 */
    526486extern void     calltex(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/task_except.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒXƒN—áŠOˆ—‹@”\
     44 *              タスク例外処理機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_DEF_TEX_ENTER
     
    113109
    114110/*
    115  *  ƒ^ƒXƒN—áŠOˆ—ƒ‹[ƒ`ƒ“‚Ì’è‹`
     111 *  タスク例外処理ルーチンの定義
    116112 */
    117113#ifdef TOPPERS_def_tex
     
    175171
    176172/*
    177  *  ƒ^ƒXƒN—áŠOˆ—‚Ì—v‹
     173 *  タスク例外処理の要求
    178174 */
    179175#ifdef TOPPERS_ras_tex
     
    215211
    216212/*
    217  *  ƒ^ƒXƒN—áŠOˆ—‚Ì—v‹i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     213 *  タスク例外処理の要求(非タスクコンテキスト用)
    218214 */
    219215#ifdef TOPPERS_iras_tex
     
    255251
    256252/*
    257  *  ƒ^ƒXƒN—áŠOˆ—‚Ì‹ÖŽ~
     253 *  タスク例外処理の禁止
    258254 */
    259255#ifdef TOPPERS_dis_tex
     
    285281
    286282/*
    287  *  ƒ^ƒXƒN—áŠOˆ—‚Ì‹–‰Â
     283 *  タスク例外処理の許可
    288284 */
    289285#ifdef TOPPERS_ena_tex
     
    318314
    319315/*
    320  *  ƒ^ƒXƒN—áŠOˆ—‹ÖŽ~ó‘Ô‚ÌŽQÆ
     316 *  タスク例外処理禁止状態の参照
    321317 */
    322318#ifdef TOPPERS_sns_tex
     
    336332
    337333/*
    338  *  ƒ^ƒXƒN—áŠOˆ—‚̏ó‘ÔŽQÆ
     334 *  タスク例外処理の状態参照
    339335 */
    340336#ifdef TOPPERS_ref_tex
  • UsbWattMeter/trunk/asp_dcre/kernel/task_manage.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒXƒNŠÇ—‹@”\
     44 *              タスク管理機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     53 *  トレースログマクロのデフォルト定義
    5854 */
    5955#ifndef LOG_ACRE_TSK_ENTER
     
    138134
    139135/*
    140  *  ƒ^ƒXƒN‚̐¶¬
     136 *  タスクの生成
    141137 */
    142138#ifdef TOPPERS_acre_tsk
    143139
    144140#ifndef TARGET_MIN_STKSZ
    145 #define TARGET_MIN_STKSZ        1U              /* –¢’è‹`‚̏ꍇ‚Í0‚Å‚È‚¢‚±‚Æ‚ðƒ`ƒFƒbƒN */
     141#define TARGET_MIN_STKSZ        1U              /* 未定義の場合は0でないことをチェック */
    146142#endif /* TARGET_MIN_STKSZ */
    147143
     
    215211
    216212/*
    217  *  ƒ^ƒXƒN‚̍폜
     213 *  タスクの削除
    218214 */
    219215#ifdef TOPPERS_del_tsk
     
    261257
    262258/*
    263  *  ƒ^ƒXƒN‚Ì‹N“®
     259 *  タスクの起動
    264260 */
    265261#ifdef TOPPERS_act_tsk
     
    303299
    304300/*
    305  *  ƒ^ƒXƒN‚Ì‹N“®i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     301 *  タスクの起動(非タスクコンテキスト用)
    306302 */
    307303#ifdef TOPPERS_iact_tsk
     
    345341
    346342/*
    347  *  ƒ^ƒXƒN‹N“®—v‹‚̃Lƒƒƒ“ƒZƒ‹
     343 *  タスク起動要求のキャンセル
    348344 */
    349345#ifdef TOPPERS_can_act
     
    378374
    379375/*
    380  *  Ž©ƒ^ƒXƒN‚̏I—¹
     376 *  自タスクの終了
    381377 */
    382378#ifdef TOPPERS_ext_tsk
     
    392388        if (t_sense_lock()) {
    393389                /*
    394                  *  CPUƒƒbƒNó‘Ô‚Åext_tsk‚ªŒÄ‚΂ꂽê‡‚́CCPUƒƒbƒN‚ð‰ðœ‚µ
    395                  *  ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·‚éDŽÀ‘•ã‚́CƒT[ƒrƒXƒR[ƒ‹“à‚Å‚ÌCPU
    396                  *  ƒƒbƒN‚ðÈ—ª‚·‚ê‚΂悢‚¾‚¯D
     390                 *  CPUロック状態でext_tskが呼ばれた場合は,CPUロックを解除し
     391                 *  てからタスクを終了する.実装上は,サービスコール内でのCPU
     392                 *  ロックを省略すればよいだけ.
    397393                 */
    398394        }
     
    402398        if (disdsp) {
    403399                /*
    404                  *  ƒfƒBƒXƒpƒbƒ`‹ÖŽ~ó‘Ô‚Åext_tsk‚ªŒÄ‚΂ꂽê‡‚́CƒfƒBƒXƒpƒb
    405                  *  ƒ`‹–‰Âó‘Ô‚É‚µ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·‚éD
     400                 *  ディスパッチ禁止状態でext_tskが呼ばれた場合は,ディスパッ
     401                 *  チ許可状態にしてからタスクを終了する.
    406402                 */
    407403                disdsp = false;
     
    409405        if (!ipmflg) {
    410406                /*
    411                  *  Š„ž‚Ý—Dæ“xƒ}ƒXƒNiIPMj‚ªTIPM_ENAALLˆÈŠO‚̏ó‘Ô‚Åext_tsk
    412                  *  ‚ªŒÄ‚΂ꂽê‡‚́CIPM‚ðTIPM_ENAALL‚É‚µ‚Ä‚©‚çƒ^ƒXƒN‚ðI—¹‚·
    413                  *  ‚éD
     407                 *  割込み優先度マスク(IPM)がTIPM_ENAALL以外の状態でext_tsk
     408                 *  が呼ばれた場合は,IPMをTIPM_ENAALLにしてからタスクを終了す
     409                 *  る.
    414410                 */
    415411                t_set_ipm(TIPM_ENAALL);
     
    435431
    436432/*
    437  *  ƒ^ƒXƒN‚Ì‹­§I—¹
     433 *  タスクの強制終了
    438434 */
    439435#ifdef TOPPERS_ter_tsk
     
    461457                if (TSTAT_RUNNABLE(p_tcb->tstat)) {
    462458                        /*
    463                          *  p_tcb‚ÍŽ©ƒ^ƒXƒN‚Å‚È‚¢‚½‚߁CiƒVƒ“ƒOƒ‹ƒvƒƒZƒbƒT‚ł́jŽÀ
    464                          *  só‘Ô‚Å‚È‚­Cmake_non_runnable(p_tcb)‚Ń^ƒXƒNƒfƒBƒXƒpƒb
    465                          *  ƒ`‚ª•K—v‚ɂȂ邱‚Æ‚Í‚È‚¢D
     459                         *  p_tcbは自タスクでないため,(シングルプロセッサでは)実
     460                         *  行状態でなく,make_non_runnable(p_tcb)でタスクディスパッ
     461                         *  チが必要になることはない.
    466462                         */
    467463                        (void) make_non_runnable(p_tcb);
     
    490486
    491487/*
    492  *  ƒ^ƒXƒN‚̃x[ƒX—Dæ“x‚̕ύX
     488 *  タスクのベース優先度の変更
    493489 */
    494490#ifdef TOPPERS_chg_pri
     
    532528
    533529/*
    534  *  ƒ^ƒXƒN—Dæ“x‚ÌŽQÆ
     530 *  タスク優先度の参照
    535531 */
    536532#ifdef TOPPERS_get_pri
     
    568564
    569565/*
    570  *  Ž©ƒ^ƒXƒN‚ÌŠg’£î•ñ‚ÌŽQÆ
     566 *  自タスクの拡張情報の参照
    571567 */
    572568#ifdef TOPPERS_get_inf
  • UsbWattMeter/trunk/asp_dcre/kernel/task_refer.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    77 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì(1)`(4)‚ÌðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒF
    10  *  ƒAi–{ƒ\ƒtƒgƒEƒFƒA‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü
    11  *  •ÏEÄ”z•ziˆÈ‰ºC—˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    12  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    13  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    14  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    15  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    16  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    17 ƒƒ“ƒgi—˜—p
    18  *      ŽÒƒ}ƒjƒ
    19 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    20  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    21  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    22  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    23  *      ‚ƁD
    24  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    25 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    26 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    27  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    28  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    29  *        •ñ‚·‚邱‚ƁD
    30  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    31  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    32  *      ‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚̃†[ƒU‚Ü‚½‚̓Gƒ“ƒhƒ†[ƒU‚©‚ç‚Ì‚¢‚©‚Ȃ闝
    33  *      —R‚ÉŠî‚­¿‹‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð
    34  *      –Ɛӂ·‚邱‚ƁD
    35  *
    36  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    37  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC“Á’è‚ÌŽg—p–Ú“I
    38  *  ‚ɑ΂·‚é“K‡«‚àŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒF
    39  *  ƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»
    40  *  ‚̐ӔC‚𕉂í‚È‚¢D
     9 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     10 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     11 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     12 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     13 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     14 *      スコード中に含まれていること.
     15 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     16 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     17 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     18 *      の無保証規定を掲載すること.
     19 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     20 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     21 *      と.
     22 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     23 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     24 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     25 *        報告すること.
     26 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     27 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     28 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     29 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     30 *      免責すること.
     31 *
     32 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     33 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     34 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     35 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     36 *  の責任を負わない.
    4137 *
    4238 *  @(#) $Id$
     
    4440
    4541/*
    46  *              ƒ^ƒXƒN‚̏ó‘ÔŽQÆ‹@”\
     42 *              タスクの状態参照機能
    4743 */
    4844
     
    6056
    6157/*
    62  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     58 *  トレースログマクロのデフォルト定義
    6359 */
    6460#ifndef LOG_REF_TSK_ENTER
     
    7167
    7268/*
    73  *  ƒ^ƒXƒN‚̏ó‘ÔŽQÆ
     69 *  タスクの状態参照
    7470 */
    7571#ifdef TOPPERS_ref_tsk
     
    9591                if (TSTAT_DORMANT(tstat)) {
    9692                        /*
    97                          *  ‘Ώۃ^ƒXƒN‚ª‹xŽ~ó‘Ԃ̏ꍇ
     93                         *  対象タスクが休止状態の場合
    9894                         */
    9995                        pk_rtsk->tskstat = TTS_DMT;
     
    10197                else {
    10298                        /*
    103                          *  ƒ^ƒXƒNó‘Ô‚ÌŽæo‚µ
     99                         *  タスク状態の取出し
    104100                         */
    105101                        if (TSTAT_SUSPENDED(tstat)) {
     
    122118
    123119                        /*
    124                          *  Œ»Ý—Dæ“x‚ƃx[ƒX—Dæ“x‚ÌŽæo‚µ
     120                         *  現在優先度とベース優先度の取出し
    125121                         */
    126122                        pk_rtsk->tskpri = EXT_TSKPRI(p_tcb->priority);
     
    129125                        if (TSTAT_WAITING(tstat)) {
    130126                                /*
    131                                  *  ‘Ò‚¿—vˆö‚Æ‘Ò‚¿‘Ώۂ̃IƒuƒWƒFƒNƒg‚ÌID‚ÌŽæo‚µ
     127                                 *  待ち要因と待ち対象のオブジェクトのIDの取出し
    132128                                 */
    133129                                switch (tstat & TS_WAIT_MASK) {
     
    181177
    182178                                /*
    183                                  *  ƒ^ƒCƒ€ƒAƒEƒg‚·‚é‚Ü‚Å‚ÌŽžŠÔ‚ÌŽæo‚µ
     179                                 *  タイムアウトするまでの時間の取出し
    184180                                 */
    185181                                if (p_tcb->p_winfo->p_tmevtb != NULL) {
     
    193189
    194190                        /*
    195                          *  ‹N°—v‹ƒLƒ
    196 [ƒCƒ“ƒO”‚ÌŽæo‚µ
     191                         *  起床要求キューイング数の取出し
    197192                         */
    198193                        pk_rtsk->wupcnt = p_tcb->wupque ? 1U : 0U;
     
    200195
    201196                /*
    202                  *  ‹N“®—v‹ƒLƒ
    203 [ƒCƒ“ƒO”‚ÌŽæo‚µ
     197                 *  起動要求キューイング数の取出し
    204198                 */
    205199                pk_rtsk->actcnt = p_tcb->actque ? 1U : 0U;
  • UsbWattMeter/trunk/asp_dcre/kernel/task_sync.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒXƒN•t‘®“¯Šú‹@”\
     44 *              タスク付属同期機能
    4945 */
    5046
     
    5551
    5652/*
    57  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     53 *  トレースログマクロのデフォルト定義
    5854 */
    5955#ifndef LOG_SLP_TSK_ENTER
     
    138134
    139135/*
    140  *  ‹N°‘Ò‚¿
     136 *  起床待ち
    141137 */
    142138#ifdef TOPPERS_slp_tsk
     
    173169
    174170/*
    175  *  ‹N°‘Ò‚¿iƒ^ƒCƒ€ƒAƒEƒg‚ ‚èj
     171 *  起床待ち(タイムアウトあり)
    176172 */
    177173#ifdef TOPPERS_tslp_tsk
     
    213209
    214210/*
    215  *  ƒ^ƒXƒN‚Ì‹N°
     211 *  タスクの起床
    216212 */
    217213#ifdef TOPPERS_wup_tsk
     
    258254
    259255/*
    260  *  ƒ^ƒXƒN‚Ì‹N°i”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     256 *  タスクの起床(非タスクコンテキスト用)
    261257 */
    262258#ifdef TOPPERS_iwup_tsk
     
    303299
    304300/*
    305  *  ƒ^ƒXƒN‹N°—v‹‚̃Lƒƒƒ“ƒZƒ‹
     301 *  タスク起床要求のキャンセル
    306302 */
    307303#ifdef TOPPERS_can_wup
     
    339335
    340336/*
    341  *  ‘Ò‚¿ó‘Ô‚Ì‹­§‰ðœ
     337 *  待ち状態の強制解除
    342338 */
    343339#ifdef TOPPERS_rel_wai
     
    377373
    378374/*
    379  *  ‘Ò‚¿ó‘Ô‚Ì‹­§‰ðœi”ñƒ^ƒXƒNƒRƒ“ƒeƒLƒXƒg—pj
     375 *  待ち状態の強制解除(非タスクコンテキスト用)
    380376 */
    381377#ifdef TOPPERS_irel_wai
     
    415411
    416412/*
    417  *  ‹­§‘Ò‚¿ó‘Ԃւ̈ڍs
     413 *  強制待ち状態への移行
    418414 */
    419415#ifdef TOPPERS_sus_tsk
     
    442438        else if (TSTAT_RUNNABLE(p_tcb->tstat)) {
    443439                /*
    444                  *  ŽÀs‚Å‚«‚éó‘Ô‚©‚ç‹­§‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     440                 *  実行できる状態から強制待ち状態への遷移
    445441                 */
    446442                p_tcb->tstat = TS_SUSPENDED;
     
    456452        else {
    457453                /*
    458                  *  ‘Ò‚¿ó‘Ô‚©‚ç“ñd‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     454                 *  待ち状態から二重待ち状態への遷移
    459455                 */
    460456                p_tcb->tstat |= TS_SUSPENDED;
     
    472468
    473469/*
    474  *  ‹­§‘Ò‚¿ó‘Ô‚©‚ç‚̍ĊJ
     470 *  強制待ち状態からの再開
    475471 */
    476472#ifdef TOPPERS_rsm_tsk
     
    496492        else if (!TSTAT_WAITING(p_tcb->tstat)) {
    497493                /*
    498                  *  ‹­§‘Ò‚¿ó‘Ô‚©‚çŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
     494                 *  強制待ち状態から実行できる状態への遷移
    499495                 */
    500496                p_tcb->tstat = TS_RUNNABLE;
     
    507503        else {
    508504                /*
    509                  *  “ñd‘Ò‚¿ó‘Ô‚©‚ç‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     505                 *  二重待ち状態から待ち状態への遷移
    510506                 */
    511507                p_tcb->tstat &= ~TS_SUSPENDED;
     
    523519
    524520/*
    525  *  Ž©ƒ^ƒXƒN‚Ì’x‰„
     521 *  自タスクの遅延
    526522 */
    527523#ifdef TOPPERS_dly_tsk
  • UsbWattMeter/trunk/asp_dcre/kernel/time_event.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              タイムイベント管理モジュール
    5045 */
    5146
     
    5449
    5550/*
    56  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‘€ìƒ}ƒNƒ
    57  */
    58 #define PARENT(index)           ((index) >> 1)          /* eƒm[ƒh‚ð‹‚ß‚é */
    59 #define LCHILD(index)           ((index) << 1)          /* ¶‚ÌŽqƒm[ƒh‚ð‹‚ß‚é */
     51 *  タイムイベントヒープ操作マクロ
     52 */
     53#define PARENT(index)           ((index) >> 1)          /* 親ノードを求める */
     54#define LCHILD(index)           ((index) << 1)          /* 左の子ノードを求める */
    6055#define TMEVT_NODE(index)       (tmevt_heap[(index) - 1])
    6156
    6257/*
    63  *  ƒCƒxƒ“ƒg”­¶Žž”äŠrƒ}ƒNƒ
    64  *
    65  *  ƒCƒxƒ“ƒg”­¶Žž‚́Cmin_time‚©‚ç‚Ì‘Š‘Î’l‚Å”äŠr‚·‚éD‚·‚È‚í‚¿C
    66  *  min_time‚ðÅ¬’liÅ‚à‹ß‚¢ŽžjCmit_time-1‚ªÅ‘å’liÅ‚à‰“‚¢Žžj
    67  *  ‚Æ‚Ý‚È‚µ‚Ä”äŠr‚·‚éD
     58 *  イベント発生時刻比較マクロ
     59 *
     60 *  イベント発生時刻は,min_timeからの相対値で比較する.すなわち,
     61 *  min_timeを最小値(最も近い時刻),mit_time-1が最大値(最も遠い時刻)
     62 *  とみなして比較する.
    6863 */
    6964#define EVTTIM_LT(t1, t2) (((t1) - min_time) < ((t2) - min_time))
     
    7368
    7469/*
    75  *  Œ»Ý‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
    76  *
    77  *  Œµ–§‚ɂ́C‘O‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€ŽžD
     70 *  現在のシステム時刻(単位: 1ミリ秒)
     71 *
     72 *  厳密には,前のタイムティックのシステム時刻.
    7873 */
    7974EVTTIM  current_time;
    8075
    8176/*
    82  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚Å—LŒø‚ȍŏ¬‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
     77 *  タイムイベントヒープ中で有効な最小のシステム時刻(単位: 1ミリ秒)
    8378 */
    8479EVTTIM  min_time;
    8580
    8681/*
    87  *  ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
     82 *  次のタイムティックのシステム時刻(単位: 1ミリ秒)
    8883 */
    8984EVTTIM  next_time;
    9085
    9186/*
    92  *  ƒVƒXƒeƒ€ŽžÏŽZ—p•Ï”i’PˆÊ: 1/TIC_DENOƒ~ƒŠ•bj
     87 *  システム時刻積算用変数(単位: 1/TIC_DENOミリ秒)
    9388 */
    9489#if TIC_DENO != 1U
     
    9792
    9893/*
    99  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̍Ōã‚ÌŽg—p—̈æ‚̃Cƒ“ƒfƒbƒNƒX
     94 *  タイムイベントヒープの最後の使用領域のインデックス
    10095 */
    10196uint_t  last_index;
    10297
    10398/*
    104  *  ƒ^ƒCƒ}ƒ‚ƒWƒ
    105 [ƒ‹‚̏‰Šú‰»
     99 *  タイマモジュールの初期化
    106100 */
    107101void
     
    120114
    121115/*
    122  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚ðãŒü‚«‚É’Tõ
    123  *
    124  *  Žžtime‚É”­¶‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ð‘}“ü‚·‚éƒm[ƒh‚ð‹ó‚¯‚邽‚߂ɁC
    125  *  ƒq[ƒv‚̏ã‚ÉŒü‚©‚Á‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éDˆÚ“®‘O‚Ì‹óƒm[ƒh‚̈ʒu‚ð
    126  *  index‚É“n‚·‚ƁCˆÚ“®Œã‚Ì‹óƒm[ƒh‚̈ʒui‚·‚È‚í‚¿‘}“üˆÊ’uj‚ð•Ô‚·D
     116 *  タイムイベントの挿入位置を上向きに探索
     117 *
     118 *  時刻timeに発生するタイムイベントを挿入するノードを空けるために,
     119 *  ヒープの上に向かって空ノードを移動させる.移動前の空ノードの位置を
     120 *  indexに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す.
    127121 */
    128122#ifdef TOPPERS_tmeup
     
    135129        while (index > 1) {
    136130                /*
    137                  *  eƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚Ì•û‚ª‘‚¢i‚Ü‚½‚Í“¯‚¶j‚È‚ç‚΁C
    138                  *  index‚ª‘}“üˆÊ’u‚Ȃ̂Ń‹[ƒv‚𔲂¯‚éD
     131                 *  親ノードのイベント発生時刻の方が早い(または同じ)ならば,
     132                 *  indexが挿入位置なのでループを抜ける.
    139133                 */
    140134                parent = PARENT(index);
     
    144138
    145139                /*
    146                  *  eƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
     140                 *  親ノードをindexの位置に移動させる.
    147141                 */
    148142                TMEVT_NODE(index) = TMEVT_NODE(parent);
     
    150144
    151145                /*
    152                  *  index‚ðeƒm[ƒh‚̈ʒu‚ɍXVD
     146                 *  indexを親ノードの位置に更新.
    153147                 */
    154148                index = parent;
     
    160154
    161155/*
    162  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚ð‰ºŒü‚«‚É’Tõ
    163  *
    164  *  Žžtime‚É”­¶‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ð‘}“ü‚·‚éƒm[ƒh‚ð‹ó‚¯‚邽‚߂ɁC
    165  *  ƒq[ƒv‚̉º‚ÉŒü‚©‚Á‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éDˆÚ“®‘O‚Ì‹óƒm[ƒh‚̈ʒu‚ð
    166  *  index‚É“n‚·‚ƁCˆÚ“®Œã‚Ì‹óƒm[ƒh‚̈ʒui‚·‚È‚í‚¿‘}“üˆÊ’uj‚ð•Ô‚·D
     156 *  タイムイベントの挿入位置を下向きに探索
     157 *
     158 *  時刻timeに発生するタイムイベントを挿入するノードを空けるために,
     159 *  ヒープの下に向かって空ノードを移動させる.移動前の空ノードの位置を
     160 *  indexに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す.
    167161 */
    168162#ifdef TOPPERS_tmedown
     
    175169        while ((child = LCHILD(index)) <= last_index) {
    176170                /*
    177                  *  ¶‰E‚ÌŽqƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚ð”äŠr‚µC‘‚¢•û‚ÌŽqƒm[ƒh
    178                  *  ‚̈ʒu‚ðchild‚ɐݒ肷‚éDˆÈ‰º‚ÌŽqƒm[ƒh‚́C‚±‚±‚Å‘I‚΂ꂽ•û
    179                  *  ‚ÌŽqƒm[ƒh‚Ì‚±‚ƁD
     171                 *  左右の子ノードのイベント発生時刻を比較し,早い方の子ノード
     172                 *  の位置をchildに設定する.以下の子ノードは,ここで選ばれた方
     173                 *  の子ノードのこと.
    180174                 */
    181175                if (child + 1 <= last_index
     
    186180
    187181                /*
    188                  *  Žqƒm[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚Ì•û‚ª’x‚¢i‚Ü‚½‚Í“¯‚¶j‚È‚ç‚΁C
    189                  *  index‚ª‘}“üˆÊ’u‚Ȃ̂Ń‹[ƒv‚𔲂¯‚éD
     182                 *  子ノードのイベント発生時刻の方が遅い(または同じ)ならば,
     183                 *  indexが挿入位置なのでループを抜ける.
    190184                 */
    191185                if (EVTTIM_LE(time, TMEVT_NODE(child).time)) {
     
    194188
    195189                /*
    196                  *  Žqƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
     190                 *  子ノードをindexの位置に移動させる.
    197191                 */
    198192                TMEVT_NODE(index) = TMEVT_NODE(child);
     
    200194
    201195                /*
    202                  *  index‚ðŽqƒm[ƒh‚̈ʒu‚ɍXVD
     196                 *  indexを子ノードの位置に更新.
    203197                 */
    204198                index = child;
     
    210204
    211205/*
    212  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚Ö‚Ì“o˜^
    213  *
    214  *  p_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ðCtime‚ÅŽw’肵‚½ŽžŠÔ‚ªŒo
    215  *  ‰ßŒã‚ɃCƒxƒ“ƒg‚ª”­¶‚·‚é‚悤‚ɁCƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚É“o˜^‚·‚éD
     206 *  タイムイベントヒープへの登録
     207 *
     208 *  p_tmevtbで指定したタイムイベントブロックを,timeで指定した時間が経
     209 *  過後にイベントが発生するように,タイムイベントヒープに登録する.
    216210 */
    217211#ifdef TOPPERS_tmeins
     
    223217
    224218        /*
    225          *  last_index‚ðƒCƒ“ƒNƒŠƒƒ“ƒg‚µC‚»‚±‚©‚çã‚É‘}“üˆÊ’u‚ð’T‚·D
     219         *  last_indexをインクリメントし,そこから上に挿入位置を探す.
    226220         */
    227221        index = tmevt_up(++last_index, time);
    228222
    229223        /*
    230          *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
     224         *  タイムイベントをindexの位置に挿入する.
    231225         */
    232226        TMEVT_NODE(index).time = time;
     
    238232
    239233/*
    240  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚©‚ç‚̍폜
     234 *  タイムイベントヒープからの削除
    241235 */
    242236#ifdef TOPPERS_tmedel
     
    250244
    251245        /*
    252          *  íœ‚É‚æ‚èƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚ª‹ó‚É‚È‚éê‡‚͉½‚à‚µ‚È‚¢D
     246         *  削除によりタイムイベントヒープが空になる場合は何もしない.
    253247         */
    254248        if (--last_index == 0) {
     
    257251
    258252        /*
    259          *  íœ‚µ‚½ƒm[ƒh‚̈ʒu‚ɍŌã‚̃m[ƒhilast_index+1‚̈ʒu‚̃m[ƒhj
    260          *  ‚ð‘}“ü‚µC‚»‚ê‚ð“KØ‚Ȉʒu‚ÖˆÚ“®‚³‚¹‚éDŽÀÛ‚ɂ́CÅŒã‚̃m[ƒh
    261          *  ‚ðŽÀÛ‚É‘}“ü‚·‚é‚Ì‚Å‚Í‚È‚­Cíœ‚µ‚½ƒm[ƒh‚̈ʒu‚ª‹óƒm[ƒh‚É‚È
    262          *  ‚é‚̂ŁCÅŒã‚̃m[ƒh‚ð‘}“ü‚·‚ׂ«ˆÊ’u‚ÖŒü‚¯‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹
    263          *  ‚éD
    264          *  ÅŒã‚̃m[ƒh‚̃Cƒxƒ“ƒg”­¶Žž‚ªCíœ‚µ‚½ƒm[ƒh‚̐eƒm[ƒh‚̃C
    265          *  ƒxƒ“ƒg”­¶Žž‚æ‚è‘O‚̏ꍇ‚ɂ́Cã‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D‚»
    266          *  ‚¤‚Å‚È‚¢ê‡‚ɂ́C‰º‚ÉŒü‚©‚Á‚Ä’T‚·D
     253         *  削除したノードの位置に最後のノード(last_index+1の位置のノード)
     254         *  を挿入し,それを適切な位置へ移動させる.実際には,最後のノード
     255         *  を実際に挿入するのではなく,削除したノードの位置が空ノードにな
     256         *  るので,最後のノードを挿入すべき位置へ向けて空ノードを移動させ
     257         *  る.
     258         *  最後のノードのイベント発生時刻が,削除したノードの親ノードのイ
     259         *  ベント発生時刻より前の場合には,上に向かって挿入位置を探す.そ
     260         *  うでない場合には,下に向かって探す.
    267261         */
    268262        if (index > 1 && EVTTIM_LT(event_time,
    269263                                                                TMEVT_NODE(parent = PARENT(index)).time)) {
    270264                /*
    271                  *  eƒm[ƒh‚ðindex‚̈ʒu‚Ɉړ®‚³‚¹‚éD
     265                 *  親ノードをindexの位置に移動させる.
    272266                 */
    273267                TMEVT_NODE(index) = TMEVT_NODE(parent);
     
    275269
    276270                /*
    277                  *  íœ‚µ‚½ƒm[ƒh‚̐eƒm[ƒh‚©‚çã‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D
     271                 *  削除したノードの親ノードから上に向かって挿入位置を探す.
    278272                 */
    279273                index = tmevt_up(parent, event_time);
     
    281275        else {
    282276                /*
    283                  *  íœ‚µ‚½ƒm[ƒh‚©‚牺‚ÉŒü‚©‚Á‚Ä‘}“üˆÊ’u‚ð’T‚·D
     277                 *  削除したノードから下に向かって挿入位置を探す.
    284278                 */
    285279                index = tmevt_down(index, event_time);
     
    287281
    288282        /*
    289          *  ÅŒã‚̃m[ƒh‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
     283         *  最後のノードをindexの位置に挿入する.
    290284         */
    291285        TMEVT_NODE(index) = TMEVT_NODE(last_index + 1);
     
    296290
    297291/*
    298  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̐擪‚̃m[ƒh‚̍폜
     292 *  タイムイベントヒープの先頭のノードの削除
    299293 */
    300294Inline void
     
    305299
    306300        /*
    307          *  íœ‚É‚æ‚èƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚ª‹ó‚É‚È‚éê‡‚͉½‚à‚µ‚È‚¢D
     301         *  削除によりタイムイベントヒープが空になる場合は何もしない.
    308302         */
    309303        if (--last_index == 0) {
     
    312306
    313307        /*
    314          *  ƒ‹[ƒgƒm[ƒh‚ɍŌã‚̃m[ƒhilast_index + 1 ‚̈ʒu‚̃m[ƒhj‚ð
    315          *  ‘}“ü‚µC‚»‚ê‚ð“KØ‚Ȉʒu‚ÖˆÚ“®‚³‚¹‚éDŽÀÛ‚ɂ́CÅŒã‚̃m[ƒh‚ð
    316          *  ŽÀÛ‚É‘}“ü‚·‚é‚Ì‚Å‚Í‚È‚­Cƒ‹[ƒgƒm[ƒh‚ª‹óƒm[ƒh‚É‚È‚é‚̂ŁCÅ
    317          *  Œã‚̃m[ƒh‚ð‘}“ü‚·‚ׂ«ˆÊ’u‚ÖŒü‚¯‚Ä‹óƒm[ƒh‚ðˆÚ“®‚³‚¹‚éD
     308         *  ルートノードに最後のノード(last_index + 1 の位置のノード)を
     309         *  挿入し,それを適切な位置へ移動させる.実際には,最後のノードを
     310         *  実際に挿入するのではなく,ルートノードが空ノードになるので,最
     311         *  後のノードを挿入すべき位置へ向けて空ノードを移動させる.
    318312         */
    319313        index = tmevt_down(1, event_time);
    320314
    321315        /*
    322          *  ÅŒã‚̃m[ƒh‚ðindex‚̈ʒu‚É‘}“ü‚·‚éD
     316         *  最後のノードをindexの位置に挿入する.
    323317         */
    324318        TMEVT_NODE(index) = TMEVT_NODE(last_index + 1);
     
    327321
    328322/*
    329  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ü‚Å‚ÌŽc‚莞ŠÔ‚ÌŒvŽZ
     323 *  タイムイベントまでの残り時間の計算
    330324 */
    331325#ifdef TOPPERS_tmeltim
     
    339333        if (EVTTIM_LE(time, next_time)) {
    340334                /*
    341                  *  ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚ŏˆ—‚³‚ê‚éê‡‚É‚Í0‚ð•Ô‚·D
     335                 *  次のタイムティックで処理される場合には0を返す.
    342336                 */
    343337                return(0U);
     
    351345
    352346/*
    353  *  ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì‹Ÿ‹‹
     347 *  タイムティックの供給
    354348 */
    355349#ifdef TOPPERS_sigtim
     
    366360
    367361        /*
    368          *  current_time‚ðXV‚·‚éD
     362         *  current_timeを更新する.
    369363         */
    370364        current_time = next_time;
    371365
    372366        /*
    373          *  next_timeCnext_subtime‚ðXV‚·‚éD
     367         *  next_time,next_subtimeを更新する.
    374368         */
    375369#if TIC_DENO == 1U
     
    385379
    386380        /*
    387          *  current_time‚æ‚èƒCƒxƒ“ƒg”­¶Žž‚Ì‘‚¢i‚Ü‚½‚Í“¯‚¶jƒ^ƒCƒ€ƒCƒx
    388          *  ƒ“ƒg‚ðCƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚©‚çíœ‚µCƒR[ƒ‹ƒoƒbƒNŠÖ”‚ðŒÄ‚Ñ
    389          *  o‚·D
     381         *  current_timeよりイベント発生時刻の早い(または同じ)タイムイベ
     382         *  ントを,タイムイベントヒープから削除し,コールバック関数を呼び
     383         *  出す.
    390384         */
    391385        while (last_index > 0 && EVTTIM_LE(TMEVT_NODE(1).time, current_time)) {
     
    396390
    397391        /*
    398          *  min_time‚ðXV‚·‚éD
     392         *  min_timeを更新する.
    399393         */
    400394        min_time = current_time;
  • UsbWattMeter/trunk/asp_dcre/kernel/time_event.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              タイムイベント管理モジュール
    5045 */
    5146
     
    5449
    5550/*
    56  *  ƒCƒxƒ“ƒg”­¶Žž‚̃f[ƒ^Œ^‚Ì’è‹`
    57  *
    58  *  EVTTIM‚́CRELTIM‚Æ‚µ‚ÄŽw’è‚Å‚«‚é”͈͂æ‚è‚àL‚¢”͈͂ð•\Œ»‚Å‚«‚é•K—v
    59  *  ‚ª‚ ‚éDƒÊITRON4.0Žd—l‚̃Xƒ^ƒ“ƒ_[ƒhƒvƒƒtƒ@ƒCƒ‹‚ł́CRELTIM‚ª16ƒrƒb
    60  *  ƒgˆÈã‚Å‚È‚¯‚ê‚΂Ȃç‚È‚¢‚½‚߁CEVTTIM‚Í17ƒrƒbƒgˆÈã‚Å‚ ‚邱‚Æ‚ª•K—v
    61  *  ‚Å‚ ‚éD‚»‚Ì‚½‚߁C16ƒrƒbƒg‚É‚È‚éê‡‚ª‚ ‚éuint_t‚Å‚Í‚È‚­Culong_t‚É
    62  *  ’è‹`‚µ‚Ä‚¢‚éD
     51 *  イベント発生時刻のデータ型の定義
     52 *
     53 *  EVTTIMは,RELTIMとして指定できる範囲よりも広い範囲を表現できる必要
     54 *  がある.μITRON4.0仕様のスタンダードプロファイルでは,RELTIMが16ビッ
     55 *  ト以上でなければならないため,EVTTIMは17ビット以上であることが必要
     56 *  である.そのため,16ビットになる場合があるuint_tではなく,ulong_tに
     57 *  定義している.
    6358 */
    6459typedef ulong_t EVTTIM;
    6560
    6661/*
    67  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚̃f[ƒ^Œ^‚Ì’è‹`
    68  */
    69 typedef void    (*CBACK)(void *);       /* ƒR[ƒ‹ƒoƒbƒNŠÖ”‚ÌŒ^ */
     62 *  タイムイベントブロックのデータ型の定義
     63 */
     64typedef void    (*CBACK)(void *);       /* コールバック関数の型 */
    7065
    7166typedef struct time_event_block {
    72         uint_t  index;                  /* ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚ł̈ʒu */
    73         CBACK   callback;               /* ƒR[ƒ‹ƒoƒbƒNŠÖ” */
    74         void    *arg;                   /* ƒR[ƒ‹ƒoƒbƒNŠÖ”‚Ö“n‚·ˆø” */
     67        uint_t  index;                  /* タイムイベントヒープ中での位置 */
     68        CBACK   callback;               /* コールバック関数 */
     69        void    *arg;                   /* コールバック関数へ渡す引数 */
    7570} TMEVTB;
    7671
    7772/*
    78  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚̃m[ƒh‚̃f[ƒ^Œ^‚Ì’è‹`
     73 *  タイムイベントヒープ中のノードのデータ型の定義
    7974 */
    8075typedef struct time_event_node {
    81         EVTTIM  time;                   /* ƒCƒxƒ“ƒg”­¶Žž */
    82         TMEVTB  *p_tmevtb;              /* ‘Ήž‚·‚éƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN */
     76        EVTTIM  time;                   /* イベント発生時刻 */
     77        TMEVTB  *p_tmevtb;              /* 対応するタイムイベントブロック */
    8378} TMEVTN;
    8479
    8580/*
    86  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒvikernel_cfg.cj
     81 *  タイムイベントヒープ(kernel_cfg.c)
    8782 */
    8883extern TMEVTN   tmevt_heap[];
    8984
    9085/*
    91  *  Œ»Ý‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
    92  *
    93  *  ƒVƒXƒeƒ€‹N“®Žž‚É0‚ɏ‰Šú‰»‚³‚êCˆÈ~Cƒ^ƒCƒ€ƒeƒBƒbƒN‚ª‹Ÿ‹‹‚³‚ê‚é“x‚É
    94  *  ’P’²‚É‘‰Á‚·‚éD
     86 *  現在のシステム時刻(単位: 1ミリ秒)
     87 *
     88 *  システム起動時に0に初期化され,以降,タイムティックが供給される度に
     89 *  単調に増加する.
    9590 */
    9691extern EVTTIM   current_time;
    9792
    9893/*
    99  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv’†‚Å—LŒø‚ȍŏ¬‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
     94 *  タイムイベントヒープ中で有効な最小のシステム時刻(単位: 1ミリ秒)
    10095 */
    10196extern EVTTIM   min_time;
    10297
    10398/*
    104  *  ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žži’PˆÊ: 1ƒ~ƒŠ•bj
     99 *  次のタイムティックのシステム時刻(単位: 1ミリ秒)
    105100 */
    106101extern EVTTIM   next_time;
    107102
    108103/*
    109  *  ƒVƒXƒeƒ€ŽžÏŽZ—p•Ï”i’PˆÊ: 1/TIC_DENOƒ~ƒŠ•bj
    110  *
    111  *  ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žž‚̉ºˆÊŒ
    112 ‚ðŽ¦‚·iãˆÊŒ
    113 ‚Ínext_timejD
    114  *  TIC_DENO‚ª1‚ÌŽž‚́C‰ºˆÊŒ
    115 ‚͏í‚É0‚Å‚ ‚邽‚߁C‚±‚̕ϐ”‚Í•K—v‚È‚¢D
     104 *  システム時刻積算用変数(単位: 1/TIC_DENOミリ秒)
     105 *
     106 *  次のタイムティックのシステム時刻の下位桁を示す(上位桁はnext_time).
     107 *  TIC_DENOが1の時は,下位桁は常に0であるため,この変数は必要ない.
    116108 */
    117109#if TIC_DENO != 1U
     
    120112
    121113/*
    122  *  ‘Š‘ÎŽžŠÔ‚̊Žži’PˆÊ: 1ƒ~ƒŠ•bj
    123  *
    124  *  ŽŸ‚̃^ƒCƒ€ƒeƒBƒbƒN‚̃VƒXƒeƒ€Žž‚ðØ‚èã‚°‚½ŽžDTIC_DENO‚ª1‚ÌŽž
    125  *  ‚́Cnext_time‚Ɉê’v‚·‚éD
     114 *  相対時間の基準時刻(単位: 1ミリ秒)
     115 *
     116 *  次のタイムティックのシステム時刻を切り上げた時刻.TIC_DENOが1の時
     117 *  は,next_timeに一致する.
    126118 */
    127119#if TIC_DENO == 1U
     
    132124
    133125/*
    134  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚̍Ōã‚ÌŽg—p—̈æ‚̃Cƒ“ƒfƒbƒNƒX
    135  *
    136  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚É“o˜^‚³‚ê‚Ä‚¢‚éƒ^ƒCƒ€ƒCƒxƒ“ƒg‚̐”‚Ɉê’v‚·‚éD
     126 *  タイムイベントヒープの最後の使用領域のインデックス
     127 *
     128 *  タイムイベントヒープに登録されているタイムイベントの数に一致する.
    137129 */
    138130extern uint_t   last_index;
    139131
    140132/*
    141  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgŠÇ—ƒ‚ƒWƒ
    142 [ƒ‹‚̏‰Šú‰»
     133 *  タイムイベント管理モジュールの初期化
    143134 */
    144135extern void     initialize_tmevt(void);
    145136
    146137/*
    147  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ì‘}“üˆÊ’u‚Ì’Tõ
     138 *  タイムイベントの挿入位置の探索
    148139 */
    149140extern uint_t   tmevt_up(uint_t index, EVTTIM time);
     
    151142
    152143/*
    153  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒq[ƒv‚Ö‚Ì“o˜^‚ƍ폜
     144 *  タイムイベントヒープへの登録と削除
    154145 */
    155146extern void     tmevtb_insert(TMEVTB *p_tmevtb, EVTTIM time);
     
    157148
    158149/*
    159  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^i‘Š‘ÎŽžŠÔŽw’èj
    160  *
    161  *  time‚ÅŽw’肵‚½‘Š‘ÎŽžŠÔ‚ªŒo‰ß‚µ‚½Œã‚ɁCarg‚ðˆø”‚Æ‚µ‚Äcallback‚ªŒÄ
    162  *  ‚яo‚³‚ê‚é‚悤‚ɁCp_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·
    163  *  ‚éD
     150 *  タイムイベントブロックの登録(相対時間指定)
     151 *
     152 *  timeで指定した相対時間が経過した後に,argを引数としてcallbackが呼
     153 *  び出されるように,p_tmevtbで指定したタイムイベントブロックを登録す
     154 *  る.
    164155 * 
    165156 */
     
    175166
    176167/*
    177  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^iƒCƒxƒ“ƒg”­¶ŽžŽw’èj
    178  *
    179  *  time‚ÅŽw’肵‚½ƒCƒxƒ“ƒg”­¶Žž‚ɁCarg‚ðˆø”‚Æ‚µ‚Äcallback‚ªŒÄ‚яo
    180  *  ‚³‚ê‚é‚悤‚ɁCp_tmevtb‚ÅŽw’肵‚½ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚ð“o˜^‚·‚éD
     168 *  タイムイベントブロックの登録(イベント発生時刻指定)
     169 *
     170 *  timeで指定したイベント発生時刻に,argを引数としてcallbackが呼び出
     171 *  されるように,p_tmevtbで指定したタイムイベントブロックを登録する.
    181172 */
    182173Inline void
     
    189180
    190181/*
    191  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^‰ðœ
     182 *  タイムイベントブロックの登録解除
    192183 */
    193184Inline void
     
    198189
    199190/*
    200  *  ƒ^ƒCƒ€ƒCƒxƒ“ƒg‚Ü‚Å‚ÌŽc‚莞ŠÔ‚ÌŒvŽZ
     191 *  タイムイベントまでの残り時間の計算
    201192 */
    202193extern RELTIM   tmevt_lefttim(TMEVTB *p_tmevtb);
    203194
    204195/*
    205  *  ƒ^ƒCƒ€ƒeƒBƒbƒN‚Ì‹Ÿ‹‹
     196 *  タイムティックの供給
    206197 */
    207198extern void     signal_time(void);
  • UsbWattMeter/trunk/asp_dcre/kernel/time_manage.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
    3733 *
    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
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  $Id$
     
    4642
    4743/*
    48  *              ƒVƒXƒeƒ€ŽžŠÇ—‹@”\
     44 *              システム時刻管理機能
    4945 */
    5046
     
    5450
    5551/*
    56  *  ƒgƒŒ[ƒXƒƒOƒ}ƒNƒ‚̃fƒtƒHƒ‹ƒg’è‹`
     52 *  トレースログマクロのデフォルト定義
    5753 */
    5854#ifndef LOG_GET_TIM_ENTER
     
    7369
    7470/*
    75  *  ƒVƒXƒeƒ€Žž‚ÌŽQÆ
     71 *  システム時刻の参照
    7672 */
    7773#ifdef TOPPERS_get_tim
     
    9894
    9995/*
    100  *  «”\•]‰¿—pƒVƒXƒeƒ€Žž‚ÌŽQÆ
     96 *  性能評価用システム時刻の参照
    10197 */
    10298#ifdef TOPPERS_get_utm
  • UsbWattMeter/trunk/asp_dcre/kernel/wait.c

    • Property svn:mime-type changed from text/x-csrc to text/x-csrc; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ‘Ò‚¿ó‘ÔŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              待ち状態管理モジュール
    5045 */
    5146
     
    5449
    5550/*
    56  *  ‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚiƒ^ƒCƒ€ƒAƒEƒgŽw’èj
     51 *  待ち状態への遷移(タイムアウト指定)
    5752 */
    5853#ifdef TOPPERS_waimake
     
    7772
    7873/*
    79  *  ‘Ò‚¿‰ðœ
     74 *  待ち解除
    8075 */
    8176#ifdef TOPPERS_waicmp
     
    9287
    9388/*
    94  *  ƒ^ƒCƒ€ƒAƒEƒg‚É”º‚¤‘Ò‚¿‰ðœ
     89 *  タイムアウトに伴う待ち解除
    9590 */
    9691#ifdef TOPPERS_waitmo
     
    106101
    107102        /*
    108          *  ‚±‚±‚Å—Dæ“x‚̍‚‚¢Š„ž‚Ý‚ðŽó‚¯•t‚¯‚éD
     103         *  ここで優先度の高い割込みを受け付ける.
    109104         */
    110105        i_unlock_cpu();
     
    124119
    125120        /*
    126          *  ‚±‚±‚Å—Dæ“x‚̍‚‚¢Š„ž‚Ý‚ðŽó‚¯•t‚¯‚éD
     121         *  ここで優先度の高い割込みを受け付ける.
    127122         */
    128123        i_unlock_cpu();
     
    133128
    134129/*
    135  *  ‘Ò‚¿ó‘Ô‚Ì‹­§‰ðœ
     130 *  待ち状態の強制解除
    136131 */
    137132#ifdef TOPPERS_wairel
     
    149144
    150145/*
    151  *  ŽÀs’†‚̃^ƒXƒN‚Ì“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    152 [‚Ö‚Ì‘}“ü
     146 *  実行中のタスクの同期・通信オブジェクトの待ちキューへの挿入
    153147 *
    154  *  ŽÀs’†‚̃^ƒXƒN‚ðC“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    155 [‚Ö‘}“ü‚·‚éDƒI
    156  *  ƒuƒWƒFƒNƒg‚Ì‘®«‚ɉž‚¶‚āCFIFO‡‚Ü‚½‚̓^ƒXƒN—Dæ“x‡‚Å‘}“ü‚·‚éD
     148 *  実行中のタスクを,同期・通信オブジェクトの待ちキューへ挿入する.オ
     149 *  ブジェクトの属性に応じて,FIFO順またはタスク優先度順で挿入する.
    157150 */
    158151Inline void
     
    168161
    169162/*
    170  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     163 *  同期・通信オブジェクトに対する待ち状態への遷移
    171164 */
    172165#ifdef TOPPERS_wobjwai
     
    197190
    198191/*
    199  *  ‘Ò‚¿ƒLƒ
    200 [‚̏‰Šú‰»
     192 *  待ちキューの初期化
    201193 */
    202194#ifdef TOPPERS_iniwque
  • UsbWattMeter/trunk/asp_dcre/kernel/wait.h

    • Property svn:mime-type changed from text/x-chdr to text/x-chdr; charset=SHIFT_JIS
    r164 r167  
    99 *              Graduate School of Information Science, Nagoya Univ., JAPAN
    1010 *
    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
     11 *  上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
     12 *  ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
     13 *  変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *      また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
     31 *      由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
     32 *      免責すること.
     33 *
     34 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     35 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
     36 *  に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
     37 *  アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
     38 *  の責任を負わない.
    4339 *
    4440 *  @(#) $Id$
     
    4642
    4743/*
    48  *              ‘Ò‚¿ó‘ÔŠÇ—ƒ‚ƒWƒ
    49 [ƒ‹
     44 *              待ち状態管理モジュール
    5045 */
    5146
     
    5752
    5853/*
    59  *  ƒ^ƒXƒN‚Ì—Dæ“x‡‚Ì‘Ò‚¿ƒLƒ
    60 [‚Ö‚Ì‘}“ü
    61  *
    62  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ðCƒ^ƒXƒN—Dæ“x‡‚̃Lƒ
    63 [p_queue‚É‘}“ü‚·‚éD
    64  *  ƒLƒ
    65 [‚Ì’†‚É“¯‚¶—Dæ“x‚̃^ƒXƒN‚ª‚ ‚éê‡‚ɂ́C‚»‚̍Ōã‚É‘}“ü‚·‚éD
     54 *  タスクの優先度順の待ちキューへの挿入
     55 *
     56 *  p_tcbで指定されるタスクを,タスク優先度順のキューp_queueに挿入する.
     57 *  キューの中に同じ優先度のタスクがある場合には,その最後に挿入する.
    6658 */
    6759Inline void
     
    8173
    8274/*
    83  *  ‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
    84  *
    85  *  ŽÀs’†‚̃^ƒXƒN‚ð‘Ò‚¿ó‘Ô‚É‘JˆÚ‚³‚¹‚éD‹ï‘Ì“I‚ɂ́CŽÀs’†‚̃^ƒXƒN‚ð
    86  *  ƒŒƒfƒBƒLƒ
    87 [‚©‚çíœ‚µCTCB‚Ìp_winfoƒtƒB[ƒ‹ƒhCWINFO‚Ìp_tmevtbƒtƒB[
    88  *  ƒ‹ƒh‚ðÝ’è‚·‚éD
     75 *  待ち状態への遷移
     76 *
     77 *  実行中のタスクを待ち状態に遷移させる.具体的には,実行中のタスクを
     78 *  レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー
     79 *  ルドを設定する.
    8980 */
    9081Inline void
     
    9788
    9889/*
    99  *  ‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚiƒ^ƒCƒ€ƒAƒEƒgŽw’èj
    100  *
    101  *  ŽÀs’†‚̃^ƒXƒN‚ðCƒ^ƒCƒ€ƒAƒEƒgŽw’è•t‚«‚Å‘Ò‚¿ó‘Ô‚É‘JˆÚ‚³‚¹‚éD‹ï‘Ì
    102  *  “I‚ɂ́CŽÀs’†‚̃^ƒXƒN‚ðƒŒƒfƒBƒLƒ
    103 [‚©‚çíœ‚µCTCB‚Ìp_winfoƒtƒB[
    104  *  ƒ‹ƒhCWINFO‚Ìp_tmevtbƒtƒB[ƒ‹ƒh‚ðÝ’è‚·‚éD‚Ü‚½Cƒ^ƒCƒ€ƒCƒxƒ“ƒgƒu
    105  *  ƒƒbƒN‚ð“o˜^‚·‚éD
     90 *  待ち状態への遷移(タイムアウト指定)
     91 *
     92 *  実行中のタスクを,タイムアウト指定付きで待ち状態に遷移させる.具体
     93 *  的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー
     94 *  ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ
     95 *  ロックを登録する.
    10696 */
    10797extern void     make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout);
    10898
    10999/*
    110  *  ‘Ò‚¿‰ðœ‚Ì‚½‚߂̃^ƒXƒNó‘Ԃ̍XV
    111  *
    112  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ðC‘Ò‚¿‰ðœ‚·‚é‚悤ƒ^ƒXƒNó‘Ô‚ðXV‚·‚éD
    113  *  ‘Ò‚¿‰ðœ‚·‚éƒ^ƒXƒN‚ªŽÀs‚Å‚«‚éó‘Ô‚É‚È‚éê‡‚́CƒŒƒfƒBƒLƒ
    114 [‚ɂ‚È
    115  *  ‚®D‚Ü‚½CƒfƒBƒXƒpƒbƒ`‚ª•K—v‚ȏꍇ‚É‚Ítrue‚ð•Ô‚·D
     100 *  待ち解除のためのタスク状態の更新
     101 *
     102 *  p_tcbで指定されるタスクを,待ち解除するようタスク状態を更新する.
     103 *  待ち解除するタスクが実行できる状態になる場合は,レディキューにつな
     104 *  ぐ.また,ディスパッチが必要な場合にはtrueを返す.
    116105 */
    117106Inline bool_t
     
    122111        if (!TSTAT_SUSPENDED(p_tcb->tstat)) {
    123112                /*
    124                  *  ‘Ò‚¿ó‘Ô‚©‚çŽÀs‚Å‚«‚éó‘Ô‚Ö‚Ì‘JˆÚ
     113                 *  待ち状態から実行できる状態への遷移
    125114                 */
    126115                p_tcb->tstat = TS_RUNNABLE;
     
    130119        else {
    131120                /*
    132                  *  “ñd‘Ò‚¿ó‘Ô‚©‚ç‹­§‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     121                 *  二重待ち状態から強制待ち状態への遷移
    133122                 */
    134123                p_tcb->tstat = TS_SUSPENDED;
     
    139128
    140129/*
    141  *  ƒIƒuƒWƒFƒNƒg‘Ò‚¿ƒLƒ
    142 [‚©‚ç‚̍폜
    143  *
    144  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ªC“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    145 [‚É‚Â
    146  *  ‚È‚ª‚ê‚Ä‚¢‚ê‚΁C‘Ò‚¿ƒLƒ
    147 [‚©‚çíœ‚·‚éD
     130 *  オブジェクト待ちキューからの削除
     131 *
     132 *  p_tcbで指定されるタスクが,同期・通信オブジェクトの待ちキューにつ
     133 *  ながれていれば,待ちキューから削除する.
    148134 */
    149135Inline void
     
    156142
    157143/*
    158  *  ŽžŠÔ‘Ò‚¿‚Ì‚½‚߂̃^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^‰ðœ
    159  *
    160  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ɑ΂µ‚āCŽžŠÔ‘Ò‚¿‚Ì‚½‚߂̃^ƒCƒ€ƒCƒxƒ“ƒgƒu
    161  *  ƒƒbƒN‚ª“o˜^‚³‚ê‚Ä‚¢‚ê‚΁C‚»‚ê‚ð“o˜^‰ðœ‚·‚éD
     144 *  時間待ちのためのタイムイベントブロックの登録解除
     145 *
     146 *  p_tcbで指定されるタスクに対して,時間待ちのためのタイムイベントブ
     147 *  ロックが登録されていれば,それを登録解除する.
    162148 */
    163149Inline void
     
    170156
    171157/*
    172  *  ‘Ò‚¿‰ðœ
    173  *
    174  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚Ì‘Ò‚¿ó‘Ô‚ð‰ðœ‚·‚éD‹ï‘Ì“I‚ɂ́Cƒ^ƒCƒ€ƒC
    175  *  ƒxƒ“ƒgƒuƒƒbƒN‚ª“o˜^‚³‚ê‚Ä‚¢‚ê‚΁C‚»‚ê‚ð“o˜^‰ðœ‚·‚éD‚Ü‚½Cƒ^ƒXƒN
    176  *  ó‘Ô‚ðXV‚µC‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚©‚ç‚Ì•Ô’l‚ðE_OK‚Æ‚·‚éD‘Ò‚¿ƒLƒ
    177 [
    178  *  ‚©‚ç‚̍폜‚͍s‚í‚È‚¢D‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚ւ̃fƒBƒXƒpƒbƒ`‚ª•K—v‚ȏê
    179  *  ‡‚É‚Ítrue‚ð•Ô‚·D
     158 *  待ち解除
     159 *
     160 *  p_tcbで指定されるタスクの待ち状態を解除する.具体的には,タイムイ
     161 *  ベントブロックが登録されていれば,それを登録解除する.また,タスク
     162 *  状態を更新し,待ち解除したタスクからの返値をE_OKとする.待ちキュー
     163 *  からの削除は行わない.待ち解除したタスクへのディスパッチが必要な場
     164 *  合にはtrueを返す.
    180165 */
    181166extern bool_t   wait_complete(TCB *p_tcb);
    182167
    183168/*
    184  *  ƒ^ƒCƒ€ƒAƒEƒg‚É”º‚¤‘Ò‚¿‰ðœ
    185  *
    186  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚ªC‘Ò‚¿ƒLƒ
    187 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚ê‚Α҂¿ƒLƒ
    188 [
    189  *  ‚©‚çíœ‚µCƒ^ƒXƒNó‘Ô‚ðXV‚·‚éD‚Ü‚½C‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚©‚ç‚Ì•Ô
    190  *  ’l‚ðCwait_tmout‚Å‚ÍE_TMOUTCwait_tmout_ok‚Å‚ÍE_OK‚Æ‚·‚éD‘Ò‚¿‰ðœ
    191  *  ‚µ‚½ƒ^ƒXƒN‚ւ̃fƒBƒXƒpƒbƒ`‚ª•K—v‚ÈŽž‚́Creqflg‚ðtrue‚É‚·‚éD
    192  *
    193  *  wait_tmout_ok‚́Cdly_tsk‚ÅŽg‚¤‚½‚ß‚Ì‚à‚̂ŁC‘Ò‚¿ƒLƒ
    194 [‚©‚çíœ‚·‚é
    195  *  ˆ—‚ðs‚í‚È‚¢D
    196  *
    197  *  ‚¢‚¸‚ê‚̊֐”‚àCƒ^ƒCƒ€ƒCƒxƒ“ƒg‚̃R[ƒ‹ƒoƒbƒNŠÖ”‚Æ‚µ‚Ä—p‚¢‚邽‚ß‚Ì
    198  *  ‚à‚̂ŁCŠ„ž‚݃nƒ“ƒhƒ‰‚©‚çŒÄ‚яo‚³‚ê‚邱‚Æ‚ð‘z’肵‚Ä‚¢‚éD
     169 *  タイムアウトに伴う待ち解除
     170 *
     171 *  p_tcbで指定されるタスクが,待ちキューにつながれていれば待ちキュー
     172 *  から削除し,タスク状態を更新する.また,待ち解除したタスクからの返
     173 *  値を,wait_tmoutではE_TMOUT,wait_tmout_okではE_OKとする.待ち解除
     174 *  したタスクへのディスパッチが必要な時は,reqflgをtrueにする.
     175 *
     176 *  wait_tmout_okは,dly_tskで使うためのもので,待ちキューから削除する
     177 *  処理を行わない.
     178 *
     179 *  いずれの関数も,タイムイベントのコールバック関数として用いるための
     180 *  もので,割込みハンドラから呼び出されることを想定している.
    199181 */
    200182extern void     wait_tmout(TCB *p_tcb);
     
    202184
    203185/*
    204  *  ‘Ò‚¿ó‘Ô‚Ì‹­§‰ðœ
    205  *
    206  *  p_tcb‚ÅŽw’肳‚ê‚éƒ^ƒXƒN‚Ì‘Ò‚¿ó‘Ô‚ð‹­§“I‚É‰ðœ‚·‚éD‹ï‘Ì“I‚ɂ́C
    207  *  ƒ^ƒXƒN‚ª‘Ò‚¿ƒLƒ
    208 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚ê‚Α҂¿ƒLƒ
    209 [‚©‚çíœ‚µCƒ^ƒCƒ€ƒC
    210  *  ƒxƒ“ƒgƒuƒƒbƒN‚ª“o˜^‚³‚ê‚Ä‚¢‚ê‚΂»‚ê‚ð“o˜^‰ðœ‚·‚éD‚Ü‚½Cƒ^ƒXƒN‚Ì
    211  *  ó‘Ô‚ðXV‚µC‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚©‚ç‚Ì•Ô’l‚ðE_RLWAI‚Æ‚·‚éD‚Ü‚½C
    212  *  ‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚ւ̃fƒBƒXƒpƒbƒ`‚ª•K—v‚ȏꍇ‚É‚Ítrue‚ð•Ô‚·D
     186 *  待ち状態の強制解除
     187 *
     188 *  p_tcbで指定されるタスクの待ち状態を強制的に解除する.具体的には,
     189 *  タスクが待ちキューにつながれていれば待ちキューから削除し,タイムイ
     190 *  ベントブロックが登録されていればそれを登録解除する.また,タスクの
     191 *  状態を更新し,待ち解除したタスクからの返値をE_RLWAIとする.また,
     192 *  待ち解除したタスクへのディスパッチが必要な場合にはtrueを返す.
    213193 */
    214194extern bool_t   wait_release(TCB *p_tcb);
    215195
    216196/*
    217  *  ‘Ò‚¿ƒLƒ
    218 [‚̐擪‚̃^ƒXƒNID
    219  *
    220  *  p_wait_queue‚ÅŽw’肵‚½‘Ò‚¿ƒLƒ
    221 [‚̐擪‚̃^ƒXƒNID‚ð•Ô‚·D‘Ò‚¿ƒLƒ
    222 [
    223  *  ‚ª‹ó‚̏ꍇ‚ɂ́CTSK_NONE‚ð•Ô‚·D
     197 *  待ちキューの先頭のタスクID
     198 *
     199 *  p_wait_queueで指定した待ちキューの先頭のタスクIDを返す.待ちキュー
     200 *  が空の場合には,TSK_NONEを返す.
    224201 */
    225202Inline ID
     
    235212
    236213/*
    237  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª‘€ìƒ‹[ƒ`ƒ“
    238  *
    239  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚ÆŠÇ—ƒuƒƒbƒN‚̐擪•”•ª‚Í‹¤
    240  *  ’Ê‚É‚È‚Á‚Ä‚¢‚éDˆÈ‰º‚́C‚»‚Ì‹¤’Ê•”•ª‚ðˆµ‚¤‚½‚ß‚ÌŒ^‚¨‚æ‚у‹[ƒ`ƒ“ŒQ
    241  *  ‚Å‚ ‚éD
    242  *
    243  *  •¡”‚Ì‘Ò‚¿ƒLƒ
    244 [‚ðŽ‚Â“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏ꍇCæ“ªˆÈŠO‚Ì‘Ò‚¿
    245  *  ƒLƒ
    246 [‚𑀍삷‚éê‡‚ɂ́C‚±‚ê‚ç‚̃‹[ƒ`ƒ“‚ÍŽg‚¦‚È‚¢D‚Ü‚½CƒIƒuƒWƒF
    247  *  ƒNƒg‘®«‚ÌTA_TPRIƒrƒbƒg‚ðŽQÆ‚·‚é‚̂ŁC‚±‚̃rƒbƒg‚𑼂̖ړI‚ÉŽg‚Á‚Ä
    248  *  ‚¢‚éê‡‚àC‚±‚ê‚ç‚̃‹[ƒ`ƒ“‚ÍŽg‚¦‚È‚¢D
    249  */
    250 
    251 /*
    252  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚̏‰Šú‰»ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
     214 *  同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン
     215 *
     216 *  同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共
     217 *  通になっている.以下は,その共通部分を扱うための型およびルーチン群
     218 *  である.
     219 *
     220 *  複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち
     221 *  キューを操作する場合には,これらのルーチンは使えない.また,オブジェ
     222 *  クト属性のTA_TPRIビットを参照するので,このビットを他の目的に使って
     223 *  いる場合も,これらのルーチンは使えない.
     224 */
     225
     226/*
     227 *  同期・通信オブジェクトの初期化ブロックの共通部分
    253228 */
    254229typedef struct wait_object_initialization_block {
    255         ATR                     wobjatr;                /* ƒIƒuƒWƒFƒNƒg‘®« */
     230        ATR                     wobjatr;                /* オブジェクト属性 */
    256231} WOBJINIB;
    257232
    258233/*
    259  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
     234 *  同期・通信オブジェクトの管理ブロックの共通部分
    260235 */
    261236typedef struct wait_object_control_block {
    262         QUEUE           wait_queue;             /* ‘Ò‚¿ƒLƒ
    263 [ */
    264         const WOBJINIB *p_wobjinib;     /* ‰Šú‰»ƒuƒƒbƒN‚ւ̃|ƒCƒ“ƒ^ */
     237        QUEUE           wait_queue;             /* 待ちキュー */
     238        const WOBJINIB *p_wobjinib;     /* 初期化ブロックへのポインタ */
    265239} WOBJCB;
    266240
    267241/*
    268  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿î•ñƒuƒƒbƒN‚Ì‹¤’Ê•”•ª
    269  *
    270  *  ‚±‚̍\‘¢‘̂́C‘Ò‚¿î•ñƒuƒƒbƒNiWINFOj‚ðŠg’£iƒIƒuƒWƒFƒNƒgŽwŒüŒ¾
    271  *  Œê‚ÌŒp³‚É‘Š“–j‚µ‚½‚à‚Ì‚Å‚ ‚邪CWINFO‚ª‹¤—p‘Ì‚Å’è‹`‚³‚ê‚Ä‚¢‚邽
    272  *  ‚߂ɁC1‚‚̃tƒB[ƒ‹ƒh‚Æ‚µ‚ÄŠÜ‚ß‚Ä‚¢‚éD
     242 *  同期・通信オブジェクトの待ち情報ブロックの共通部分
     243 *
     244 *  この構造体は,待ち情報ブロック(WINFO)を拡張(オブジェクト指向言
     245 *  語の継承に相当)したものであるが,WINFOが共用体で定義されているた
     246 *  めに,1つのフィールドとして含めている.
    273247 */
    274248typedef struct wait_object_waiting_information {
    275         WINFO   winfo;                  /* •W€‚Ì‘Ò‚¿î•ñƒuƒƒbƒN */
    276         WOBJCB  *p_wobjcb;              /* ‘Ò‚¿ƒIƒuƒWƒFƒNƒg‚ÌŠÇ—ƒuƒƒbƒN */
     249        WINFO   winfo;                  /* 標準の待ち情報ブロック */
     250        WOBJCB  *p_wobjcb;              /* 待ちオブジェクトの管理ブロック */
    277251} WINFO_WOBJ;
    278252
    279253/*
    280  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿ó‘Ô‚Ö‚Ì‘JˆÚ
     254 *  同期・通信オブジェクトに対する待ち状態への遷移
    281255 * 
    282  *  ŽÀs’†‚̃^ƒXƒN‚ð‘Ò‚¿ó‘Ô‚É‘JˆÚ‚³‚¹C“¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚Ì‘Ò‚¿ƒLƒ
    283 [
    284  *  ‚ɂ‚Ȃ®D‚Ü‚½C‘Ò‚¿î•ñƒuƒƒbƒNiWINFOj‚Ìp_wobjcb‚ðÝ’è‚·‚éD
    285  *  wobj_make_wait_tmout‚́Cƒ^ƒCƒ€ƒCƒxƒ“ƒgƒuƒƒbƒN‚Ì“o˜^‚às‚¤D
     256 *  実行中のタスクを待ち状態に遷移させ,同期・通信オブジェクトの待ちキュー
     257 *  につなぐ.また,待ち情報ブロック(WINFO)のp_wobjcbを設定する.
     258 *  wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う.
    286259 */
    287260extern void     wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo);
     
    290263
    291264/*
    292  *  ƒ^ƒXƒN—Dæ“x•ÏXŽž‚̏ˆ—
    293  *
    294  *  “¯ŠúE’ʐMƒIƒuƒWƒFƒNƒg‚ɑ΂·‚é‘Ò‚¿ó‘Ô‚É‚ ‚éƒ^ƒXƒN‚Ì—Dæ“x‚ª•ÏX‚³
    295  *  ‚ꂽê‡‚ɁC‘Ò‚¿ƒLƒ
    296 [‚Ì’†‚ł̃^ƒXƒN‚̈ʒu‚ðC³‚·‚éD
     265 *  タスク優先度変更時の処理
     266 *
     267 *  同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ
     268 *  れた場合に,待ちキューの中でのタスクの位置を修正する.
    297269 */
    298270Inline void
     
    306278
    307279/*
    308  *  ‘Ò‚¿ƒLƒ
    309 [‚̏‰Šú‰»
    310  *
    311  *  ‘Ò‚¿ƒLƒ
    312 [‚ɂ‚Ȃª‚ê‚Ä‚¢‚éƒ^ƒXƒN‚ð‚·‚×‚Ä‘Ò‚¿‰ðœ‚·‚éD‘Ò‚¿‰ðœ‚µ‚½
    313  *  ƒ^ƒXƒN‚©‚ç‚Ì•Ô’l‚́CE_DLT‚Æ‚·‚éD‘Ò‚¿‰ðœ‚µ‚½ƒ^ƒXƒN‚ւ̃fƒBƒXƒpƒbƒ`
    314  *  ‚ª•K—v‚ȏꍇ‚ÍtrueC‚»‚¤‚Å‚È‚¢ê‡‚Ífalse‚ð•Ô‚·D
     280 *  待ちキューの初期化
     281 *
     282 *  待ちキューにつながれているタスクをすべて待ち解除する.待ち解除した
     283 *  タスクからの返値は,E_DLTとする.待ち解除したタスクへのディスパッチ
     284 *  が必要な場合はtrue,そうでない場合はfalseを返す.
    315285 */
    316286extern bool_t   init_wait_queue(QUEUE *p_wait_queue);
Note: See TracChangeset for help on using the changeset viewer.