Changeset 167 for UsbWattMeter/trunk/asp_dcre/kernel
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (8 years ago)
- 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
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * A[nh@\44 * アラームハンドラ機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_ALM_ENTER … … 121 117 122 118 /* 123 * A[nhÌ119 * アラームハンドラの数 124 120 */ 125 121 #define tnum_alm ((uint_t)(tmax_almid - TMIN_ALMID + 1)) … … 127 123 128 124 /* 129 * A[nhID©çA[nhÇubNðæèo·½ßÌ}N125 * アラームハンドラIDからアラームハンドラ管理ブロックを取り出すためのマクロ 130 126 */ 131 127 #define INDEX_ALM(almid) ((uint_t)((almid) - TMIN_ALMID)) … … 135 131 136 132 /* 137 * gpµÄ¢È¢A[nhÇubNÌXg133 * 使用していないアラームハンドラ管理ブロックのリスト 138 134 * 139 * A[nhÇubNÌæªÉÍL 140 [ÉÂÈ®½ßÌÌæªÈ 141 * ¢½ßC^CCxgubNitmevtbjÌÌæðp¢éD 135 * アラームハンドラ管理ブロックの先頭にはキューにつなぐための領域がな 136 * いため,タイムイベントブロック(tmevtb)の領域を用いる. 142 137 */ 143 138 QUEUE free_almcb; 144 139 145 140 /* 146 * A[nh@\Ìú»141 * アラームハンドラ機能の初期化 147 142 */ 148 143 void … … 171 166 172 167 /* 173 * A[nh̶¬168 * アラームハンドラの生成 174 169 */ 175 170 #ifdef TOPPERS_acre_alm … … 213 208 214 209 /* 215 * A[nhÌí210 * アラームハンドラの削除 216 211 */ 217 212 #ifdef TOPPERS_del_alm … … 257 252 258 253 /* 259 * A[nhÌ®ìJn254 * アラームハンドラの動作開始 260 255 */ 261 256 #ifdef TOPPERS_sta_alm … … 298 293 299 294 /* 300 * A[nhÌ®ìJniñ^XNReLXgpj295 * アラームハンドラの動作開始(非タスクコンテキスト用) 301 296 */ 302 297 #ifdef TOPPERS_ista_alm … … 339 334 340 335 /* 341 * A[nhÌ®ìâ~336 * アラームハンドラの動作停止 342 337 */ 343 338 #ifdef TOPPERS_stp_alm … … 375 370 376 371 /* 377 * A[nhÌ®ìâ~iñ^XNReLXgpj372 * アラームハンドラの動作停止(非タスクコンテキスト用) 378 373 */ 379 374 #ifdef TOPPERS_istp_alm … … 411 406 412 407 /* 413 * A[nhÌóÔQÆ408 * アラームハンドラの状態参照 414 409 */ 415 410 #ifdef TOPPERS_ref_alm … … 450 445 451 446 /* 452 * A[nhN®[`447 * アラームハンドラ起動ルーチン 453 448 */ 454 449 #ifdef TOPPERS_almcal … … 460 455 461 456 /* 462 * A[nhðâ~óÔÉ·éD457 * アラームハンドラを停止状態にする. 463 458 */ 464 459 p_almcb->almsta = false; 465 460 466 461 /* 467 * A[nhðCCPUbNðóÔÅÄÑo·D462 * アラームハンドラを,CPUロック解除状態で呼び出す. 468 463 */ 469 464 saved_ipm = i_get_ipm(); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/alarm.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * A[nh@\44 * アラームハンドラ機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * A[nhú»ubN54 * アラームハンドラ初期化ブロック 59 55 */ 60 56 typedef struct alarm_handler_initialization_block { 61 ATR almatr; /* A[nh®«*/62 intptr_t exinf; /* A[nhÌg£îñ*/63 ALMHDR almhdr; /* A[nhÌN®Ôn*/57 ATR almatr; /* アラームハンドラ属性 */ 58 intptr_t exinf; /* アラームハンドラの拡張情報 */ 59 ALMHDR almhdr; /* アラームハンドラの起動番地 */ 64 60 } ALMINIB; 65 61 66 62 /* 67 * A[nhÇubN63 * アラームハンドラ管理ブロック 68 64 */ 69 65 typedef struct alarm_handler_control_block { 70 const ALMINIB *p_alminib; /* ú»ubNÖÌ|C^*/71 bool_t almsta; /* A[nhÌ®ìóÔ*/72 TMEVTB tmevtb; /* ^CCxgubN*/66 const ALMINIB *p_alminib; /* 初期化ブロックへのポインタ */ 67 bool_t almsta; /* アラームハンドラの動作状態 */ 68 TMEVTB tmevtb; /* タイムイベントブロック */ 73 69 } ALMCB; 74 70 75 71 /* 76 * gpµÄ¢È¢A[nhÇubNÌXg72 * 使用していないアラームハンドラ管理ブロックのリスト 77 73 */ 78 74 extern QUEUE free_almcb; 79 75 80 76 /* 81 * A[nhIDÌÅålikernel_cfg.cj77 * アラームハンドラIDの最大値(kernel_cfg.c) 82 78 */ 83 79 extern const ID tmax_almid; … … 85 81 86 82 /* 87 * A[nhú»ubNÌGAikernel_cfg.cj83 * アラームハンドラ初期化ブロックのエリア(kernel_cfg.c) 88 84 */ 89 85 extern const ALMINIB alminib_table[]; … … 91 87 92 88 /* 93 * A[nhÇubNÌGAikernel_cfg.cj89 * アラームハンドラ管理ブロックのエリア(kernel_cfg.c) 94 90 */ 95 91 extern ALMCB almcb_table[]; 96 92 97 93 /* 98 * A[nhÇubN©çA[nhIDðæèo·½ßÌ99 * }N94 * アラームハンドラ管理ブロックからアラームハンドラIDを取り出すための 95 * マクロ 100 96 */ 101 97 #define ALMID(p_almcb) ((ID)(((p_almcb) - almcb_table) + TMIN_ALMID)) 102 98 103 99 /* 104 * A[nh@\Ìú»100 * アラームハンドラ機能の初期化 105 101 */ 106 102 extern void initialize_alarm(void); 107 103 108 104 /* 109 * A[nhN®[`105 * アラームハンドラ起動ルーチン 110 106 */ 111 107 extern void call_almhdr(ALMCB *p_almcb); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/allfunc.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 34 * ÆÓ·é±ÆD 35 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 41 37 * 42 38 * @(#) $Id$ … … 44 40 45 41 /* 46 * ·×ÄÌÖðRpC·é½ßÌè`42 * すべての関数をコンパイルするための定義 47 43 */ 48 44 -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/check.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * G[`FbNp}N44 * エラーチェック用マクロ 49 45 */ 50 46 … … 53 49 54 50 /* 55 * \ñ®«G[Ì`FbNiE_PARj51 * 予約属性エラーのチェック(E_PAR) 56 52 */ 57 53 #define CHECK_RSATR(atr, valid_atr) do { \ … … 63 59 64 60 /* 65 * DæxÌÍÍÌ»è61 * 優先度の範囲の判定 66 62 */ 67 63 #define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) … … 80 76 81 77 /* 82 * ^XNDæxÌ`FbNiE_PARj78 * タスク優先度のチェック(E_PAR) 83 79 */ 84 80 #define CHECK_TPRI(tpri) do { \ … … 104 100 105 101 /* 106 * f[^DæxÌ`FbNiE_PARj102 * データ優先度のチェック(E_PAR) 107 103 */ 108 104 #define CHECK_DPRI(dpri) do { \ … … 114 110 115 111 /* 116 * bZ[WDæxÌ`FbNiE_PARj112 * メッセージ優先度のチェック(E_PAR) 117 113 */ 118 114 #define CHECK_MPRI(mpri) do { \ … … 124 120 125 121 /* 126 * ÝT[rX[`DæxÌ`FbNiE_PARj122 * 割込みサービスルーチン優先度のチェック(E_PAR) 127 123 */ 128 124 #define CHECK_ISRPRI(isrpri) do { \ … … 134 130 135 131 /* 136 * ^CAEgwèlÌ`FbNiE_PARj132 * タイムアウト指定値のチェック(E_PAR) 137 133 */ 138 134 #define CHECK_TMOUT(tmout) do { \ … … 144 140 145 141 /* 146 * ÝDæxÌ`FbNiE_PARj142 * 割込み優先度のチェック(E_PAR) 147 143 */ 148 144 #define CHECK_INTPRI_CHGIPM(intpri) do { \ … … 154 150 155 151 /* 156 * ÝÔÌ`FbNiE_PARj152 * 割込み番号のチェック(E_PAR) 157 153 */ 158 154 #define CHECK_INTNO_CREISR(intno) do { \ … … 171 167 172 168 /* 173 * ACµÄ¢é©Ì»è169 * アラインしているかの判定 174 170 */ 175 171 #define ALIGNED(val, align) ((((uintptr_t)(val)) & ((align) - 1U)) == 0U) … … 206 202 207 203 /* 208 * NULL ÅÈ¢±ÆÌ`FbN204 * NULLでないことのチェック 209 205 */ 210 206 #ifdef CHECK_FUNC_NONNULL … … 215 211 216 212 /* 217 * ÖÌæªÔnÌ`FbNiE_PARj213 * 関数の先頭番地のチェック(E_PAR) 218 214 */ 219 215 #define CHECK_ALIGN_FUNC(func) do { \ … … 232 228 233 229 /* 234 * X^bNTCYÌ`FbNiE_PARj230 * スタックサイズのチェック(E_PAR) 235 231 */ 236 232 #define CHECK_ALIGN_STKSZ(stksz) do { \ … … 242 238 243 239 /* 244 * X^bNÌæªÔnÌ`FbNiE_PARj240 * スタックの先頭番地のチェック(E_PAR) 245 241 */ 246 242 #define CHECK_ALIGN_STACK(stack) do { \ … … 252 248 253 249 /* 254 * Åè·v[ÌæÌæªÔnÌ`FbNiE_PARj250 * 固定長メモリプール領域の先頭番地のチェック(E_PAR) 255 251 */ 256 252 #define CHECK_ALIGN_MPF(mpf) do { \ … … 262 258 263 259 /* 264 * ÇÌæÌæªÔnÌ`FbNiE_PARj260 * 管理領域の先頭番地のチェック(E_PAR) 265 261 */ 266 262 #define CHECK_ALIGN_MB(mb) do { \ … … 272 268 273 269 /* 274 * »Ì¼Ìp[^G[Ì`FbNiE_PARj270 * その他のパラメータエラーのチェック(E_PAR) 275 271 */ 276 272 #define CHECK_PAR(exp) do { \ … … 282 278 283 279 /* 284 * IuWFNgIDÌÍÍÌ»è280 * オブジェクトIDの範囲の判定 285 281 */ 286 282 #define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid) … … 296 292 297 293 /* 298 * IuWFNgIDÌ`FbNiE_IDj294 * オブジェクトIDのチェック(E_ID) 299 295 */ 300 296 #define CHECK_TSKID(tskid) do { \ … … 376 372 377 373 /* 378 * ÄoµReLXgÌ`FbNiE_CTXj374 * 呼出しコンテキストのチェック(E_CTX) 379 375 */ 380 376 #define CHECK_TSKCTX() do { \ … … 393 389 394 390 /* 395 * ÄoµReLXgÆCPUbNóÔÌ`FbNiE_CTXj391 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 396 392 */ 397 393 #define CHECK_TSKCTX_UNL() do { \ … … 410 406 411 407 /* 412 * fBXpb`Û¯óÔÅÈ¢©Ì`FbNiE_CTXj408 * ディスパッチ保留状態でないかのチェック(E_CTX) 413 409 */ 414 410 #define CHECK_DISPATCH() do { \ … … 420 416 421 417 /* 422 * »Ì¼ÌReLXgG[Ì`FbNiE_CTXj418 * その他のコンテキストエラーのチェック(E_CTX) 423 419 */ 424 420 #define CHECK_CTX(exp) do { \ … … 430 426 431 427 /* 432 * ©^XNðwèµÄ¢È¢©Ì`FbNiE_ILUSEj428 * 自タスクを指定していないかのチェック(E_ILUSE) 433 429 */ 434 430 #define CHECK_NONSELF(p_tcb) do { \ … … 440 436 441 437 /* 442 * »Ì¼Ìs³gpG[Ì`FbNiE_ILUSEj438 * その他の不正使用エラーのチェック(E_ILUSE) 443 439 */ 444 440 #define CHECK_ILUSE(exp) do { \ … … 450 446 451 447 /* 452 * ¢T|[g@\G[Ì`FbNiE_NOSPTj448 * 未サポート機能エラーのチェック(E_NOSPT) 453 449 */ 454 450 #define CHECK_NOSPT(exp) do { \ … … 460 456 461 457 /* 462 * ÃIÈIuWFNgóÔG[Ì`FbNiE_OBJj458 * 静的なオブジェクト状態エラーのチェック(E_OBJ) 463 459 */ 464 460 #define CHECK_OBJ(exp) do { \ -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/cyclic.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * üúnh@\44 * 周期ハンドラ機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_CYC_ENTER … … 105 101 106 102 /* 107 * üúnhÌ103 * 周期ハンドラの数 108 104 */ 109 105 #define tnum_cyc ((uint_t)(tmax_cycid - TMIN_CYCID + 1)) … … 111 107 112 108 /* 113 * üúnhID©çüúnhÇubNðæèo·½ßÌ}N109 * 周期ハンドラIDから周期ハンドラ管理ブロックを取り出すためのマクロ 114 110 */ 115 111 #define INDEX_CYC(cycid) ((uint_t)((cycid) - TMIN_CYCID)) … … 117 113 118 114 /* 119 * üúnhN®Ì½ßÌ^CCxgubNÌo^115 * 周期ハンドラ起動のためのタイムイベントブロックの登録 120 116 */ 121 117 Inline void … … 130 126 131 127 /* 132 * gpµÄ¢È¢üúnhÇubNÌXg128 * 使用していない周期ハンドラ管理ブロックのリスト 133 129 * 134 * üúnhÇubNÌæªÉÍL 135 [ÉÂÈ®½ßÌÌæªÈ¢½ 136 * ßC^CCxgubNitmevtbjÌÌæðp¢éD 130 * 周期ハンドラ管理ブロックの先頭にはキューにつなぐための領域がないた 131 * め,タイムイベントブロック(tmevtb)の領域を用いる. 137 132 */ 138 133 QUEUE free_cyccb; 139 134 140 135 /* 141 * üúnh@\Ìú»136 * 周期ハンドラ機能の初期化 142 137 */ 143 138 void … … 172 167 173 168 /* 174 * üúnh̶¬169 * 周期ハンドラの生成 175 170 */ 176 171 #ifdef TOPPERS_acre_cyc … … 225 220 226 221 /* 227 * üúnhÌí222 * 周期ハンドラの削除 228 223 */ 229 224 #ifdef TOPPERS_del_cyc … … 269 264 270 265 /* 271 * üúnhÌ®ìJn266 * 周期ハンドラの動作開始 272 267 */ 273 268 #ifdef TOPPERS_sta_cyc … … 308 303 309 304 /* 310 * üúnhÌ®ìâ~305 * 周期ハンドラの動作停止 311 306 */ 312 307 #ifdef TOPPERS_stp_cyc … … 344 339 345 340 /* 346 * üúnhÌóÔQÆ341 * 周期ハンドラの状態参照 347 342 */ 348 343 #ifdef TOPPERS_ref_cyc … … 383 378 384 379 /* 385 * üúnhN®[`380 * 周期ハンドラ起動ルーチン 386 381 */ 387 382 #ifdef TOPPERS_cyccal … … 393 388 394 389 /* 395 * ñÌN®Ì½ßÌ^CCxgubNðo^·éD390 * 次回の起動のためのタイムイベントブロックを登録する. 396 391 * 397 * ¯¶^CeBbNÅüúnhðÄxN®·×«êÉÍC±Ì398 * Ö©çsignal_timeÉßÁ½ãÉCÄx±ÌÖªÄÎêé±ÆÉÈ399 * éD392 * 同じタイムティックで周期ハンドラを再度起動すべき場合には,この 393 * 関数からsignal_timeに戻った後に,再度この関数が呼ばれることにな 394 * る. 400 395 */ 401 396 tmevtb_enqueue_cyc(p_cyccb, p_cyccb->evttim + p_cyccb->p_cycinib->cyctim); 402 397 403 398 /* 404 * üúnhðCCPUbNðóÔÅÄÑo·D399 * 周期ハンドラを,CPUロック解除状態で呼び出す. 405 400 */ 406 401 saved_ipm = i_get_ipm(); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/cyclic.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * üúnh@\44 * 周期ハンドラ機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * üúnhú»ubN54 * 周期ハンドラ初期化ブロック 59 55 */ 60 56 typedef struct cyclic_handler_initialization_block { 61 ATR cycatr; /* üúnh®«*/62 intptr_t exinf; /* üúnhÌg£îñ*/63 CYCHDR cychdr; /* üúnhÌN®Ôn*/64 RELTIM cyctim; /* üúnhÌN®üú*/65 RELTIM cycphs; /* üúnhÌN®Ê*/57 ATR cycatr; /* 周期ハンドラ属性 */ 58 intptr_t exinf; /* 周期ハンドラの拡張情報 */ 59 CYCHDR cychdr; /* 周期ハンドラの起動番地 */ 60 RELTIM cyctim; /* 周期ハンドラの起動周期 */ 61 RELTIM cycphs; /* 周期ハンドラの起動位相 */ 66 62 } CYCINIB; 67 63 68 64 /* 69 * üúnhÇubN65 * 周期ハンドラ管理ブロック 70 66 */ 71 67 typedef struct cyclic_handler_control_block { 72 const CYCINIB *p_cycinib; /* ú»ubNÖÌ|C^*/73 bool_t cycsta; /* üúnhÌ®ìóÔ*/74 EVTTIM evttim; /* ÉüúnhðN®·é*/75 TMEVTB tmevtb; /* ^CCxgubN*/68 const CYCINIB *p_cycinib; /* 初期化ブロックへのポインタ */ 69 bool_t cycsta; /* 周期ハンドラの動作状態 */ 70 EVTTIM evttim; /* 次に周期ハンドラを起動する時刻 */ 71 TMEVTB tmevtb; /* タイムイベントブロック */ 76 72 } CYCCB; 77 73 78 74 /* 79 * gpµÄ¢È¢üúnhÇubNÌXg75 * 使用していない周期ハンドラ管理ブロックのリスト 80 76 */ 81 77 extern QUEUE free_cyccb; 82 78 83 79 /* 84 * üúnhIDÌÅålikernel_cfg.cj80 * 周期ハンドラIDの最大値(kernel_cfg.c) 85 81 */ 86 82 extern const ID tmax_cycid; … … 88 84 89 85 /* 90 * üúnhú»ubNÌGAikernel_cfg.cj86 * 周期ハンドラ初期化ブロックのエリア(kernel_cfg.c) 91 87 */ 92 88 extern const CYCINIB cycinib_table[]; … … 94 90 95 91 /* 96 * üúnhÇubNÌGAikernel_cfg.cj92 * 周期ハンドラ管理ブロックのエリア(kernel_cfg.c) 97 93 */ 98 94 extern CYCCB cyccb_table[]; 99 95 100 96 /* 101 * üúnhÇubN©çüúnhIDðæèo·½ßÌ}N97 * 周期ハンドラ管理ブロックから周期ハンドラIDを取り出すためのマクロ 102 98 */ 103 99 #define CYCID(p_cyccb) ((ID)(((p_cyccb) - cyccb_table) + TMIN_CYCID)) 104 100 105 101 /* 106 * üúnh@\Ìú»102 * 周期ハンドラ機能の初期化 107 103 */ 108 104 extern void initialize_cyclic(void); 109 105 110 106 /* 111 * üúnhN®[`107 * 周期ハンドラ起動ルーチン 112 108 */ 113 109 extern void call_cychdr(CYCCB *p_cyccb); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/dataqueue.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * f[^L 49 [@\ 44 * データキュー機能 50 45 */ 51 46 … … 57 52 58 53 /* 59 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 60 55 */ 61 56 #ifndef LOG_ACRE_DTQ_ENTER … … 164 159 165 160 /* 166 * f[^L 167 [Ì 161 * データキューの数 168 162 */ 169 163 #define tnum_dtq ((uint_t)(tmax_dtqid - TMIN_DTQID + 1)) … … 171 165 172 166 /* 173 * f[^L 174 [ID©çf[^L 175 [ÇubNðæèo·½ßÌ}N 167 * データキューIDからデータキュー管理ブロックを取り出すためのマクロ 176 168 */ 177 169 #define INDEX_DTQ(dtqid) ((uint_t)((dtqid) - TMIN_DTQID)) … … 181 173 182 174 /* 183 * gpµÄ¢È¢f[^L 184 [ÇubNÌXg 175 * 使用していないデータキュー管理ブロックのリスト 185 176 */ 186 177 QUEUE free_dtqcb; 187 178 188 179 /* 189 * f[^L 190 [@\Ìú» 180 * データキュー機能の初期化 191 181 */ 192 182 void … … 219 209 220 210 /* 221 * f[^L 222 [ÇÌæÖÌf[^Ìi[ 211 * データキュー管理領域へのデータの格納 223 212 */ 224 213 #ifdef TOPPERS_dtqenq … … 238 227 239 228 /* 240 * f[^L 241 [ÇÌæÖÌf[^̧i[ 229 * データキュー管理領域へのデータの強制格納 242 230 */ 243 231 #ifdef TOPPERS_dtqfenq … … 262 250 263 251 /* 264 * f[^L 265 [ÇÌæ©çÌf[^Ìæoµ 252 * データキュー管理領域からのデータの取出し 266 253 */ 267 254 #ifdef TOPPERS_dtqdeq … … 281 268 282 269 /* 283 * f[^L 284 [ÖÌf[^M 270 * データキューへのデータ送信 285 271 */ 286 272 #ifdef TOPPERS_dtqsnd … … 310 296 311 297 /* 312 * f[^L 313 [ÖÌf[^§M 298 * データキューへのデータ強制送信 314 299 */ 315 300 #ifdef TOPPERS_dtqfsnd … … 334 319 335 320 /* 336 * f[^L 337 [©çÌf[^óM 321 * データキューからのデータ受信 338 322 */ 339 323 #ifdef TOPPERS_dtqrcv … … 372 356 373 357 /* 374 * f[^L 375 [̶¬ 358 * データキューの生成 376 359 */ 377 360 #ifdef TOPPERS_acre_dtq … … 432 415 433 416 /* 434 * f[^L 435 [Ìí 417 * データキューの削除 436 418 */ 437 419 #ifdef TOPPERS_del_dtq … … 483 465 484 466 /* 485 * f[^L 486 [ÖÌM 467 * データキューへの送信 487 468 */ 488 469 #ifdef TOPPERS_snd_dtq … … 528 509 529 510 /* 530 * f[^L 531 [ÖÌMi|[Oj 511 * データキューへの送信(ポーリング) 532 512 */ 533 513 #ifdef TOPPERS_psnd_dtq … … 568 548 569 549 /* 570 * f[^L 571 [ÖÌMi|[OCñ^XNReLXgpj 550 * データキューへの送信(ポーリング,非タスクコンテキスト用) 572 551 */ 573 552 #ifdef TOPPERS_ipsnd_dtq … … 608 587 609 588 /* 610 * f[^L 611 [ÖÌMi^CAEg èj 589 * データキューへの送信(タイムアウトあり) 612 590 */ 613 591 #ifdef TOPPERS_tsnd_dtq … … 659 637 660 638 /* 661 * f[^L 662 [Ö̧M 639 * データキューへの強制送信 663 640 */ 664 641 #ifdef TOPPERS_fsnd_dtq … … 696 673 697 674 /* 698 * f[^L 699 [Ö̧Miñ^XNReLXgpj 675 * データキューへの強制送信(非タスクコンテキスト用) 700 676 */ 701 677 #ifdef TOPPERS_ifsnd_dtq … … 733 709 734 710 /* 735 * f[^L 736 [©çÌóM 711 * データキューからの受信 737 712 */ 738 713 #ifdef TOPPERS_rcv_dtq … … 783 758 784 759 /* 785 * f[^L 786 [©çÌóMi|[Oj 760 * データキューからの受信(ポーリング) 787 761 */ 788 762 #ifdef TOPPERS_prcv_dtq … … 823 797 824 798 /* 825 * f[^L 826 [©çÌóMi^CAEg èj 799 * データキューからの受信(タイムアウトあり) 827 800 */ 828 801 #ifdef TOPPERS_trcv_dtq … … 878 851 879 852 /* 880 * f[^L 881 [ÌÄú» 853 * データキューの再初期化 882 854 */ 883 855 #ifdef TOPPERS_ini_dtq … … 922 894 923 895 /* 924 * f[^L 925 [ÌóÔQÆ 896 * データキューの状態参照 926 897 */ 927 898 #ifdef TOPPERS_ref_dtq -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/dataqueue.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * f[^L 49 [@\ 44 * データキュー機能 50 45 */ 51 46 … … 56 51 57 52 /* 58 * f[^ÇubN53 * データ管理ブロック 59 54 */ 60 55 typedef struct data_management_block { 61 intptr_t data; /* f[^{Ì*/56 intptr_t data; /* データ本体 */ 62 57 } DTQMB; 63 58 64 59 /* 65 * f[^L 66 [ú»ubN 60 * データキュー初期化ブロック 67 61 * 68 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ69 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC70 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD62 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 63 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 64 * 最初のフィールドが共通になっている. 71 65 */ 72 66 typedef 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; /* データキュー管理領域の先頭番地 */ 79 70 } DTQINIB; 80 71 81 72 /* 82 * f[^L 83 [ÇubN 73 * データキュー管理ブロック 84 74 * 85 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj86 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ87 * tB[hª¤ÊÉÈÁÄ¢éD75 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 76 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 77 * フィールドが共通になっている. 88 78 */ 89 79 typedef struct dataqueue_control_block { 90 QUEUE swait_queue; /* f[^L 91 [MÒ¿L 92 [ */ 93 const DTQINIB *p_dtqinib; /* ú»ubNÖÌ|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; /* 最後のデータの格納場所の次 */ 101 86 } DTQCB; 102 87 103 88 /* 104 * f[^L 105 [Ò¿îñubNÌè` 89 * データキュー待ち情報ブロックの定義 106 90 * 107 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ 108 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC 109 * ÅÌ2ÂÌtB[hª¤ÊÉÈÁÄ¢éD 110 * f[^L 111 [ÖÌMÒ¿Æf[^L 112 [©çÌóMÒ¿ÅC¯¶Ò¿î 113 * ñubNðg¤D 91 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 92 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 93 * 最初の2つのフィールドが共通になっている. 94 * データキューへの送信待ちとデータキューからの受信待ちで,同じ待ち情 95 * 報ブロックを使う. 114 96 */ 115 97 typedef struct dataqueue_waiting_information { 116 WINFO winfo; /* WÌÒ¿îñubN */ 117 DTQCB *p_dtqcb; /* ÒÁÄ¢éf[^L 118 [ÌÇubN */ 119 intptr_t data; /* óMf[^ */ 98 WINFO winfo; /* 標準の待ち情報ブロック */ 99 DTQCB *p_dtqcb; /* 待っているデータキューの管理ブロック */ 100 intptr_t data; /* 送受信データ */ 120 101 } WINFO_DTQ; 121 102 122 103 /* 123 * gpµÄ¢È¢f[^L 124 [ÇubNÌXg 104 * 使用していないデータキュー管理ブロックのリスト 125 105 */ 126 106 extern QUEUE free_dtqcb; 127 107 128 108 /* 129 * f[^L 130 [IDÌÅålikernel_cfg.cj 109 * データキューIDの最大値(kernel_cfg.c) 131 110 */ 132 111 extern const ID tmax_dtqid; … … 134 113 135 114 /* 136 * f[^L 137 [ú»ubNÌGAikernel_cfg.cj 115 * データキュー初期化ブロックのエリア(kernel_cfg.c) 138 116 */ 139 117 extern const DTQINIB dtqinib_table[]; … … 141 119 142 120 /* 143 * f[^L 144 [ÇubNÌGAikernel_cfg.cj 121 * データキュー管理ブロックのエリア(kernel_cfg.c) 145 122 */ 146 123 extern DTQCB dtqcb_table[]; 147 124 148 125 /* 149 * f[^L 150 [ÇubN©çf[^L 151 [IDðæèo·½ßÌ}N 126 * データキュー管理ブロックからデータキューIDを取り出すためのマクロ 152 127 */ 153 128 #define DTQID(p_dtqcb) ((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID)) 154 129 155 130 /* 156 * f[^L 157 [@\Ìú» 131 * データキュー機能の初期化 158 132 */ 159 133 extern void initialize_dataqueue(void); 160 134 161 135 /* 162 * f[^L 163 [ÇÌæÖÌf[^Ìi[ 136 * データキュー管理領域へのデータの格納 164 137 */ 165 138 extern void enqueue_data(DTQCB *p_dtqcb, intptr_t data); 166 139 167 140 /* 168 * f[^L 169 [ÇÌæÖÌf[^̧i[ 141 * データキュー管理領域へのデータの強制格納 170 142 */ 171 143 extern void force_enqueue_data(DTQCB *p_dtqcb, intptr_t data); 172 144 173 145 /* 174 * f[^L 175 [ÇÌæ©çÌf[^Ìæoµ 146 * データキュー管理領域からのデータの取出し 176 147 */ 177 148 extern void dequeue_data(DTQCB *p_dtqcb, intptr_t *p_data); 178 149 179 150 /* 180 * f[^L 181 [ÖÌf[^M 151 * データキューへのデータ送信 182 152 */ 183 153 extern bool_t send_data(DTQCB *p_dtqcb, intptr_t data, bool_t *p_dspreq); 184 154 185 155 /* 186 * f[^L 187 [ÖÌf[^§M 156 * データキューへのデータ強制送信 188 157 */ 189 158 extern bool_t force_send_data(DTQCB *p_dtqcb, intptr_t data); 190 159 191 160 /* 192 * f[^L 193 [©çÌf[^óM 161 * データキューからのデータ受信 194 162 */ 195 163 extern bool_t receive_data(DTQCB *p_dtqcb, intptr_t *p_data, -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/eventflag.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * CxgtO@\44 * イベントフラグ機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 59 55 */ 60 56 #ifndef LOG_ACRE_FLG_ENTER … … 139 135 140 136 /* 141 * CxgtOÌ137 * イベントフラグの数 142 138 */ 143 139 #define tnum_flg ((uint_t)(tmax_flgid - TMIN_FLGID + 1)) … … 145 141 146 142 /* 147 * CxgtOID©çCxgtOÇubNðæèo·½ßÌ}N143 * イベントフラグIDからイベントフラグ管理ブロックを取り出すためのマクロ 148 144 */ 149 145 #define INDEX_FLG(flgid) ((uint_t)((flgid) - TMIN_FLGID)) … … 153 149 154 150 /* 155 * gpµÄ¢È¢CxgtOÇubNÌXg151 * 使用していないイベントフラグ管理ブロックのリスト 156 152 */ 157 153 QUEUE free_flgcb; 158 154 159 155 /* 160 * CxgtO@\Ìú»156 * イベントフラグ機能の初期化 161 157 */ 162 158 void … … 186 182 187 183 /* 188 * CxgtOÒ¿ððÌ`FbN184 * イベントフラグ待ち解除条件のチェック 189 185 */ 190 186 #ifdef TOPPERS_flgcnd … … 207 203 208 204 /* 209 * CxgtO̶¬205 * イベントフラグの生成 210 206 */ 211 207 #ifdef TOPPERS_acre_flg … … 246 242 247 243 /* 248 * CxgtOÌí244 * イベントフラグの削除 249 245 */ 250 246 #ifdef TOPPERS_del_flg … … 290 286 291 287 /* 292 * CxgtOÌZbg288 * イベントフラグのセット 293 289 */ 294 290 #ifdef TOPPERS_set_flg … … 346 342 347 343 /* 348 * CxgtOÌZbgiñ^XNReLXgpj344 * イベントフラグのセット(非タスクコンテキスト用) 349 345 */ 350 346 #ifdef TOPPERS_iset_flg … … 398 394 399 395 /* 400 * CxgtOÌNA396 * イベントフラグのクリア 401 397 */ 402 398 #ifdef TOPPERS_clr_flg … … 431 427 432 428 /* 433 * CxgtOÒ¿429 * イベントフラグ待ち 434 430 */ 435 431 #ifdef TOPPERS_wai_flg … … 481 477 482 478 /* 483 * CxgtOÒ¿i|[Oj479 * イベントフラグ待ち(ポーリング) 484 480 */ 485 481 #ifdef TOPPERS_pol_flg … … 522 518 523 519 /* 524 * CxgtOÒ¿i^CAEg èj520 * イベントフラグ待ち(タイムアウトあり) 525 521 */ 526 522 #ifdef TOPPERS_twai_flg … … 578 574 579 575 /* 580 * CxgtOÌÄú»576 * イベントフラグの再初期化 581 577 */ 582 578 #ifdef TOPPERS_ini_flg … … 616 612 617 613 /* 618 * CxgtOÌóÔQÆ614 * イベントフラグの状態参照 619 615 */ 620 616 #ifdef TOPPERS_ref_flg -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/eventflag.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * CxgtO@\44 * イベントフラグ機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * CxgtOú»ubN53 * イベントフラグ初期化ブロック 58 54 * 59 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ60 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC61 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD55 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 56 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 57 * 最初のフィールドが共通になっている. 62 58 */ 63 59 typedef struct eventflag_initialization_block { 64 ATR flgatr; /* CxgtO®«*/65 FLGPTN iflgptn; /* CxgtOÌrbgp^[Ìúl*/60 ATR flgatr; /* イベントフラグ属性 */ 61 FLGPTN iflgptn; /* イベントフラグのビットパターンの初期値 */ 66 62 } FLGINIB; 67 63 68 64 /* 69 * CxgtOÇubN65 * イベントフラグ管理ブロック 70 66 * 71 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj72 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ73 * tB[hª¤ÊÉÈÁÄ¢éD67 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 68 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 69 * フィールドが共通になっている. 74 70 */ 75 71 typedef struct eventflag_control_block { 76 QUEUE wait_queue; /* CxgtOÒ¿L 77 [ */ 78 const FLGINIB *p_flginib; /* ú»ubNÖÌ|C^ */ 79 FLGPTN flgptn; /* CxgtO»Ýp^[ */ 72 QUEUE wait_queue; /* イベントフラグ待ちキュー */ 73 const FLGINIB *p_flginib; /* 初期化ブロックへのポインタ */ 74 FLGPTN flgptn; /* イベントフラグ現在パターン */ 80 75 } FLGCB; 81 76 82 77 /* 83 * CxgtOÒ¿îñubNÌè`78 * イベントフラグ待ち情報ブロックの定義 84 79 * 85 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ86 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC87 * ÅÌ2ÂÌtB[hª¤ÊÉÈÁÄ¢éD80 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 81 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 82 * 最初の2つのフィールドが共通になっている. 88 83 * 89 * flgptn ÍCwaiptn¨æÑwfmodeƯÉg¤±ÆÍÈ¢½ßC¤pÌðg90 * ¦Îðßñ·é±ÆªÂ\Å éD84 * flgptnは,waiptnおよびwfmodeと同時に使うことはないため,共用体を使 85 * えばメモリを節約することが可能である. 91 86 */ 92 87 typedef struct eventflag_waiting_information { 93 WINFO winfo; /* WÌÒ¿îñubN*/94 FLGCB *p_flgcb; /* ÒÁÄ¢éCxgtOÌÇubN*/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; /* 待ち解除時のパターン */ 98 93 } WINFO_FLG; 99 94 100 95 /* 101 * gpµÄ¢È¢CxgtOÇubNÌXg96 * 使用していないイベントフラグ管理ブロックのリスト 102 97 */ 103 98 extern QUEUE free_flgcb; 104 99 105 100 /* 106 * CxgtOIDÌÅålikernel_cfg.cj101 * イベントフラグIDの最大値(kernel_cfg.c) 107 102 */ 108 103 extern const ID tmax_flgid; … … 110 105 111 106 /* 112 * CxgtOú»ubNÌGAikernel_cfg.cj107 * イベントフラグ初期化ブロックのエリア(kernel_cfg.c) 113 108 */ 114 109 extern const FLGINIB flginib_table[]; … … 116 111 117 112 /* 118 * CxgtOÇubNÌGAikernel_cfg.cj113 * イベントフラグ管理ブロックのエリア(kernel_cfg.c) 119 114 */ 120 115 extern FLGCB flgcb_table[]; 121 116 122 117 /* 123 * CxgtOÇubN©çCxgtOIDðæèo·½ßÌ}N118 * イベントフラグ管理ブロックからイベントフラグIDを取り出すためのマクロ 124 119 */ 125 120 #define FLGID(p_flgcb) ((ID)(((p_flgcb) - flgcb_table) + TMIN_FLGID)) 126 121 127 122 /* 128 * CxgtO@\Ìú»123 * イベントフラグ機能の初期化 129 124 */ 130 125 extern void initialize_eventflag(void); 131 126 132 127 /* 133 * CxgtOÒ¿ððÌ`FbN128 * イベントフラグ待ち解除条件のチェック 134 129 */ 135 130 extern bool_t check_flg_cond(FLGCB *p_flgcb, FLGPTN waiptn, -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/exception.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * CPU áOÇ@\44 * CPU例外管理機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_XSNS_DPN_ENTER … … 73 69 74 70 /* 75 * CPU áOnhÇ@\Ìú»71 * CPU例外ハンドラ管理機能の初期化 76 72 */ 77 73 #ifdef TOPPERS_excini … … 93 89 94 90 /* 95 * CPU áO̶µ½ReLXgÌQÆ91 * CPU例外の発生したコンテキストの参照 96 92 */ 97 93 98 94 /* 99 * CPU áO¶ÌfBXpb`Û¯óÔÌQÆ95 * CPU例外発生時のディスパッチ保留状態の参照 100 96 * 101 * CPU áOnhÅdisdspªÏ»·é±ÆÍÈ¢½ßCCPUáOª¶µ102 * ½ÌdisdspðÛ¶µÄ¨KvÍÈ¢D97 * CPU例外ハンドラ中でdisdspが変化することはないため,CPU例外が発生し 98 * た時のdisdspを保存しておく必要はない. 103 99 */ 104 100 #ifdef TOPPERS_xsns_dpn … … 118 114 119 115 /* 120 * CPU áO¶Ì^XNáOÛ¯óÔÌQÆ116 * CPU例外発生時のタスク例外処理保留状態の参照 121 117 * 122 * CPU áOnhÅp_runtskÆp_runtsk->enatexªÏ»·é±ÆÍÈ¢123 * ½ßCCPUáOª¶µ½Ìp_runtsk->enatexðÛ¶µÄ¨KvÍÈ124 * ¢D118 * CPU例外ハンドラ中でp_runtskとp_runtsk->enatexが変化することはない 119 * ため,CPU例外が発生した時のp_runtsk->enatexを保存しておく必要はな 120 * い. 125 121 */ 126 122 #ifdef TOPPERS_xsns_xpn -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/exception.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * CPU áOÇ@\44 * CPU例外管理機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * CPU áOnhú»ubN53 * CPU例外ハンドラ初期化ブロック 58 54 */ 59 55 typedef struct cpu_exception_handler_initialization_block { 60 EXCNO excno; /* CPU áOnhÔ*/61 ATR excatr; /* CPU áOnh®«*/62 FP exc_entry; /* CPU áOnhÌoüûÌÔn*/56 EXCNO excno; /* CPU例外ハンドラ番号 */ 57 ATR excatr; /* CPU例外ハンドラ属性 */ 58 FP exc_entry; /* CPU例外ハンドラの出入口処理の番地 */ 63 59 } EXCINIB; 64 60 65 61 /* 66 * CPU áOnhÔÌikernel_cfg.cj62 * CPU例外ハンドラ番号の数(kernel_cfg.c) 67 63 */ 68 64 extern const uint_t tnum_excno; 69 65 70 66 /* 71 * CPU áOnhú»ubNÌGAikernel_cfg.cj67 * CPU例外ハンドラ初期化ブロックのエリア(kernel_cfg.c) 72 68 */ 73 69 extern const EXCINIB excinib_table[]; … … 76 72 77 73 /* 78 * CPU áOnhÇ@\Ìú»74 * CPU例外ハンドラ管理機能の初期化 79 75 */ 80 76 extern void initialize_exception(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/genoffset.tf
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r164 r167 8 8 $ Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 $ 10 $ ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 $ ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 $ XR[hÉÜÜêÄ¢é±ÆD 16 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 $ pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 $ Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 $ ̳ÛØKèðfÚ·é±ÆD 22 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 $ pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 $ ÆD 25 $ (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 $ ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 $ ñ·é±ÆD 31 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 $ Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 $ ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 $ RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 $ 免責すること. 36 32 $ 37 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨38 $ æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI39 $ ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF40 $ AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»41 $ ÌÓCðíÈ¢D33 $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 $ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 $ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 $ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 $ の責任を負わない. 42 38 $ 43 39 $ $Id$ … … 46 42 47 43 $ 48 $ #define fBNeBu̶¬44 $ #defineディレクティブの生成 49 45 $ 50 46 $FUNCTION DEFINE$ … … 53 49 54 50 $ 55 $ rbgÌT[`51 $ ビットのサーチ 56 52 $ 57 53 $FUNCTION SEARCH_BIT$ … … 66 62 67 63 $ 68 $ rbgtB[hÌItZbgÆrbgÊuÌè`̶¬64 $ ビットフィールドのオフセットとビット位置の定義の生成 69 65 $ 70 66 $FUNCTION DEFINE_BIT$ … … 115 111 116 112 $ 117 $ oCgzuÌ`FbN113 $ バイト配置のチェック 118 114 $ 119 115 $FUNCTION MAGIC_CHECK$ … … 144 140 145 141 $ 146 $ t@Cwb_̶¬142 $ ファイルヘッダの生成 147 143 $ 148 144 $FILE "offset.h"$ -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/interrupt.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * ÝÇ@\44 * 割込み管理機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * g[XO}NÌftHgè`53 * トレースログマクロのデフォルト定義 58 54 */ 59 55 #ifndef LOG_ISR_ENTER … … 114 110 115 111 /* 116 * ÝT[rX[`Ì112 * 割込みサービスルーチンの数 117 113 */ 118 114 #define tnum_isr ((uint_t)(tmax_isrid - TMIN_SEMID + 1) + tnum_sisr) 119 115 120 116 /* 121 * ÝT[rX[`ID©çÝT[rX[`ÇubNðæ122 * èo·½ßÌ}N117 * 割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取 118 * り出すためのマクロ 123 119 */ 124 120 #define INDEX_ISR(isrid) ((uint_t)((isrid) - TMIN_ISRID) + tnum_sisr) … … 126 122 127 123 /* 128 * ÝT[rX[`L 129 [ÖÌo^ 124 * 割込みサービスルーチンキューへの登録 130 125 */ 131 126 Inline void … … 147 142 148 143 /* 149 * gpµÄ¢È¢ÝT[rX[`ÇubNÌXg144 * 使用していない割込みサービスルーチン管理ブロックのリスト 150 145 */ 151 146 QUEUE free_isrcb; 152 147 153 148 /* 154 * ÝT[rX[`@\Ìú»149 * 割込みサービスルーチン機能の初期化 155 150 */ 156 151 void … … 182 177 183 178 /* 184 * ÝT[rX[`ÌÄoµ179 * 割込みサービスルーチンの呼出し 185 180 */ 186 181 #ifdef TOPPERS_isrcal … … 202 197 203 198 if (p_queue->p_next != p_isr_queue) { 204 /* ISR ÌÄoµOÌóÔÉß·*/199 /* ISRの呼出し前の状態に戻す */ 205 200 if (i_sense_lock()) { 206 201 i_unlock_cpu(); … … 214 209 215 210 /* 216 * ÝT[rX[`ÄoµL 217 [Ìõ 211 * 割込みサービスルーチン呼出しキューの検索 218 212 */ 219 213 Inline QUEUE * … … 246 240 247 241 /* 248 * ÝT[rX[`̶¬242 * 割込みサービスルーチンの生成 249 243 */ 250 244 #ifdef TOPPERS_acre_isr … … 295 289 296 290 /* 297 * ÝT[rX[`Ìí291 * 割込みサービスルーチンの削除 298 292 */ 299 293 #ifdef TOPPERS_del_isr … … 332 326 333 327 /* 334 * ÝÇ@\Ìú»328 * 割込み管理機能の初期化 335 329 */ 336 330 #ifdef TOPPERS_intini … … 358 352 359 353 /* 360 * ÝÌÖ~354 * 割込みの禁止 361 355 */ 362 356 #ifdef TOPPERS_dis_int … … 396 390 397 391 /* 398 * ÝÌÂ392 * 割込みの許可 399 393 */ 400 394 #ifdef TOPPERS_ena_int … … 434 428 435 429 /* 436 * ÝDæx}XNÌÏX430 * 割込み優先度マスクの変更 437 431 */ 438 432 #ifdef TOPPERS_chg_ipm … … 476 470 477 471 /* 478 * ÝDæx}XNÌQÆ472 * 割込み優先度マスクの参照 479 473 */ 480 474 #ifdef TOPPERS_get_ipm -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/interrupt.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * ÝÇ@\44 * 割込み管理機能 49 45 */ 50 46 … … 53 49 54 50 /* 55 * ÝT[rX[`ú»ubN51 * 割込みサービスルーチン初期化ブロック 56 52 */ 57 53 typedef struct isr_initialization_block { 58 ATR isratr; /* ÝT[rX[`®« */ 59 intptr_t exinf; /* ÝT[rX[`Ìg£îñ */ 60 INTNO intno; /* ÝT[rX[`ðo^·éÝÔ */ 61 QUEUE *p_isr_queue; /* o^æÝT[rX[`L 62 [ÌÔn */ 63 ISR isr; /* ÝT[rX[`ÌæªÔn */ 64 PRI isrpri; /* ÝT[rX[`Dæx */ 54 ATR isratr; /* 割込みサービスルーチン属性 */ 55 intptr_t exinf; /* 割込みサービスルーチンの拡張情報 */ 56 INTNO intno; /* 割込みサービスルーチンを登録する割込み番号 */ 57 QUEUE *p_isr_queue; /* 登録先割込みサービスルーチンキューの番地 */ 58 ISR isr; /* 割込みサービスルーチンの先頭番地 */ 59 PRI isrpri; /* 割込みサービスルーチン優先度 */ 65 60 } ISRINIB; 66 61 67 62 /* 68 * ÝT[rX[`ÇubN63 * 割込みサービスルーチン管理ブロック 69 64 */ 70 65 typedef struct isr_control_block { 71 QUEUE isr_queue; /* ÝT[rX[`ÄoµL 72 [ */ 73 const ISRINIB *p_isrinib; /* ú»ubNÖÌ|C^ */ 66 QUEUE isr_queue; /* 割込みサービスルーチン呼出しキュー */ 67 const ISRINIB *p_isrinib; /* 初期化ブロックへのポインタ */ 74 68 } ISRCB; 75 69 76 70 /* 77 * ÝT[rX[`ÄoµL 78 [ðõ·é½ßÌf[^\¢ 71 * 割込みサービスルーチン呼出しキューを検索するためのデータ構造 79 72 */ 80 73 typedef struct { 81 INTNO intno; /* ÝÔ */ 82 QUEUE *p_isr_queue; /* ÝT[rX[`ÄoµL 83 [ */ 74 INTNO intno; /* 割込み番号 */ 75 QUEUE *p_isr_queue; /* 割込みサービスルーチン呼出しキュー */ 84 76 } ISR_ENTRY; 85 77 86 78 /* 87 * ÝT[rX[`L 88 [ÌGgikernel_cfg.cj 79 * 割込みサービスルーチンキューのエントリ数(kernel_cfg.c) 89 80 */ 90 81 extern const uint_t tnum_isr_queue; 91 82 92 83 /* 93 * ÝT[rX[`L 94 [Xgikernel_cfg.cj 84 * 割込みサービスルーチンキューリスト(kernel_cfg.c) 95 85 */ 96 86 extern const ISR_ENTRY isr_queue_list[]; 97 87 98 88 /* 99 * ÝT[rX[`L 100 [ÌGAikernel_cfg.cj 89 * 割込みサービスルーチンキューのエリア(kernel_cfg.c) 101 90 */ 102 91 extern QUEUE isr_queue_table[]; 103 92 104 93 /* 105 * gpµÄ¢È¢ÝT[rX[`ÇubNÌXg94 * 使用していない割込みサービスルーチン管理ブロックのリスト 106 95 */ 107 96 extern QUEUE free_isrcb; 108 97 109 98 /* 110 * ÝT[rX[`IDÌÅålikernel_cfg.cj99 * 割込みサービスルーチンIDの最大値(kernel_cfg.c) 111 100 * 112 * ÃIɶ¬³êéÝT[rX[`ÍIDÔð½È¢½ßC113 * tmax_isrid Í®Iɶ¬³êéÝT[rX[`ÌIDÔÌÅål114 * Å éDÃIɶ¬³êéÝT[rX[`ÌÍCtnum_sisrÉÛ115 * ·éD101 * 静的に生成される割込みサービスルーチンはID番号を持たないため, 102 * tmax_isridは動的に生成される割込みサービスルーチンのID番号の最大値 103 * である.静的に生成される割込みサービスルーチンの数は,tnum_sisrに保 104 * 持する. 116 105 */ 117 106 extern const ID tmax_isrid; … … 119 108 120 109 /* 121 * ÝT[rX[`ú»ubNÌGAikernel_cfg.cj110 * 割込みサービスルーチン初期化ブロックのエリア(kernel_cfg.c) 122 111 */ 123 112 extern const ISRINIB sisrinib_table[]; … … 125 114 126 115 /* 127 * ÝT[rX[`ÇubNÌGAikernel_cfg.cj116 * 割込みサービスルーチン管理ブロックのエリア(kernel_cfg.c) 128 117 */ 129 118 extern ISRCB isrcb_table[]; 130 119 131 120 /* 132 * ÝT[rX[`ÇubN©çÝT[rX[`IDðæ133 * èo·½ßÌ}N121 * 割込みサービスルーチン管理ブロックから割込みサービスルーチンIDを取 122 * り出すためのマクロ 134 123 */ 135 124 #define ISRID(p_isrcb) ((ID)(((p_isrcb) - isrcb_table) \ … … 137 126 138 127 /* 139 * ÝT[rX[`@\Ìú»128 * 割込みサービスルーチン機能の初期化 140 129 */ 141 130 extern void initialize_isr(void); 142 131 143 132 /* 144 * ÝT[rX[`ÌÄoµ133 * 割込みサービスルーチンの呼出し 145 134 */ 146 135 extern void call_isr(QUEUE *p_isr_queue); … … 149 138 150 139 /* 151 * Ýnhú»ubN140 * 割込みハンドラ初期化ブロック 152 141 */ 153 142 typedef struct interrupt_handler_initialization_block { 154 INHNO inhno; /* ÝnhÔ*/155 ATR inhatr; /* Ýnh®«*/156 FP int_entry; /* ÝnhÌoüûÌÔn*/143 INHNO inhno; /* 割込みハンドラ番号 */ 144 ATR inhatr; /* 割込みハンドラ属性 */ 145 FP int_entry; /* 割込みハンドラの出入口処理の番地 */ 157 146 } INHINIB; 158 147 159 148 /* 160 * ÝvCú»ubN149 * 割込み要求ライン初期化ブロック 161 150 */ 162 151 typedef 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; /* 割込み優先度 */ 166 155 } INTINIB; 167 156 168 157 /* 169 * ÝnhÔÌikernel_cfg.cj158 * 割込みハンドラ番号の数(kernel_cfg.c) 170 159 */ 171 160 extern const uint_t tnum_inhno; 172 161 173 162 /* 174 * Ýnhú»ubNÌGAikernel_cfg.cj163 * 割込みハンドラ初期化ブロックのエリア(kernel_cfg.c) 175 164 */ 176 165 extern const INHINIB inhinib_table[]; 177 166 178 167 /* 179 * ÝvCÌikernel_cfg.cj168 * 割込み要求ラインの数(kernel_cfg.c) 180 169 */ 181 170 extern const uint_t tnum_intno; 182 171 183 172 /* 184 * ÝvCú»ubNÌGAikernel_cfg.cj173 * 割込み要求ライン初期化ブロックのエリア(kernel_cfg.c) 185 174 */ 186 175 extern const INTINIB intinib_table[]; … … 189 178 190 179 /* 191 * ÝÇ@\Ìú»180 * 割込み管理機能の初期化 192 181 */ 193 182 extern void initialize_interrupt(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel.tf
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r164 r167 9 9 $ Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 $ 11 $ ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 $ ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 $ XR[hÉÜÜêÄ¢é±ÆD 17 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 $ pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 $ Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 $ ̳ÛØKèðfÚ·é±ÆD 23 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 $ pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 $ ÆD 26 $ (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 $ ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 $ ñ·é±ÆD 32 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 $ Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 $ ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 $ RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 $ 免責すること. 37 33 $ 38 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 $ æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 $ ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 $ AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 $ ÌÓCðíÈ¢D34 $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 $ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 $ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 $ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 $ の責任を負わない. 43 39 $ 44 40 $ $Id$ … … 47 43 48 44 $ ===================================================================== 49 $ AID_YYY Ì45 $ AID_YYYの処理 50 46 $ ===================================================================== 51 47 52 48 $num_atskid = 0$ 53 49 $FOREACH i ATSK.ORDER_LIST$ 54 $ // notsk ªÌêiE_PARj50 $ // notskが負の場合(E_PAR) 55 51 $IF ATSK.NOTSK[i] < 0$ 56 52 $ERROR ATSK.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "notsk", ATSK.NOTSK[i], "AID_TSK")$$END$ … … 62 58 $num_asemid = 0$ 63 59 $FOREACH i ASEM.ORDER_LIST$ 64 $ // nosem ªÌêiE_PARj60 $ // nosemが負の場合(E_PAR) 65 61 $IF ASEM.NOSEM[i] < 0$ 66 62 $ERROR ASEM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nosem", ASEM.NOSEM[i], "AID_SEM")$$END$ … … 72 68 $num_aflgid = 0$ 73 69 $FOREACH i AFLG.ORDER_LIST$ 74 $ // noflg ªÌêiE_PARj70 $ // noflgが負の場合(E_PAR) 75 71 $IF AFLG.NOFLG[i] < 0$ 76 72 $ERROR AFLG.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noflg", AFLG.NOFLG[i], "AID_FLG")$$END$ … … 82 78 $num_adtqid = 0$ 83 79 $FOREACH i ADTQ.ORDER_LIST$ 84 $ // nodtq ªÌêiE_PARj80 $ // nodtqが負の場合(E_PAR) 85 81 $IF ADTQ.NODTQ[i] < 0$ 86 82 $ERROR ADTQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nodtq", ADTQ.NODTQ[i], "AID_DTQ")$$END$ … … 92 88 $num_apdqid = 0$ 93 89 $FOREACH i APDQ.ORDER_LIST$ 94 $ // nopdq ªÌêiE_PARj90 $ // nopdqが負の場合(E_PAR) 95 91 $IF APDQ.NOPDQ[i] < 0$ 96 92 $ERROR APDQ.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nopdq", APDQ.NOPDQ[i], "AID_PDQ")$$END$ … … 102 98 $num_ambxid = 0$ 103 99 $FOREACH i AMBX.ORDER_LIST$ 104 $ // nombx ªÌêiE_PARj100 $ // nombxが負の場合(E_PAR) 105 101 $IF AMBX.NOMBX[i] < 0$ 106 102 $ERROR AMBX.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nombx", AMBX.NOMBX[i], "AID_MBX")$$END$ … … 112 108 $num_ampfid = 0$ 113 109 $FOREACH i AMPF.ORDER_LIST$ 114 $ // nompf ªÌêiE_PARj110 $ // nompfが負の場合(E_PAR) 115 111 $IF AMPF.NOMPF[i] < 0$ 116 112 $ERROR AMPF.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nompf", AMPF.NOMPF[i], "AID_MPF")$$END$ … … 122 118 $num_acycid = 0$ 123 119 $FOREACH i ACYC.ORDER_LIST$ 124 $ // nocyc ªÌêiE_PARj120 $ // nocycが負の場合(E_PAR) 125 121 $IF ACYC.NOCYC[i] < 0$ 126 122 $ERROR ACYC.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "nocyc", ACYC.NOCYC[i], "AID_CYC")$$END$ … … 132 128 $num_aalmid = 0$ 133 129 $FOREACH i AALM.ORDER_LIST$ 134 $ // noalm ªÌêiE_PARj130 $ // noalmが負の場合(E_PAR) 135 131 $IF AALM.NOALM[i] < 0$ 136 132 $ERROR AALM.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noalm", AALM.NOALM[i], "AID_ALM")$$END$ … … 142 138 $num_aisrid = 0$ 143 139 $FOREACH i AISR.ORDER_LIST$ 144 $ // noisr ªÌêiE_PARj140 $ // noisrが負の場合(E_PAR) 145 141 $IF AISR.NOISR[i] < 0$ 146 142 $ERROR AISR.TEXT_LINE[i]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "noisr", AISR.NOISR[i], "AID_ISR")$$END$ … … 152 148 153 149 $ ===================================================================== 154 $ kernel_cfg.h ̶¬150 $ kernel_cfg.hの生成 155 151 $ ===================================================================== 156 152 … … 202 198 203 199 $ ===================================================================== 204 $ kernel_cfg.c ̶¬200 $ kernel_cfg.cの生成 205 201 $ ===================================================================== 206 202 … … 216 212 217 213 $ 218 $ CN[hfBNeBui#includej214 $ インクルードディレクティブ(#include) 219 215 $ 220 216 /*$NL$ … … 226 222 227 223 $ 228 $ IuWFNgÌIDÔðÛ·éÏ224 $ オブジェクトのID番号を保持する変数 229 225 $ 230 226 $IF USE_EXTERNAL_ID$ … … 263 259 264 260 $ 265 $ ^XN261 $ タスク 266 262 $ 267 263 /*$NL$ … … 270 266 $NL$ 271 267 272 $ ÃIɶ¬³ê½^XNª1ÂÈã¶Ý·é±ÆÌ`FbN268 $ 静的に生成されたタスクが1個以上存在することのチェック 273 269 $IF !LENGTH(TSK.ID_LIST)$ 274 270 $ERROR$$FORMAT(_("no task is registered"))$$END$ 275 271 $END$ 276 272 277 $ ÃIɶ¬³ê½^XNÌ273 $ 静的に生成されたタスクの数 278 274 #define TNUM_STSKID $LENGTH(TSK.ID_LIST)$$NL$ 279 275 $NL$ 280 276 281 $ ^XNIDÔÌÅål277 $ タスクID番号の最大値 282 278 const ID _kernel_tmax_tskid = (TMIN_TSKID + TNUM_TSKID - 1);$NL$ 283 279 const ID _kernel_tmax_stskid = (TMIN_TSKID + TNUM_STSKID - 1);$NL$ 284 280 $NL$ 285 281 286 $ G[`FbN282 $ エラーチェック 287 283 $FOREACH tskid TSK.ID_LIST$ 288 $ // tskatr ªimTA_ACTnjÅÈ¢êiE_RSATRj284 $ // tskatrが([TA_ACT])でない場合(E_RSATR) 289 285 $IF (TSK.TSKATR[tskid] & ~(TA_ACT|TARGET_TSKATR)) != 0$ 290 286 $ERROR TSK.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "tskatr", TSK.TSKATR[tskid], tskid, "CRE_TSK")$$END$ 291 287 $END$ 292 288 293 $ // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI) ÅÈ¢êiE_PARj289 $ // (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合(E_PAR) 294 290 $IF !(TMIN_TPRI <= TSK.ITSKPRI[tskid] && TSK.ITSKPRI[tskid] <= TMAX_TPRI)$ 295 291 $ERROR TSK.TEXT_LINE[tskid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "itskpri", TSK.ITSKPRI[tskid], tskid, "CRE_TSK")$$END$ 296 292 $END$ 297 293 298 $ // texatr ªiTA_NULLjÅÈ¢êiE_RSATRj294 $ // texatrが(TA_NULL)でない場合(E_RSATR) 299 295 $IF LENGTH(TSK.TEXATR[tskid]) && TSK.TEXATR[tskid] != 0$ 300 296 $ERROR DEF_TEX.TEXT_LINE[tskid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "texatr", TSK.TEXATR[tskid], tskid, "DEF_TEX")$$END$ … … 302 298 $END$ 303 299 304 $ X^bNÌæ̶¬Æ»êÉÖ·éG[`FbN300 $ スタック領域の生成とそれに関するエラーチェック 305 301 $FOREACH tskid TSK.ID_LIST$ 306 $ // stksz ª0Ⱥ©C^[Qbgè`ÌŬliTARGET_MIN_STKSZjæèà307 $ // ¬³¢êiE_PARj302 $ // stkszが0以下か,ターゲット定義の最小値(TARGET_MIN_STKSZ)よりも 303 $ // 小さい場合(E_PAR) 308 304 $IF TSK.STKSZ[tskid] <= 0 || (TARGET_MIN_STKSZ 309 305 && TSK.STKSZ[tskid] < TARGET_MIN_STKSZ)$ … … 311 307 $END$ 312 308 313 $ // stksz ªX^bNÌæÌTCYƵijµÈ¢êiE_PARj309 $ // stkszがスタック領域のサイズとして正しくない場合(E_PAR) 314 310 $IF !EQ(TSK.STK[tskid], "NULL") && CHECK_STKSZ_ALIGN 315 311 && (TSK.STKSZ[tskid] & (CHECK_STKSZ_ALIGN - 1))$ … … 328 324 $NL$ 329 325 330 $ ^XNú»ubN̶¬i^XNÍ1ÂÈã¶Ý·éj326 $ タスク初期化ブロックの生成(タスクは1個以上存在する) 331 327 const TINIB _kernel_tinib_table[TNUM_STSKID] = {$NL$ 332 328 $JOINEACH tskid TSK.ID_LIST ",\n"$ 333 $ // ^XN®«Cg£îñCN®ÔnCN®Dæx329 $ // タスク属性,拡張情報,起動番地,起動時優先度 334 330 $TAB${ 335 331 $SPC$($TSK.TSKATR[tskid]$), (intptr_t)($TSK.EXINF[tskid]$), 336 332 $SPC$((TASK)($TSK.TASK[tskid]$)), INT_PRIORITY($TSK.ITSKPRI[tskid]$), 337 333 338 $ // ^XNú»ReLXgubNCX^bNÌæ334 $ // タスク初期化コンテキストブロック,スタック領域 339 335 $IF USE_TSKINICTXB$ 340 336 $GENERATE_TSKINICTXB(tskid)$ … … 343 339 $END$ 344 340 345 $ // ^XNáO[`Ì®«ÆN®Ôn341 $ // タスク例外処理ルーチンの属性と起動番地 346 342 $SPC$($ALT(TSK.TEXATR[tskid],"TA_NULL")$), ($ALT(TSK.TEXRTN[tskid],"NULL")$) } 347 343 $END$$NL$ … … 349 345 $NL$ 350 346 351 $ ®I¶¬^XNpÌ^XNú»ubN̶¬347 $ 動的生成タスク用のタスク初期化ブロックの生成 352 348 $IF num_atskid > 0$ 353 349 TINIB _kernel_atinib_table[$num_atskid$];$NL$ … … 356 352 $END$$NL$ 357 353 358 $ ^XNÇubN̶¬354 $ タスク管理ブロックの生成 359 355 TCB _kernel_tcb_table[TNUM_TSKID];$NL$ 360 356 $NL$ 361 357 362 $ ^XN¶¬e[u̶¬358 $ タスク生成順序テーブルの生成 363 359 const ID _kernel_torder_table[TNUM_STSKID] = {$NL$ 364 360 $TAB$$JOINEACH tskid TSK.ORDER_LIST ", "$$tskid$$END$$NL$ … … 367 363 368 364 $ 369 $ Z}tH365 $ セマフォ 370 366 $ 371 367 /*$NL$ … … 374 370 $NL$ 375 371 376 $ ÃIɶ¬³ê½Z}tHÌ372 $ 静的に生成されたセマフォの数 377 373 #define TNUM_SSEMID $LENGTH(SEM.ID_LIST)$$NL$ 378 374 $NL$ 379 375 380 $ Z}tHIDÔÌÅål376 $ セマフォID番号の最大値 381 377 const ID _kernel_tmax_semid = (TMIN_SEMID + TNUM_SEMID - 1);$NL$ 382 378 const ID _kernel_tmax_ssemid = (TMIN_SEMID + TNUM_SSEMID - 1);$NL$ 383 379 $NL$ 384 380 385 $ Z}tHú»ubN̶¬381 $ セマフォ初期化ブロックの生成 386 382 $IF LENGTH(SEM.ID_LIST)$ 387 383 const SEMINIB _kernel_seminib_table[TNUM_SSEMID] = {$NL$ 388 384 $JOINEACH semid SEM.ID_LIST ",\n"$ 389 $ // sematr ªimTA_TPRInjÅÈ¢êiE_RSATRj385 $ // sematrが([TA_TPRI])でない場合(E_RSATR) 390 386 $IF (SEM.SEMATR[semid] & ~TA_TPRI) != 0$ 391 387 $ERROR SEM.TEXT_LINE[semid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "sematr", SEM.SEMATR[semid], semid, "CRE_SEM")$$END$ 392 388 $END$ 393 389 394 $ // (0 <= isemcnt && isemcnt <= maxsem) ÅÈ¢êiE_PARj390 $ // (0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR) 395 391 $IF !(0 <= SEM.ISEMCNT[semid] && SEM.ISEMCNT[semid] <= SEM.MAXSEM[semid])$ 396 392 $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "isemcnt", SEM.ISEMCNT[semid], semid, "CRE_SEM")$$END$ 397 393 $END$ 398 394 399 $ // (1 <= maxsem && maxsem <= TMAX_MAXSEM) ÅÈ¢êiE_PARj395 $ // (1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR) 400 396 $IF !(1 <= SEM.MAXSEM[semid] && SEM.MAXSEM[semid] <= TMAX_MAXSEM)$ 401 397 $ERROR SEM.TEXT_LINE[semid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxsem", SEM.MAXSEM[semid], semid, "CRE_SEM")$$END$ 402 398 $END$ 403 399 404 $ // Z}tHú»ubN400 $ // セマフォ初期化ブロック 405 401 $TAB${ ($SEM.SEMATR[semid]$), ($SEM.ISEMCNT[semid]$), ($SEM.MAXSEM[semid]$) } 406 402 $END$$NL$ … … 410 406 $END$$NL$ 411 407 412 $ ®I¶¬Z}tHpÌZ}tHú»ubN̶¬408 $ 動的生成セマフォ用のセマフォ初期化ブロックの生成 413 409 $IF num_asemid > 0$ 414 410 SEMINIB _kernel_aseminib_table[$num_asemid$];$NL$ … … 417 413 $END$$NL$ 418 414 419 $ Z}tHÇubN̶¬415 $ セマフォ管理ブロックの生成 420 416 $IF num_semid > 0$ 421 417 SEMCB _kernel_semcb_table[TNUM_SEMID];$NL$ … … 425 421 426 422 $ 427 $ CxgtO423 $ イベントフラグ 428 424 $ 429 425 /*$NL$ … … 432 428 $NL$ 433 429 434 $ ÃIɶ¬³ê½CxgtOÌ430 $ 静的に生成されたイベントフラグの数 435 431 #define TNUM_SFLGID $LENGTH(FLG.ID_LIST)$$NL$ 436 432 $NL$ 437 433 438 $ CxgtOIDÔÌÅål434 $ イベントフラグID番号の最大値 439 435 const ID _kernel_tmax_flgid = (TMIN_FLGID + TNUM_FLGID - 1);$NL$ 440 436 const ID _kernel_tmax_sflgid = (TMIN_FLGID + TNUM_SFLGID - 1);$NL$ 441 437 $NL$ 442 438 443 $ CxgtOú»ubN̶¬439 $ イベントフラグ初期化ブロックの生成 444 440 $IF LENGTH(FLG.ID_LIST)$ 445 441 const FLGINIB _kernel_flginib_table[TNUM_SFLGID] = {$NL$ 446 442 $JOINEACH flgid FLG.ID_LIST ",\n"$ 447 $ // flgatr ªimTA_TPRInbmTA_WMULnbmTA_CLRnjÅÈ¢êiE_RSATRj443 $ // flgatrが([TA_TPRI]|[TA_WMUL]|[TA_CLR])でない場合(E_RSATR) 448 444 $IF (FLG.FLGATR[flgid] & ~(TA_TPRI|TA_WMUL|TA_CLR)) != 0$ 449 445 $ERROR FLG.TEXT_LINE[flgid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "flgatr", FLG.FLGATR[flgid], flgid, "CRE_FLG")$$END$ 450 446 $END$ 451 447 452 $ // iflgptn ªFLGPTNÉi[Å«È¢êiE_PARj448 $ // iflgptnがFLGPTNに格納できない場合(E_PAR) 453 449 $IF (FLG.IFLGPTN[flgid] & ~((1 << TBIT_FLGPTN) - 1)) != 0$ 454 450 $ERROR FLG.TEXT_LINE[flgid]$E_PAR: $FORMAT(_("too large %1% `%2%\' of `%3%\' in %4%"), "iflgptn", FLG.IFLGPTN[flgid], flgid, "CRE_FLG")$$END$ 455 451 $END$ 456 452 457 $ // CxgtOú»ubN453 $ // イベントフラグ初期化ブロック 458 454 $TAB${ ($FLG.FLGATR[flgid]$), ($FLG.IFLGPTN[flgid]$) } 459 455 $END$$NL$ … … 463 459 $END$$NL$ 464 460 465 $ ®I¶¬CxgtOpÌCxgtOú»ubN̶¬461 $ 動的生成イベントフラグ用のイベントフラグ初期化ブロックの生成 466 462 $IF num_aflgid > 0$ 467 463 FLGINIB _kernel_aflginib_table[$num_aflgid$];$NL$ … … 470 466 $END$$NL$ 471 467 472 $ CxgtOÇubN̶¬468 $ イベントフラグ管理ブロックの生成 473 469 $IF num_flgid > 0$ 474 470 FLGCB _kernel_flgcb_table[TNUM_FLGID];$NL$ … … 478 474 479 475 $ 480 $ f[^L 481 [ 476 $ データキュー 482 477 $ 483 478 /*$NL$ … … 486 481 $NL$ 487 482 488 $ ÃIɶ¬³ê½f[^L 489 [Ì 483 $ 静的に生成されたデータキューの数 490 484 #define TNUM_SDTQID $LENGTH(DTQ.ID_LIST)$$NL$ 491 485 $NL$ 492 486 493 $ f[^L 494 [IDÔÌÅål 487 $ データキューID番号の最大値 495 488 const ID _kernel_tmax_dtqid = (TMIN_DTQID + TNUM_DTQID - 1);$NL$ 496 489 const ID _kernel_tmax_sdtqid = (TMIN_DTQID + TNUM_SDTQID - 1);$NL$ … … 499 492 $IF LENGTH(DTQ.ID_LIST)$ 500 493 $FOREACH dtqid DTQ.ID_LIST$ 501 $ // dtqatr ªimTA_TPRInjÅÈ¢êiE_RSATRj494 $ // dtqatrが([TA_TPRI])でない場合(E_RSATR) 502 495 $IF (DTQ.DTQATR[dtqid] & ~TA_TPRI) != 0$ 503 496 $ERROR DTQ.TEXT_LINE[dtqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqatr", DTQ.DTQATR[dtqid], dtqid, "CRE_DTQ")$$END$ 504 497 $END$ 505 498 506 $ // dtqcnt ªÌêiE_PARj499 $ // dtqcntが負の場合(E_PAR) 507 500 $IF DTQ.DTQCNT[dtqid] < 0$ 508 501 $ERROR DTQ.TEXT_LINE[dtqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqcnt", DTQ.DTQCNT[dtqid], dtqid, "CRE_DTQ")$$END$ 509 502 $END$ 510 503 511 $ // dtqmb ªNULLÅÈ¢êiE_NOSPTj504 $ // dtqmbがNULLでない場合(E_NOSPT) 512 505 $IF !EQ(DTQ.DTQMB[dtqid], "NULL")$ 513 506 $ERROR DTQ.TEXT_LINE[dtqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "dtqmb", DTQ.DTQMB[dtqid], dtqid, "CRE_DTQ")$$END$ 514 507 $END$ 515 508 516 $ // f[^L 517 [ÇÌæ 509 $ // データキュー管理領域 518 510 $IF DTQ.DTQCNT[dtqid]$ 519 511 static DTQMB _kernel_dtqmb_$dtqid$[$DTQ.DTQCNT[dtqid]$];$NL$ … … 521 513 $END$ 522 514 523 $ // f[^L 524 [ú»ubN̶¬ 515 $ // データキュー初期化ブロックの生成 525 516 const DTQINIB _kernel_dtqinib_table[TNUM_SDTQID] = {$NL$ 526 517 $JOINEACH dtqid DTQ.ID_LIST ",\n"$ … … 532 523 $END$$NL$ 533 524 534 $ ®I¶¬f[^L 535 [pÌf[^L 536 [ú»ubN̶¬ 525 $ 動的生成データキュー用のデータキュー初期化ブロックの生成 537 526 $IF num_adtqid > 0$ 538 527 DTQINIB _kernel_adtqinib_table[$num_adtqid$];$NL$ … … 541 530 $END$$NL$ 542 531 543 $ f[^L 544 [ÇubN̶¬ 532 $ データキュー管理ブロックの生成 545 533 $IF num_dtqid > 0$ 546 534 DTQCB _kernel_dtqcb_table[TNUM_DTQID];$NL$ … … 550 538 551 539 $ 552 $ Dæxf[^L 553 [ 540 $ 優先度データキュー 554 541 $ 555 542 /*$NL$ … … 558 545 $NL$ 559 546 560 $ ÃIɶ¬³ê½Dæxf[^L 561 [Ì 547 $ 静的に生成された優先度データキューの数 562 548 #define TNUM_SPDQID $LENGTH(PDQ.ID_LIST)$$NL$ 563 549 $NL$ 564 550 565 $ Dæxf[^L 566 [IDÔÌÅål 551 $ 優先度データキューID番号の最大値 567 552 const ID _kernel_tmax_pdqid = (TMIN_PDQID + TNUM_PDQID - 1);$NL$ 568 553 const ID _kernel_tmax_spdqid = (TMIN_PDQID + TNUM_SPDQID - 1);$NL$ … … 571 556 $IF LENGTH(PDQ.ID_LIST)$ 572 557 $FOREACH pdqid PDQ.ID_LIST$ 573 $ // pdqatr ªimTA_TPRInjÅÈ¢êiE_RSATRj558 $ // pdqatrが([TA_TPRI])でない場合(E_RSATR) 574 559 $IF (PDQ.PDQATR[pdqid] & ~TA_TPRI) != 0$ 575 560 $ERROR PDQ.TEXT_LINE[pdqid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqatr", PDQ.PDQATR[pdqid], pdqid, "CRE_PDQ")$$END$ 576 561 $END$ 577 562 578 $ // pdqcnt ªÌêiE_PARj563 $ // pdqcntが負の場合(E_PAR) 579 564 $IF PDQ.PDQCNT[pdqid] < 0$ 580 565 $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqcnt", PDQ.PDQCNT[pdqid], pdqid, "CRE_PDQ")$$END$ 581 566 $END$ 582 567 583 $ // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI) ÅÈ¢êiE_PARj568 $ // (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR) 584 569 $IF !(TMIN_DPRI <= PDQ.MAXDPRI[pdqid] && PDQ.MAXDPRI[pdqid] <= TMAX_DPRI)$ 585 570 $ERROR PDQ.TEXT_LINE[pdqid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxdpri", PDQ.MAXDPRI[pdqid], pdqid, "CRE_PDQ")$$END$ 586 571 $END$ 587 572 588 $ // pdqmb ªNULLÅÈ¢êiE_NOSPTj573 $ // pdqmbがNULLでない場合(E_NOSPT) 589 574 $IF !EQ(PDQ.PDQMB[pdqid], "NULL")$ 590 575 $ERROR PDQ.TEXT_LINE[pdqid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "pdqmb", PDQ.PDQMB[pdqid], pdqid, "CRE_PDQ")$$END$ 591 576 $END$ 592 577 593 $ // Dæxf[^L 594 [ÇÌæ 578 $ // 優先度データキュー管理領域 595 579 $IF PDQ.PDQCNT[pdqid]$ 596 580 static PDQMB _kernel_pdqmb_$pdqid$[$PDQ.PDQCNT[pdqid]$];$NL$ … … 598 582 $END$ 599 583 600 $ // Dæxf[^L 601 [ú»ubN̶¬ 584 $ // 優先度データキュー初期化ブロックの生成 602 585 const PDQINIB _kernel_pdqinib_table[TNUM_SPDQID] = {$NL$ 603 586 $JOINEACH pdqid PDQ.ID_LIST ",\n"$ … … 609 592 $END$$NL$ 610 593 611 $ ®I¶¬Dæxf[^L 612 [pÌDæxf[^L 613 [ú»ubN̶¬ 594 $ 動的生成優先度データキュー用の優先度データキュー初期化ブロックの生成 614 595 $IF num_apdqid > 0$ 615 596 PDQINIB _kernel_apdqinib_table[$num_apdqid$];$NL$ … … 618 599 $END$$NL$ 619 600 620 $ Dæxf[^L 621 [ÇubN̶¬ 601 $ 優先度データキュー管理ブロックの生成 622 602 $IF num_pdqid > 0$ 623 603 PDQCB _kernel_pdqcb_table[TNUM_PDQID];$NL$ … … 627 607 628 608 $ 629 $ [{bNX609 $ メールボックス 630 610 $ 631 611 /*$NL$ … … 634 614 $NL$ 635 615 636 $ ÃIɶ¬³ê½[{bNXÌ616 $ 静的に生成されたメールボックスの数 637 617 #define TNUM_SMBXID $LENGTH(MBX.ID_LIST)$$NL$ 638 618 $NL$ 639 619 640 $ [{bNXIDÔÌÅål620 $ メールボックスID番号の最大値 641 621 const ID _kernel_tmax_mbxid = (TMIN_MBXID + TNUM_MBXID - 1);$NL$ 642 622 const ID _kernel_tmax_smbxid = (TMIN_MBXID + TNUM_SMBXID - 1);$NL$ 643 623 $NL$ 644 624 645 $ [{bNXú»ubN̶¬625 $ メールボックス初期化ブロックの生成 646 626 $IF LENGTH(MBX.ID_LIST)$ 647 627 const MBXINIB _kernel_mbxinib_table[TNUM_SMBXID] = {$NL$ 648 628 $JOINEACH mbxid MBX.ID_LIST ",\n"$ 649 $ // mbxatr ªimTA_TPRInbmTA_MPRInjÅÈ¢êiE_RSATRj629 $ // mbxatrが([TA_TPRI]|[TA_MPRI])でない場合(E_RSATR) 650 630 $IF (MBX.MBXATR[mbxid] & ~(TA_TPRI|TA_MPRI)) != 0$ 651 631 $ERROR MBX.TEXT_LINE[mbxid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mbxatr", MBX.MBXATR[mbxid], mbxid, "CRE_MBX")$$END$ 652 632 $END$ 653 633 654 $ // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI) ÅÈ¢êiE_PARj634 $ // (TMIN_MPRI <= maxmpri && maxmpri <= TMAX_MPRI)でない場合(E_PAR) 655 635 $IF !(TMIN_MPRI <= MBX.MAXMPRI[mbxid] && MBX.MAXMPRI[mbxid] <= TMAX_MPRI)$ 656 636 $ERROR MBX.TEXT_LINE[mbxid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "maxmpri", MBX.MAXMPRI[mbxid], mbxid, "CRE_MBX")$$END$ 657 637 $END$ 658 638 659 $ // mprihd ªNULLÅÈ¢êiE_NOSPTj639 $ // mprihdがNULLでない場合(E_NOSPT) 660 640 $IF !EQ(MBX.MPRIHD[mbxid], "NULL")$ 661 641 $ERROR MBX.TEXT_LINE[mbxid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mprihd", MBX.MPRIHD[mbxid], mbxid, "CRE_MBX")$$END$ 662 642 $END$ 663 643 664 $ // [{bNXú»ubN644 $ // メールボックス初期化ブロック 665 645 $TAB${ ($MBX.MBXATR[mbxid]$), ($MBX.MAXMPRI[mbxid]$) } 666 646 $END$$NL$ … … 670 650 $END$$NL$ 671 651 672 $ ®I¶¬[{bNXpÌ[{bNXú»ubN̶¬652 $ 動的生成メールボックス用のメールボックス初期化ブロックの生成 673 653 $IF num_ambxid > 0$ 674 654 MBXINIB _kernel_ambxinib_table[$num_ambxid$];$NL$ … … 677 657 $END$$NL$ 678 658 679 $ [{bNXÇubN̶¬659 $ メールボックス管理ブロックの生成 680 660 $IF num_mbxid > 0$ 681 661 MBXCB _kernel_mbxcb_table[TNUM_MBXID];$NL$ … … 685 665 686 666 $ 687 $ Åè·v[667 $ 固定長メモリプール 688 668 $ 689 669 /*$NL$ … … 692 672 $NL$ 693 673 694 $ ÃIɶ¬³ê½Åè·v[Ì674 $ 静的に生成された固定長メモリプールの数 695 675 #define TNUM_SMPFID $LENGTH(MPF.ID_LIST)$$NL$ 696 676 $NL$ 697 677 698 $ Åè·v[IDÔÌÅål678 $ 固定長メモリプールID番号の最大値 699 679 const ID _kernel_tmax_mpfid = (TMIN_MPFID + TNUM_MPFID - 1);$NL$ 700 680 const ID _kernel_tmax_smpfid = (TMIN_MPFID + TNUM_SMPFID - 1);$NL$ … … 703 683 $IF LENGTH(MPF.ID_LIST)$ 704 684 $FOREACH mpfid MPF.ID_LIST$ 705 $ // mpfatr ªimTA_TPRInjÅÈ¢êiE_RSATRj685 $ // mpfatrが([TA_TPRI])でない場合(E_RSATR) 706 686 $IF (MPF.MPFATR[mpfid] & ~TA_TPRI) != 0$ 707 687 $ERROR MPF.TEXT_LINE[mpfid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfatr", MPF.MPFATR[mpfid], mpfid, "CRE_MPF")$$END$ 708 688 $END$ 709 689 710 $ // blkcnt ª0ȺÌêiE_PARj690 $ // blkcntが0以下の場合(E_PAR) 711 691 $IF MPF.BLKCNT[mpfid] <= 0$ 712 692 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blkcnt", MPF.BLKCNT[mpfid], mpfid, "CRE_MPF")$$END$ 713 693 $END$ 714 694 715 $ // blksz ª0ȺÌêiE_PARj695 $ // blkszが0以下の場合(E_PAR) 716 696 $IF MPF.BLKSZ[mpfid] <= 0$ 717 697 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "blksz", MPF.BLKSZ[mpfid], mpfid, "CRE_MPF")$$END$ 718 698 $END$ 719 699 720 $ // Åè·v[Ìæ700 $ // 固定長メモリプール領域 721 701 $IF EQ(MPF.MPF[mpfid], "NULL")$ 722 702 static MPF_T _kernel_mpf_$mpfid$[($MPF.BLKCNT[mpfid]$) * COUNT_MPF_T($MPF.BLKSZ[mpfid]$)];$NL$ 723 703 $END$ 724 704 725 $ // mpfmb ªNULLÅÈ¢êiE_NOSPTj705 $ // mpfmbがNULLでない場合(E_NOSPT) 726 706 $IF !EQ(MPF.MPFMB[mpfid], "NULL")$ 727 707 $ERROR MPF.TEXT_LINE[mpfid]$E_NOSPT: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "mpfmb", MPF.MPFMB[mpfid], mpfid, "CRE_MPF")$$END$ 728 708 $END$ 729 709 730 $ // Åè·v[ÇÌæ710 $ // 固定長メモリプール管理領域 731 711 static MPFMB _kernel_mpfmb_$mpfid$[$MPF.BLKCNT[mpfid]$];$NL$ 732 712 $END$ 733 713 734 $ // Åè·v[ú»ubN̶¬714 $ // 固定長メモリプール初期化ブロックの生成 735 715 const MPFINIB _kernel_mpfinib_table[TNUM_SMPFID] = {$NL$ 736 716 $JOINEACH mpfid MPF.ID_LIST ",\n"$ … … 742 722 $END$$NL$ 743 723 744 $ ®I¶¬Åè·v[pÌÅè·v[ú»ubN̶¬724 $ 動的生成固定長メモリプール用の固定長メモリプール初期化ブロックの生成 745 725 $IF num_ampfid > 0$ 746 726 MPFINIB _kernel_ampfinib_table[$num_ampfid$];$NL$ … … 749 729 $END$$NL$ 750 730 751 $ Åè·v[ÇubN̶¬731 $ 固定長メモリプール管理ブロックの生成 752 732 $IF num_mpfid > 0$ 753 733 MPFCB _kernel_mpfcb_table[TNUM_MPFID];$NL$ … … 757 737 758 738 $ 759 $ üúnh739 $ 周期ハンドラ 760 740 $ 761 741 /*$NL$ … … 764 744 $NL$ 765 745 766 $ ÃIɶ¬³ê½üúnhÌ746 $ 静的に生成された周期ハンドラの数 767 747 #define TNUM_SCYCID $LENGTH(CYC.ID_LIST)$$NL$ 768 748 $NL$ 769 749 770 $ üúnhIDÔÌÅål750 $ 周期ハンドラID番号の最大値 771 751 const ID _kernel_tmax_cycid = (TMIN_CYCID + TNUM_CYCID - 1);$NL$ 772 752 const ID _kernel_tmax_scycid = (TMIN_CYCID + TNUM_SCYCID - 1);$NL$ 773 753 $NL$ 774 754 775 $ üúnhú»e[u̶¬755 $ 周期ハンドラ初期化テーブルの生成 776 756 $IF LENGTH(CYC.ID_LIST)$ 777 757 const CYCINIB _kernel_cycinib_table[TNUM_SCYCID] = {$NL$ 778 758 $JOINEACH cycid CYC.ID_LIST ",\n"$ 779 $ // cycatr ªimTA_STAnjÅÈ¢êiE_RSATRj759 $ // cycatrが([TA_STA])でない場合(E_RSATR) 780 760 $IF (CYC.CYCATR[cycid] & ~TA_STA) != 0$ 781 761 $ERROR CYC.TEXT_LINE[cycid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycatr", CYC.CYCATR[cycid], cycid, "CRE_CYC")$$END$ 782 762 $END$ 783 763 784 $ // (0 < cyctim && cyctim <= TMAX_RELTIM) ÅÈ¢êiE_PARj764 $ // (0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR) 785 765 $IF !(0 < CYC.CYCTIM[cycid] && CYC.CYCTIM[cycid] <= TMAX_RELTIM)$ 786 766 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cyctim", CYC.CYCTIM[cycid], cycid, "CRE_CYC")$$END$ 787 767 $END$ 788 768 789 $ // (0 <= cycphs && cycphs <= TMAX_RELTIM) ÅÈ¢êiE_PARj769 $ // (0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR) 790 770 $IF !(0 <= CYC.CYCPHS[cycid] && CYC.CYCPHS[cycid] <= TMAX_RELTIM)$ 791 771 $ERROR CYC.TEXT_LINE[cycid]$E_PAR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "cycphs", CYC.CYCPHS[cycid], cycid, "CRE_CYC")$$END$ 792 772 $END$ 793 773 794 $ // xFcycatrÉTA_STAªÝè³êÄ¢ÄC(cycphs == 0)Ìê774 $ // 警告:cycatrにTA_STAが設定されていて,(cycphs == 0)の場合 795 775 $IF (CYC.CYCATR[cycid] & TA_STA) != 0 && CYC.CYCPHS[cycid] == 0$ 796 776 $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$ 797 777 $END$ 798 778 799 $ // üúnhú»ubN779 $ // 周期ハンドラ初期化ブロック 800 780 $TAB${ ($CYC.CYCATR[cycid]$), (intptr_t)($CYC.EXINF[cycid]$), ($CYC.CYCHDR[cycid]$), ($CYC.CYCTIM[cycid]$), ($CYC.CYCPHS[cycid]$) } 801 781 $END$$NL$ … … 805 785 $END$$NL$ 806 786 807 $ ®I¶¬üúnhpÌüúnhú»ubN̶¬787 $ 動的生成周期ハンドラ用の周期ハンドラ初期化ブロックの生成 808 788 $IF num_acycid > 0$ 809 789 CYCINIB _kernel_acycinib_table[$num_acycid$];$NL$ … … 812 792 $END$$NL$ 813 793 814 $ üúnhÇubN̶¬794 $ 周期ハンドラ管理ブロックの生成 815 795 $IF num_cycid > 0$ 816 796 CYCCB _kernel_cyccb_table[TNUM_CYCID];$NL$ … … 820 800 821 801 $ 822 $ A[nh802 $ アラームハンドラ 823 803 $ 824 804 /*$NL$ … … 827 807 $NL$ 828 808 829 $ ÃIɶ¬³ê½A[nhÌ809 $ 静的に生成されたアラームハンドラの数 830 810 #define TNUM_SALMID $LENGTH(ALM.ID_LIST)$$NL$ 831 811 $NL$ 832 812 833 $ A[nhIDÔÌÅål813 $ アラームハンドラID番号の最大値 834 814 const ID _kernel_tmax_almid = (TMIN_ALMID + TNUM_ALMID - 1);$NL$ 835 815 const ID _kernel_tmax_salmid = (TMIN_ALMID + TNUM_SALMID - 1);$NL$ 836 816 $NL$ 837 817 838 $ A[nhú»ubN̶¬818 $ アラームハンドラ初期化ブロックの生成 839 819 $IF LENGTH(ALM.ID_LIST)$ 840 820 const ALMINIB _kernel_alminib_table[TNUM_SALMID] = {$NL$ 841 821 $JOINEACH almid ALM.ID_LIST ",\n"$ 842 $ // almatr ªiTA_NULLjÅÈ¢êiE_RSATRj822 $ // almatrが(TA_NULL)でない場合(E_RSATR) 843 823 $IF ALM.ALMATR[almid] != 0$ 844 824 $ERROR ALM.TEXT_LINE[almid]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "almatr", ALM.ALMATR[almid], almid, "CRE_ALM")$$END$ 845 825 $END$ 846 826 847 $ // A[nhú»ubN827 $ // アラームハンドラ初期化ブロック 848 828 $TAB${ ($ALM.ALMATR[almid]$), (intptr_t)($ALM.EXINF[almid]$), ($ALM.ALMHDR[almid]$) } 849 829 $END$$NL$ … … 853 833 $END$$NL$ 854 834 855 $ ®I¶¬A[nhpÌA[nhú»ubN̶¬835 $ 動的生成アラームハンドラ用のアラームハンドラ初期化ブロックの生成 856 836 $IF num_aalmid > 0$ 857 837 ALMINIB _kernel_aalminib_table[$num_aalmid$];$NL$ … … 860 840 $END$$NL$ 861 841 862 $ A[nhÇubN̶¬842 $ アラームハンドラ管理ブロックの生成 863 843 $IF num_almid > 0$ 864 844 ALMCB _kernel_almcb_table[TNUM_ALMID];$NL$ … … 868 848 869 849 $ 870 $ ÝÇ@\850 $ 割込み管理機能 871 851 $ 872 852 /*$NL$ … … 875 855 $NL$ 876 856 877 $ ÝÔÆÝnhÔÌÏ·e[uÌì¬857 $ 割込み番号と割込みハンドラ番号の変換テーブルの作成 878 858 $IF LENGTH(INTNO_ATTISR_VALID) != LENGTH(INHNO_ATTISR_VALID)$ 879 859 $ERROR$length of `INTNO_ATTISR_VALID' is different from length of `INHNO_ATTISR_VALID'$END$ … … 887 867 $END$ 888 868 889 $ ÝvCÉÖ·éG[`FbN869 $ 割込み要求ラインに関するエラーチェック 890 870 $i = 0$ 891 871 $FOREACH intno INT.ORDER_LIST$ 892 $ // intno ªCFG_INTÉηéÝÔƵijµÈ¢êiE_PARj872 $ // intnoがCFG_INTに対する割込み番号として正しくない場合(E_PAR) 893 873 $IF !LENGTH(FIND(INTNO_CFGINT_VALID, INT.INTNO[intno]))$ 894 874 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", INT.INTNO[intno], "CFG_INT")$$END$ 895 875 $END$ 896 876 897 $ // intno ªCFG_INTÉæÁÄÝèÏÝÌêiE_OBJj877 $ // intnoがCFG_INTによって設定済みの場合(E_OBJ) 898 878 $j = 0$ 899 879 $FOREACH intno2 INT.ORDER_LIST$ … … 904 884 $END$ 905 885 906 $ // intatr ªimTA_ENAINTnbmTA_EDGEnjÅÈ¢êiE_RSATRj886 $ // intatrが([TA_ENAINT]|[TA_EDGE])でない場合(E_RSATR) 907 887 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE|TARGET_INTATR)) != 0$ 908 888 $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$ 909 889 $END$ 910 890 911 $ // intpri ªCFG_INTÉηéÝDæxƵijµÈ¢êiE_PARj891 $ // intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR) 912 892 $IF !LENGTH(FIND(INTPRI_CFGINT_VALID, INT.INTPRI[intno]))$ 913 893 $ERROR INT.TEXT_LINE[intno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intpri", INT.INTPRI[intno], "CFG_INT")$$END$ 914 894 $END$ 915 895 916 $ // J[lÇÉÅè³êÄ¢éintnoÉεÄCintpriÉTMIN_INTPRI917 $ // æèଳ¢lªwè³ê½êiE_OBJj896 $ // カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRI 897 $ // よりも小さい値が指定された場合(E_OBJ) 918 898 $IF LENGTH(FIND(INTNO_FIX_KERNEL, intno))$ 919 899 $IF INT.INTPRI[intno] < TMIN_INTPRI$ … … 922 902 $END$ 923 903 924 $ // J[lÇOÉÅè³êÄ¢éintnoÉεÄCintpriÉTMIN_INTPRI925 $ // æèଳ¢lªwè³êÈ©Á½êiE_OBJj904 $ // カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRI 905 $ // よりも小さい値が指定されなかった場合(E_OBJ) 926 906 $IF LENGTH(FIND(INTNO_FIX_NONKERNEL, intno))$ 927 907 $IF INT.INTPRI[intno] >= TMIN_INTPRI$ … … 932 912 $END$ 933 913 934 $ ÝnhÉÖ·éG[`FbN914 $ 割込みハンドラに関するエラーチェック 935 915 $i = 0$ 936 916 $FOREACH inhno INH.ORDER_LIST$ 937 $ // inhno ªDEF_INHÉηéÝnhÔƵijµÈ¢êiE_PARj917 $ // inhnoがDEF_INHに対する割込みハンドラ番号として正しくない場合(E_PAR) 938 918 $IF !LENGTH(FIND(INHNO_DEFINH_VALID, INH.INHNO[inhno]))$ 939 919 $ERROR INH.TEXT_LINE[inhno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "inhno", INH.INHNO[inhno], "DEF_INH")$$END$ 940 920 $END$ 941 921 942 $ // inhno ªDEF_INHÉæÁÄÝèÏÝÌêiE_OBJj922 $ // inhnoがDEF_INHによって設定済みの場合(E_OBJ) 943 923 $j = 0$ 944 924 $FOREACH inhno2 INH.ORDER_LIST$ … … 949 929 $END$ 950 930 951 $ // inhatr ªiTA_NULLjÅÈ¢êiE_RSATRj931 $ // inhatrが(TA_NULL)でない場合(E_RSATR) 952 932 $IF (INH.INHATR[inhno] & ~TARGET_INHATR) != 0$ 953 933 $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$ 954 934 $END$ 955 935 956 $ // J[lÇÉÅè³êÄ¢éinhnoÉεÄCinhatrÉTA_NONKERNEL957 $ // @ªwè³êÄ¢éêiE_RSATRj936 $ // カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNEL 937 $ // が指定されている場合(E_RSATR) 958 938 $IF LENGTH(FIND(INHNO_FIX_KERNEL, inhno))$ 959 939 $IF (INH.INHATR[inhno] & TA_NONKERNEL) != 0$ … … 962 942 $END$ 963 943 964 $ // J[lÇOÉÅè³êÄ¢éinhnoÉεÄCinhatrÉTA_NONKERNEL965 $ // ªwè³êĢȢêiE_RSATRj944 $ // カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNEL 945 $ // が指定されていない場合(E_RSATR) 966 946 $IF LENGTH(FIND(INHNO_FIX_NONKERNEL, inhno))$ 967 947 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$ … … 972 952 $IF LENGTH(INTNO[INH.INHNO[inhno]])$ 973 953 $intno = INTNO[INH.INHNO[inhno]]$ 974 $ // inhno ÉηéintnoÉηéCFG_INTªÈ¢êiE_OBJj954 $ // inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ) 975 955 $IF !LENGTH(INT.INTNO[intno])$ 976 956 $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$ 977 957 $ELSE$ 978 958 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$ 979 $ // inhatr ÉTA_NONKERNELªwè³êĨç¸CinhnoÉÎ980 $ // ·éintnoÉεÄCFG_INTÅÝè³ê½ÝDæxª981 $ // TMIN_INTPRI æèଳ¢êiE_OBJj959 $ // inhatrにTA_NONKERNELが指定されておらず,inhnoに対応 960 $ // するintnoに対してCFG_INTで設定された割込み優先度が 961 $ // TMIN_INTPRIよりも小さい場合(E_OBJ) 982 962 $IF INT.INTPRI[intno] < TMIN_INTPRI$ 983 963 $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$ 984 964 $END$ 985 965 $ELSE$ 986 $ // inhatr ÉTA_NONKERNELªwè³êĨèCinhnoÉÎ987 $ // ·éintnoÉεÄCFG_INTÅÝè³ê½ÝDæxª988 $ // TMIN_INTPRI ÈãÅ éêiE_OBJj966 $ // inhatrにTA_NONKERNELが指定されており,inhnoに対応 967 $ // するintnoに対してCFG_INTで設定された割込み優先度が 968 $ // TMIN_INTPRI以上である場合(E_OBJ) 989 969 $IF INT.INTPRI[intno] >= TMIN_INTPRI$ 990 970 $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$ … … 996 976 $END$ 997 977 998 $ ÝT[rX[`iISRjÉÖ·éG[`FbN978 $ 割込みサービスルーチン(ISR)に関するエラーチェック 999 979 $FOREACH order ISR.ORDER_LIST$ 1000 $ // isratr ªiTA_NULLjÅÈ¢êiE_RSATRj980 $ // isratrが(TA_NULL)でない場合(E_RSATR) 1001 981 $IF (ISR.ISRATR[order] & ~TARGET_ISRATR) != 0$ 1002 982 $ERROR ISR.TEXT_LINE[order]$E_RSATR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isratr", ISR.ISRATR[order], "ATT_ISR")$$END$ 1003 983 $END$ 1004 984 1005 $ // intno ªATT_ISRÉηéÝÔƵijµÈ¢êiE_PARj985 $ // intnoがATT_ISRに対する割込み番号として正しくない場合(E_PAR) 1006 986 $IF !LENGTH(FIND(INTNO_ATTISR_VALID, ISR.INTNO[order]))$ 1007 987 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "intno", ISR.INTNO[order], "ATT_ISR")$$END$ 1008 988 $END$ 1009 989 1010 $ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI) ÅÈ¢êiE_PARj990 $ // (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR) 1011 991 $IF !(TMIN_ISRPRI <= ISR.ISRPRI[order] && ISR.ISRPRI[order] <= TMAX_ISRPRI)$ 1012 992 $ERROR ISR.TEXT_LINE[order]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "isrpri", ISR.ISRPRI[order], "ATT_ISR")$$END$ … … 1017 997 $inhno = INHNO[intno]$ 1018 998 1019 $ // ÝÔintnoÉεÄo^³ê½ISRÌXgÌì¬999 $ // 割込み番号intnoに対して登録されたISRのリストの作成 1020 1000 $isr_order_list = {}$ 1021 1001 $FOREACH order ISR.ORDER_LIST$ … … 1026 1006 $END$ 1027 1007 1028 $ // ÝÔintnoÉεÄo^³ê½ISRª¶Ý·éê1008 $ // 割込み番号intnoに対して登録されたISRが存在する場合 1029 1009 $IF LENGTH(isr_order_list) > 0$ 1030 $ // intno ÉηéinhnoÉεÄDEF_INHª éêiE_OBJj1010 $ // intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ) 1031 1011 $IF LENGTH(INH.INHNO[inhno])$ 1032 1012 $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$ 1033 1013 $END$ 1034 1014 1035 $ // intno ÉηéCFG_INTªÈ¢êiE_OBJj1015 $ // intnoに対するCFG_INTがない場合(E_OBJ) 1036 1016 $IF !LENGTH(INT.INTNO[intno])$ 1037 1017 $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$ 1038 1018 $ELSE$ 1039 $ // intno ÉεÄCFG_INTÅÝè³ê½ÝDæxªTMIN_INTPRI1040 $ // æèଳ¢êiE_OBJj1019 $ // intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRI 1020 $ // よりも小さい場合(E_OBJ) 1041 1021 $IF INT.INTPRI[intno] < TMIN_INTPRI$ 1042 1022 $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$ … … 1046 1026 $END$ 1047 1027 1048 $ ÝT[rX[`iISRjÇÌf[^\¢1028 $ 割込みサービスルーチン(ISR)管理のデータ構造 1049 1029 $intno_isr_list = {}$ 1050 1030 $FOREACH intno INTNO_ATTISR_VALID$ … … 1082 1062 $END$$NL$ 1083 1063 1084 $ ÝT[rX[`iISRjÄoµÌ½ßÌÝnh̶¬1064 $ 割込みサービスルーチン(ISR)呼出しのための割込みハンドラの生成 1085 1065 $FOREACH intno INTNO_ISR$ 1086 1066 $inhno = INHNO[intno]$ … … 1092 1072 $INH.ORDER_LIST = APPEND(INH.ORDER_LIST, inhno)$ 1093 1073 1094 $ // ISR pÌÝnh1074 $ // ISR用の割込みハンドラ 1095 1075 void$NL$ 1096 1076 _kernel_inthdr_$intno$(void)$NL$ … … 1103 1083 $END$ 1104 1084 1105 $ ÝT[rX[`Ì1085 $ 割込みサービスルーチンの数 1106 1086 #define TNUM_SISR $LENGTH(ISR.ORDER_LIST)$$NL$ 1107 1087 #define TNUM_ISR $LENGTH(ISR.ORDER_LIST) + num_aisrid$$NL$ 1108 1088 $NL$ 1109 1089 1110 $ ÝT[rX[`IDÔÌÅål1090 $ 割込みサービスルーチンID番号の最大値 1111 1091 const ID _kernel_tmax_isrid = (TMIN_ISRID + TNUM_ISRID - 1);$NL$ 1112 1092 const uint_t _kernel_tnum_sisr = TNUM_SISR;$NL$ 1113 1093 $NL$ 1114 1094 1115 $ ÝT[rX[`ú»ubN̶¬1095 $ 割込みサービスルーチン初期化ブロックの生成 1116 1096 $IF LENGTH(ISR.ORDER_LIST)$ 1117 1097 const ISRINIB _kernel_sisrinib_table[TNUM_SISR] = {$NL$ … … 1125 1105 $NL$ 1126 1106 1127 $ ®I¶¬ÝT[rX[`pÌÝT[rX[`ú»ub1128 $ N̶¬1107 $ 動的生成割込みサービスルーチン用の割込みサービスルーチン初期化ブロッ 1108 $ クの生成 1129 1109 $IF num_aisrid > 0$ 1130 1110 ISRINIB _kernel_aisrinib_table[$num_aisrid$];$NL$ … … 1134 1114 $NL$ 1135 1115 1136 $ ÝT[rX[`ÇubN̶¬1116 $ 割込みサービスルーチン管理ブロックの生成 1137 1117 $IF num_isr > 0$ 1138 1118 ISRCB _kernel_isrcb_table[TNUM_ISR];$NL$ … … 1143 1123 1144 1124 $ 1145 $ ÝÇ@\̽ßÌWIÈú»îñ̶¬1146 $ 1147 $ ÝnhÌú»ÉKvÈîñ1125 $ 割込み管理機能のための標準的な初期化情報の生成 1126 $ 1127 $ 割込みハンドラの初期化に必要な情報 1148 1128 $IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INHINIB_TABLE,0)$ 1149 1129 1150 $ Ýnh1130 $ 割込みハンドラ数 1151 1131 #define TNUM_INHNO $LENGTH(INH.ORDER_LIST)$$NL$ 1152 1132 const uint_t _kernel_tnum_inhno = TNUM_INHNO;$NL$ … … 1159 1139 $NL$ 1160 1140 1161 $ Ýnhú»e[u1141 $ 割込みハンドラ初期化テーブル 1162 1142 $IF LENGTH(INH.ORDER_LIST)$ 1163 1143 const INHINIB _kernel_inhinib_table[TNUM_INHNO] = {$NL$ … … 1175 1155 $END$ 1176 1156 1177 $ ÝvCÌú»ÉKvÈîñ1157 $ 割込み要求ラインの初期化に必要な情報 1178 1158 $IF !OMIT_INITIALIZE_INTERRUPT || ALT(USE_INTINIB_TABLE,0)$ 1179 1159 1180 $ ÝvC1160 $ 割込み要求ライン数 1181 1161 #define TNUM_INTNO $LENGTH(INT.ORDER_LIST)$$NL$ 1182 1162 const uint_t _kernel_tnum_intno = TNUM_INTNO;$NL$ 1183 1163 $NL$ 1184 1164 1185 $ ÝvCú»e[u1165 $ 割込み要求ライン初期化テーブル 1186 1166 $IF LENGTH(INT.ORDER_LIST)$ 1187 1167 const INTINIB _kernel_intinib_table[TNUM_INTNO] = {$NL$ … … 1196 1176 1197 1177 $ 1198 $ CPU áOÇ@\1178 $ CPU例外管理機能 1199 1179 $ 1200 1180 /*$NL$ … … 1203 1183 $NL$ 1204 1184 1205 $ CPU áOnhÉÖ·éG[`FbN1185 $ CPU例外ハンドラに関するエラーチェック 1206 1186 $i = 0$ 1207 1187 $FOREACH excno EXC.ORDER_LIST$ 1208 $ // excno ªDEF_EXCÉηéCPUáOnhÔƵijµÈ¢êiE_PARj1188 $ // excnoがDEF_EXCに対するCPU例外ハンドラ番号として正しくない場合(E_PAR) 1209 1189 $IF !LENGTH(FIND(EXCNO_DEFEXC_VALID, EXC.EXCNO[excno]))$ 1210 1190 $ERROR EXC.TEXT_LINE[excno]$E_PAR: $FORMAT(_("illegal %1% `%2%\' in %3%"), "excno", EXC.EXCNO[excno], "DEF_EXC")$$END$ 1211 1191 $END$ 1212 1192 1213 $ // excno ªDEF_EXCÉæÁÄÝèÏÝÌêiE_OBJj1193 $ // excnoがDEF_EXCによって設定済みの場合(E_OBJ) 1214 1194 $j = 0$ 1215 1195 $FOREACH excno2 EXC.ORDER_LIST$ … … 1220 1200 $END$ 1221 1201 1222 $ // excatr ªiTA_NULLjÅÈ¢êiE_RSATRj1202 $ // excatrが(TA_NULL)でない場合(E_RSATR) 1223 1203 $IF (EXC.EXCATR[excno] & ~TARGET_EXCATR) != 0$ 1224 1204 $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$ … … 1227 1207 $END$ 1228 1208 1229 $ CPU áOnh̽ßÌWIÈú»îñ̶¬1209 $ CPU例外ハンドラのための標準的な初期化情報の生成 1230 1210 $IF !OMIT_INITIALIZE_EXCEPTION$ 1231 1211 1232 $ CPU áOnh1212 $ CPU例外ハンドラ数 1233 1213 #define TNUM_EXCNO $LENGTH(EXC.ORDER_LIST)$$NL$ 1234 1214 const uint_t _kernel_tnum_excno = TNUM_EXCNO;$NL$ … … 1239 1219 $NL$ 1240 1220 1241 $ CPU áOnhú»e[u1221 $ CPU例外ハンドラ初期化テーブル 1242 1222 $IF LENGTH(EXC.ORDER_LIST)$ 1243 1223 const EXCINIB _kernel_excinib_table[TNUM_EXCNO] = {$NL$ … … 1252 1232 1253 1233 $ 1254 $ ñ^XNReLXgpÌX^bNÌæ1234 $ 非タスクコンテキスト用のスタック領域 1255 1235 $ 1256 1236 /*$NL$ … … 1260 1240 1261 1241 $IF !LENGTH(ICS.ORDER_LIST)$ 1262 $ // DEF_ICS ªÈ¢êÌftHglÌÝè1242 $ // DEF_ICSがない場合のデフォルト値の設定 1263 1243 #ifdef DEFAULT_ISTK$NL$ 1264 1244 $NL$ … … 1275 1255 $ELSE$ 1276 1256 1277 $ // ÃIAPIuDEF_ICSvª¡ éiE_OBJj1257 $ // 静的API「DEF_ICS」が複数ある(E_OBJ) 1278 1258 $IF LENGTH(ICS.ORDER_LIST) > 1$ 1279 1259 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_ICS")$$END$ 1280 1260 $END$ 1281 1261 1282 $ // istksz ª0Ⱥ©C^[Qbgè`ÌŬliTARGET_MIN_ISTKSZjæèà1283 $ // ¬³¢êiE_PARj1262 $ // istkszが0以下か,ターゲット定義の最小値(TARGET_MIN_ISTKSZ)よりも 1263 $ // 小さい場合(E_PAR) 1284 1264 $IF ICS.ISTKSZ[1] <= 0 || (TARGET_MIN_ISTKSZ 1285 1265 && ICS.ISTKSZ[1] < TARGET_MIN_ISTKSZ)$ … … 1287 1267 $END$ 1288 1268 1289 $ // istksz ªX^bNÌæÌTCYƵijµÈ¢êiE_PARj1269 $ // istkszがスタック領域のサイズとして正しくない場合(E_PAR) 1290 1270 $IF !EQ(ICS.ISTK[1], "NULL") && CHECK_STKSZ_ALIGN 1291 1271 && (ICS.ISTKSZ[1] & (CHECK_STKSZ_ALIGN - 1))$ … … 1294 1274 1295 1275 $IF EQ(ICS.ISTK[1], "NULL")$ 1296 $ // X^bNÌæÌ©®t¯1276 $ // スタック領域の自動割付け 1297 1277 static STK_T _kernel_istack[COUNT_STK_T($ICS.ISTKSZ[1]$)];$NL$ 1298 1278 #define TOPPERS_ISTKSZ ROUND_STK_T($ICS.ISTKSZ[1]$)$NL$ … … 1305 1285 $NL$ 1306 1286 1307 $ ñ^XNReLXgpÌX^bNÌæ1287 $ 非タスクコンテキスト用のスタック領域 1308 1288 const SIZE _kernel_istksz = TOPPERS_ISTKSZ;$NL$ 1309 1289 STK_T *const _kernel_istk = TOPPERS_ISTK;$NL$ … … 1315 1295 1316 1296 $ 1317 $ J[lªèt¯éÌæ1297 $ カーネルが割り付けるメモリ領域 1318 1298 $ 1319 1299 /*$NL$ … … 1323 1303 1324 1304 $IF !LENGTH(KMM.ORDER_LIST)$ 1325 $ // DEF_KMM ªÈ¢êÌftHglÌÝè1305 $ // DEF_KMMがない場合のデフォルト値の設定 1326 1306 #define TOPPERS_KMMSZ 0$NL$ 1327 1307 #define TOPPERS_KMM NULL$NL$ 1328 1308 $ELSE$ 1329 $ // ÃIAPIuDEF_KMMvª¡ éiE_OBJj1309 $ // 静的API「DEF_KMM」が複数ある(E_OBJ) 1330 1310 $IF LENGTH(KMM.ORDER_LIST) > 1$ 1331 1311 $ERROR$E_OBJ: $FORMAT(_("too many %1%"), "DEF_KMM")$$END$ 1332 1312 $END$ 1333 1313 1334 $ // kmmsz ª0ȺÌêiE_PARj1314 $ // kmmszが0以下の場合(E_PAR) 1335 1315 $IF KMM.KMMSZ[1] <= 0$ 1336 1316 $ERROR KMM.TEXT_LINE[1]$E_PAR: $FORMAT(_("%1% `%2%\' is zero in %3%"), "kmmsz", KMM.KMMSZ[1], "DEF_KMM")$$END$ 1337 1317 $END$ 1338 1318 1339 $ // kmmsz ªJ[lªèt¯éÌæÌTCYƵijµÈ¢êiE_PARj1319 $ // kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合(E_PAR) 1340 1320 $IF !EQ(KMM.KMM[1], "NULL") && CHECK_MB_ALIGN 1341 1321 && (KMM.KMMSZ[1] & (CHECK_MB_ALIGN - 1))$ … … 1344 1324 1345 1325 $IF EQ(KMM.KMM[1], "NULL")$ 1346 $ // J[lªèt¯éÌæÌ©®t¯1326 $ // カーネルが割り付けるメモリ領域の自動割付け 1347 1327 static MB_T _kernel_memory[TOPPERS_COUNT_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))];$NL$ 1348 1328 #define TOPPERS_KMMSZ TOPPERS_ROUND_SZ($KMM.KMMSZ[1]$, sizeof(MB_T))$NL$ … … 1355 1335 $NL$ 1356 1336 1357 $ J[lªèt¯éÌæ1337 $ カーネルが割り付けるメモリ領域 1358 1338 const SIZE _kernel_kmmsz = TOPPERS_KMMSZ;$NL$ 1359 1339 MB_T *const _kernel_kmm = TOPPERS_KMM;$NL$ … … 1361 1341 1362 1342 $ 1363 $ ^CCxgÇ1343 $ タイムイベント管理 1364 1344 $ 1365 1345 /*$NL$ … … 1371 1351 1372 1352 $ 1373 $ eW 1374 [Ìú»Ö 1353 $ 各モジュールの初期化関数 1375 1354 $ 1376 1355 /*$NL$ … … 1397 1376 1398 1377 $ 1399 $ ú»[`ÌÀsÖ1378 $ 初期化ルーチンの実行関数 1400 1379 $ 1401 1380 /*$NL$ … … 1407 1386 {$NL$ 1408 1387 $FOREACH order INI.ORDER_LIST$ 1409 $ // iniatr ªiTA_NULLjÅÈ¢êiE_RSATRj1388 $ // iniatrが(TA_NULL)でない場合(E_RSATR) 1410 1389 $IF INI.INIATR[order] != 0$ 1411 1390 $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$ … … 1417 1396 1418 1397 $ 1419 $ I¹[`ÌÀsÖ1398 $ 終了処理ルーチンの実行関数 1420 1399 $ 1421 1400 /*$NL$ … … 1427 1406 {$NL$ 1428 1407 $FOREACH rorder TER.RORDER_LIST$ 1429 $ // teratr ªiTA_NULLjÅÈ¢êiE_RSATRj1408 $ // teratrが(TA_NULL)でない場合(E_RSATR) 1430 1409 $IF TER.TERATR[rorder] != 0$ 1431 1410 $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$ -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_api.csv
-
Property svn:mime-type
set to
text/plain; charset=SHIFT_JIS
-
Property svn:mime-type
set to
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_check.tf
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=SHIFT_JIS
r164 r167 8 8 $ Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 $ 10 $ ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 $ Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 $ ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 $ (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 $ \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 15 $ XR[hÉÜÜêÄ¢é±ÆD 16 $ (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 $ pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 $ Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 21 $ ̳ÛØKèðfÚ·é±ÆD 22 $ (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 $ pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 $ ÆD 25 $ (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 $ ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 29 $ (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 $ ñ·é±ÆD 31 $ (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 $ Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 $ ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 $ RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 $ 免責すること. 36 32 $ 37 $ {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨38 $ æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI39 $ ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF40 $ AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»41 $ ÌÓCðíÈ¢D33 $ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 $ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 $ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 $ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 $ の責任を負わない. 42 38 $ 43 39 $ @(#) $Id$ … … 46 42 47 43 $ 48 $ f[^ZNVÌLMA©çVMAÖÌRs[44 $ データセクションのLMAからVMAへのコピー 49 45 $ 50 46 $FOREACH lma LMA.ORDER_LIST$ … … 64 60 65 61 $ 66 $ ÖÌæªÔnÌ`FbN62 $ 関数の先頭番地のチェック 67 63 $ 68 64 $IF CHECK_FUNC_ALIGN || CHECK_FUNC_NONNULL$ 69 $ // ^XNÆ^XNáO[`ÌæªÔnÌ`FbN65 $ // タスクとタスク例外処理ルーチンの先頭番地のチェック 70 66 $tinib = SYMBOL("_kernel_tinib_table")$ 71 67 $FOREACH tskid TSK.ID_LIST$ … … 90 86 $END$ 91 87 92 $ // üúnhÌæªÔnÌ`FbN88 $ // 周期ハンドラの先頭番地のチェック 93 89 $cycinib = SYMBOL("_kernel_cycinib_table")$ 94 90 $FOREACH cycid CYC.ID_LIST$ … … 107 103 $END$ 108 104 109 $ // A[nhÌæªÔnÌ`FbN105 $ // アラームハンドラの先頭番地のチェック 110 106 $alminib = SYMBOL("_kernel_alminib_table")$ 111 107 $FOREACH almid ALM.ID_LIST$ … … 124 120 $END$ 125 121 126 $ // ÝT[rX[`ÌæªÔnÌ`FbN122 $ // 割込みサービスルーチンの先頭番地のチェック 127 123 $isrinib = SYMBOL("_kernel_sisrinib_table")$ 128 124 $FOREACH order ISR.ORDER_LIST$ … … 143 139 144 140 $ 145 $ X^bNÌæÌæªÔnÌ`FbN141 $ スタック領域の先頭番地のチェック 146 142 $ 147 143 $IF CHECK_STACK_ALIGN || CHECK_STACK_NONNULL$ 148 $ // ^XNÌX^bNÌæÌæªÔnÌ`FbN144 $ // タスクのスタック領域の先頭番地のチェック 149 145 $tinib = SYMBOL("_kernel_tinib_table")$ 150 146 $FOREACH tskid TSK.ID_LIST$ … … 167 163 $END$ 168 164 169 $ // ñ^XNReLXgpÌX^bNÌæÌæªÔnÌ`FbN165 $ // 非タスクコンテキスト用のスタック領域の先頭番地のチェック 170 166 $istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$ 171 167 $IF CHECK_STACK_ALIGN && (istk & (CHECK_STACK_ALIGN - 1)) != 0$ … … 182 178 183 179 $ 184 $ Åè·v[ÌæÌæªÔnÌ`FbN180 $ 固定長メモリプール領域の先頭番地のチェック 185 181 $ 186 182 $IF CHECK_MPF_ALIGN || CHECK_MPF_NONNULL$ 187 $ // Åè·v[ÌæÌæªÔnÌ`FbN183 $ // 固定長メモリプール領域の先頭番地のチェック 188 184 $mpfinib = SYMBOL("_kernel_mpfinib_table")$ 189 185 $FOREACH mpfid MPF.ID_LIST$ … … 204 200 205 201 $ 206 $ J[lªèt¯éÌæÌæªÔnÌ`FbN202 $ カーネルが割り付けるメモリ領域の先頭番地のチェック 207 203 $ 208 204 $IF CHECK_MB_ALIGN$ 209 $ // J[lªèt¯éÌæÌæªÔnÌ`FbN205 $ // カーネルが割り付けるメモリ領域の先頭番地のチェック 210 206 $kmm = PEEK(SYMBOL("_kernel_kmm"), sizeof_void_ptr)$ 211 207 $IF CHECK_MB_ALIGN && (kmm & (CHECK_MB_ALIGN - 1)) != 0$ -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_def.csv
-
Property svn:mime-type
set to
text/plain; charset=SHIFT_JIS
-
Property svn:mime-type
set to
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_impl.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * TOPPERS/ASP J[làü¯Wwb_t@C49 * 50 * ±Ìwb_t@CÍCJ[lð\¬·évOÌ\[Xt@C51 * ÅK¸CN[h·é׫Wwb_t@CÅ éD52 * 53 * AZu¾êÌ\[Xt@C©ç±Ìt@CðCN[h·é54 * ÍCTOPPERS_MACRO_ONLYðè`µÄ¨D±êÉæèC}Nè`ÈOð55 * æ¤ÉÈÁÄ¢éD44 * TOPPERS/ASPカーネル内部向け標準ヘッダファイル 45 * 46 * このヘッダファイルは,カーネルを構成するプログラムのソースファイル 47 * で必ずインクルードするべき標準ヘッダファイルである. 48 * 49 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 50 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を 51 * 除くようになっている. 56 52 */ 57 53 … … 60 56 61 57 /* 62 * J[lÌà¯Ê¼Ìl[58 * カーネルの内部識別名のリネーム 63 59 */ 64 60 #include "kernel_rename.h" 65 61 66 62 /* 67 * AvP[VƤÊÌwb_t@C63 * アプリケーションと共通のヘッダファイル 68 64 */ 69 65 #include <kernel.h> 70 66 71 67 /* 72 * VXeO@\̽ßÌè`68 * システムログ機能のための定義 73 69 */ 74 70 #include <t_syslog.h> 75 71 76 72 /* 77 * ^LXgðs¤}NÌè`73 * 型キャストを行うマクロの定義 78 74 */ 79 75 #ifndef CAST … … 82 78 83 79 /* 84 * ^[Qbg˶îñÌè`80 * ターゲット依存情報の定義 85 81 */ 86 82 #include "target_config.h" 87 83 88 84 /* 89 * ·×ÄÌÖðRpC·é½ßÌè`85 * すべての関数をコンパイルするための定義 90 86 */ 91 87 #ifdef ALLFUNC … … 94 90 95 91 /* 96 * rbgtB[hÅ̳µ®^97 * 98 * 8 rbgȺÌÌrbgtB[hÅC³µ®lðÛµ½¢ê99 * Ép¢é׫f[^^DANSI CÅÍCrbgtB[hÌf[^^ÉÍ100 * int Æunsigned intµ©³êÈ¢½ßCftHgÌè`Íunsigned101 * int ƵĢéªC^[Qbg¨æÑc[˶ÅCunsigned charܽÍ102 * unsigned short Éè`µ½ûªø¦ªÇ¢êª éD92 * ビットフィールドでの符号無し整数型 93 * 94 * 8ビット以下の幅のビットフィールドで,符号無し整数値を保持したい場合 95 * に用いるべきデータ型.ANSI Cでは,ビットフィールドのデータ型には 96 * intとunsigned intしか許されないため,デフォルトの定義はunsigned 97 * intとしているが,ターゲットおよびツール依存で,unsigned charまたは 98 * unsigned shortに定義した方が効率が良い場合がある. 103 99 */ 104 100 #ifndef BIT_FIELD_UINT … … 107 103 108 104 /* 109 * rbgtB[hÅÌu[^110 * 111 * 1 rbgÌrbgtB[hÅCu[lðÛµ½¢êÉp¢é׫112 * f[^^DftHgÅÍBIT_FIELD_UINTƯêÉè`µÄ¢éªCu[113 * lðÛ·é±Æ𾦷é½ßÉÊ̼ÌƵĢéD105 * ビットフィールドでのブール型 106 * 107 * 1ビット幅のビットフィールドで,ブール値を保持したい場合に用いるべき 108 * データ型.デフォルトではBIT_FIELD_UINTと同一に定義しているが,ブー 109 * ル値を保持することを明示するために別の名称としている. 114 110 */ 115 111 #ifndef BIT_FIELD_BOOL … … 118 114 119 115 /* 120 * IuWFNgIDÌŬlÌè` 121 */ 122 #define TMIN_TSKID 1 /* ^XNIDÌŬl */ 123 #define TMIN_SEMID 1 /* Z}tHIDÌŬl */ 124 #define TMIN_FLGID 1 /* tOIDÌŬl */ 125 #define TMIN_DTQID 1 /* f[^L 126 [IDÌŬl */ 127 #define TMIN_PDQID 1 /* Dæxf[^L 128 [IDÌŬl */ 129 #define TMIN_MBXID 1 /* [{bNXIDÌŬl */ 130 #define TMIN_MPFID 1 /* Åè·v[IDÌŬl */ 131 #define TMIN_CYCID 1 /* üúnhIDÌŬl */ 132 #define TMIN_ALMID 1 /* A[nhIDÌŬl */ 133 #define TMIN_ISRID 1 /* ÝT[rX[`IDÌŬl */ 134 135 /* 136 * DæxÌiKÌè` 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 * 優先度の段階数の定義 137 131 */ 138 132 #define TNUM_TPRI (TMAX_TPRI - TMIN_TPRI + 1) … … 141 135 142 136 /* 143 * J[làÅgp·é®«Ìè`144 */ 145 #define TA_NOEXS ((ATR)(-1)) /* ¢o^óÔ*/137 * カーネル内部で使用する属性の定義 138 */ 139 #define TA_NOEXS ((ATR)(-1)) /* 未登録状態 */ 146 140 147 141 #ifndef TA_MEMALLOC 148 #define TA_MEMALLOC UINT_C(0x8000) /* ÌæðJ[lÅmÛ*/142 #define TA_MEMALLOC UINT_C(0x8000) /* メモリ領域をカーネルで確保 */ 149 143 #endif /* TA_MEMALLOC */ 150 144 #ifndef TA_MBALLOC 151 #define TA_MBALLOC UINT_C(0x4000) /* ÇÌæðJ[lÅmÛ*/145 #define TA_MBALLOC UINT_C(0x4000) /* 管理領域をカーネルで確保 */ 152 146 #endif /* TA_MBALLOC */ 153 147 154 148 /* 155 * ^[Qbgè`ÌG[`FbN}NÌftHglÌè`149 * ターゲット定義のエラーチェックマクロのデフォルト値の定義 156 150 */ 157 151 #ifndef TARGET_TSKATR 158 #define TARGET_TSKATR 0U /* ^[Qbgè`Ì^XN®«*/152 #define TARGET_TSKATR 0U /* ターゲット定義のタスク属性 */ 159 153 #endif /* TARGET_TSKATR */ 160 154 161 155 #ifndef TARGET_ISRATR 162 #define TARGET_ISRATR 0U /* ^[Qbgè`ÌISR®«*/156 #define TARGET_ISRATR 0U /* ターゲット定義のISR属性 */ 163 157 #endif /* TARGET_ISRATR */ 164 158 165 159 /* 166 * wb_t@Cð½È¢W 167 [ÌÖEÏÌé¾ 160 * ヘッダファイルを持たないモジュールの関数・変数の宣言 168 161 */ 169 162 #ifndef TOPPERS_MACRO_ONLY 170 163 171 164 /* 172 * eW 173 [Ìú»ikernel_cfg.cj 165 * 各モジュールの初期化(kernel_cfg.c) 174 166 */ 175 167 extern void initialize_object(void); 176 168 177 169 /* 178 * ú»[`ÌÀsikernel_cfg.cj170 * 初期化ルーチンの実行(kernel_cfg.c) 179 171 */ 180 172 extern void call_inirtn(void); 181 173 182 174 /* 183 * I¹[`ÌÀsikernel_cfg.cj175 * 終了処理ルーチンの実行(kernel_cfg.c) 184 176 */ 185 177 extern void call_terrtn(void); 186 178 187 179 /* 188 * ñ^XNReLXgpÌX^bNÌæikernel_cfg.cj189 */ 190 extern const SIZE istksz; /* X^bNÌæÌTCYiÛß½lj*/191 extern STK_T *const istk; /* X^bNÌæÌæªÔn*/180 * 非タスクコンテキスト用のスタック領域(kernel_cfg.c) 181 */ 182 extern const SIZE istksz; /* スタック領域のサイズ(丸めた値) */ 183 extern STK_T *const istk; /* スタック領域の先頭番地 */ 192 184 #ifdef TOPPERS_ISTKPT 193 extern STK_T *const istkpt; /* X^bN|C^Ìúl*/185 extern STK_T *const istkpt; /* スタックポインタの初期値 */ 194 186 #endif /* TOPPERS_ISTKPT */ 195 187 196 188 /* 197 * J[lªèt¯éÌæikernel_cfg.cj198 */ 199 extern const SIZE kmmsz; /* J[lªèt¯éÌæÌTCY*/200 extern MB_T *const kmm; /* J[lªèt¯éÌæÌæªÔn*/201 202 /* 203 * J[l®ìóÔtOistartup.cj189 * カーネルが割り付けるメモリ領域(kernel_cfg.c) 190 */ 191 extern const SIZE kmmsz; /* カーネルが割り付けるメモリ領域のサイズ */ 192 extern MB_T *const kmm; /* カーネルが割り付けるメモリ領域の先頭番地 */ 193 194 /* 195 * カーネル動作状態フラグ(startup.c) 204 196 */ 205 197 extern bool_t kerflg; 206 198 207 199 /* 208 * J[lÌN®istartup.cj200 * カーネルの起動(startup.c) 209 201 */ 210 202 extern void sta_ker(void); 211 203 212 204 /* 213 * J[lÌI¹istartup.cj205 * カーネルの終了処理(startup.c) 214 206 */ 215 207 extern void exit_kernel(void); 216 208 217 209 /* 218 * J[lÌèt¯éÌæÌÇistartup.cj210 * カーネルの割り付けるメモリ領域の管理(startup.c) 219 211 */ 220 212 extern void initialize_kmm(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_int.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * kernel_cfg.c i¨æÑcfg1_out.cjpwb_t@C44 * kernel_cfg.c(およびcfg1_out.c)用ヘッダファイル 49 45 */ 50 46 … … 53 49 54 50 /* 55 * J[lWwb_t@C51 * カーネル標準ヘッダファイル 56 52 */ 57 53 #include "kernel_impl.h" 58 54 59 55 /* 60 * J[lÌewb_t@C56 * カーネルの各ヘッダファイル 61 57 */ 62 58 #include "task.h" … … 74 70 75 71 /* 76 * l[µ½V{ð³Éß·½ßÌwb_t@C72 * リネームしたシンボルを元に戻すためのヘッダファイル 77 73 */ 78 74 #include "kernel_unrename.h" -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_rename.def
-
Property svn:mime-type
set to
text/plain; charset=SHIFT_JIS
-
Property svn:mime-type
set to
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_rename.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
-
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/kernel_unrename.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
-
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/mailbox.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * [{bNX@\44 * メールボックス機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 59 55 */ 60 56 #ifndef LOG_ACRE_MBX_ENTER … … 123 119 124 120 /* 125 * [{bNXÌ121 * メールボックスの数 126 122 */ 127 123 #define tnum_mbx ((uint_t)(tmax_mbxid - TMIN_MBXID + 1)) … … 129 125 130 126 /* 131 * [{bNXID©ç[{bNXÇubNðæèo·½ßÌ}N127 * メールボックスIDからメールボックス管理ブロックを取り出すためのマクロ 132 128 */ 133 129 #define INDEX_MBX(mbxid) ((uint_t)((mbxid) - TMIN_MBXID)) … … 137 133 138 134 /* 139 * gpµÄ¢È¢[{bNXÇubNÌXg135 * 使用していないメールボックス管理ブロックのリスト 140 136 */ 141 137 QUEUE free_mbxcb; 142 138 143 139 /* 144 * [{bNX@\Ìú»140 * メールボックス機能の初期化 145 141 */ 146 142 void … … 170 166 171 167 /* 172 * bZ[WDæxÌæoµ168 * メッセージ優先度の取出し 173 169 */ 174 170 #define MSGPRI(pk_msg) (((T_MSG_PRI *)(pk_msg))->msgpri) 175 171 176 172 /* 177 * DæxbZ[WL 178 [ÖÌ}ü 173 * 優先度順メッセージキューへの挿入 179 174 */ 180 175 Inline void … … 194 189 195 190 /* 196 * [{bNX̶¬191 * メールボックスの生成 197 192 */ 198 193 #ifdef TOPPERS_acre_mbx … … 235 230 236 231 /* 237 * [{bNXÌí232 * メールボックスの削除 238 233 */ 239 234 #ifdef TOPPERS_del_mbx … … 279 274 280 275 /* 281 * [{bNXÖÌM276 * メールボックスへの送信 282 277 */ 283 278 #ifdef TOPPERS_snd_mbx … … 337 332 338 333 /* 339 * [{bNX©çÌóM334 * メールボックスからの受信 340 335 */ 341 336 #ifdef TOPPERS_rcv_mbx … … 381 376 382 377 /* 383 * [{bNX©çÌóMi|[Oj378 * メールボックスからの受信(ポーリング) 384 379 */ 385 380 #ifdef TOPPERS_prcv_mbx … … 418 413 419 414 /* 420 * [{bNX©çÌóMi^CAEg èj415 * メールボックスからの受信(タイムアウトあり) 421 416 */ 422 417 #ifdef TOPPERS_trcv_mbx … … 468 463 469 464 /* 470 * [{bNXÌÄú»465 * メールボックスの再初期化 471 466 */ 472 467 #ifdef TOPPERS_ini_mbx … … 506 501 507 502 /* 508 * [{bNXÌóÔQÆ503 * メールボックスの状態参照 509 504 */ 510 505 #ifdef TOPPERS_ref_mbx -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/mailbox.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * [{bNX@\44 * メールボックス機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * [{bNXú»ubN53 * メールボックス初期化ブロック 58 54 * 59 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ60 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC61 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD55 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 56 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 57 * 最初のフィールドが共通になっている. 62 58 */ 63 59 typedef struct mailbox_initialization_block { 64 ATR mbxatr; /* [{bNX®«*/65 PRI maxmpri; /* bZ[WDæxÌÅål*/60 ATR mbxatr; /* メールボックス属性 */ 61 PRI maxmpri; /* メッセージ優先度の最大値 */ 66 62 } MBXINIB; 67 63 68 64 /* 69 * [{bNXÇubN65 * メールボックス管理ブロック 70 66 * 71 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj72 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ73 * tB[hª¤ÊÉÈÁÄ¢éD67 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 68 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 69 * フィールドが共通になっている. 74 70 * 75 * bZ[WL 76 [ªbZ[WÌDæxÌêÉÍCpk_lastÍgíÈ 77 * ¢DܽCbZ[WL 78 [ªóÌêipk_headªNULLÌêjÉàC 79 * pk_lastͳøÅ éD 71 * メッセージキューがメッセージの優先度順の場合には,pk_lastは使わな 72 * い.また,メッセージキューが空の場合(pk_headがNULLの場合)にも, 73 * pk_lastは無効である. 80 74 */ 81 75 typedef struct mailbox_control_block { 82 QUEUE wait_queue; /* [{bNXÒ¿L 83 [ */ 84 const MBXINIB *p_mbxinib; /* ú»ubNÖÌ|C^ */ 85 T_MSG *pk_head; /* æªÌbZ[W */ 86 T_MSG *pk_last; /* öÌbZ[W */ 76 QUEUE wait_queue; /* メールボックス待ちキュー */ 77 const MBXINIB *p_mbxinib; /* 初期化ブロックへのポインタ */ 78 T_MSG *pk_head; /* 先頭のメッセージ */ 79 T_MSG *pk_last; /* 末尾のメッセージ */ 87 80 } MBXCB; 88 81 89 82 /* 90 * [{bNXÒ¿îñubNÌè`83 * メールボックス待ち情報ブロックの定義 91 84 * 92 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ93 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC94 * ÅÌ2ÂÌtB[hª¤ÊÉÈÁÄ¢éD85 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 86 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 87 * 最初の2つのフィールドが共通になっている. 95 88 */ 96 89 typedef struct mailbox_waiting_information { 97 WINFO winfo; /* WÌÒ¿îñubN*/98 MBXCB *p_mbxcb; /* ÒÁÄ¢é[{bNXÌÇubN*/99 T_MSG *pk_msg; /* óMµ½bZ[W*/90 WINFO winfo; /* 標準の待ち情報ブロック */ 91 MBXCB *p_mbxcb; /* 待っているメールボックスの管理ブロック */ 92 T_MSG *pk_msg; /* 受信したメッセージ */ 100 93 } WINFO_MBX; 101 94 102 95 /* 103 * gpµÄ¢È¢[{bNXÇubNÌXg96 * 使用していないメールボックス管理ブロックのリスト 104 97 */ 105 98 extern QUEUE free_mbxcb; 106 99 107 100 /* 108 * [{bNXIDÌÅålikernel_cfg.cj101 * メールボックスIDの最大値(kernel_cfg.c) 109 102 */ 110 103 extern const ID tmax_mbxid; … … 112 105 113 106 /* 114 * [{bNXú»ubNÌGAikernel_cfg.cj107 * メールボックス初期化ブロックのエリア(kernel_cfg.c) 115 108 */ 116 109 extern const MBXINIB mbxinib_table[]; … … 118 111 119 112 /* 120 * [{bNXÇubNÌGAikernel_cfg.cj113 * メールボックス管理ブロックのエリア(kernel_cfg.c) 121 114 */ 122 115 extern MBXCB mbxcb_table[]; 123 116 124 117 /* 125 * [{bNXÇubN©ç[{bNXIDðæèo·½ßÌ}N118 * メールボックス管理ブロックからメールボックスIDを取り出すためのマクロ 126 119 */ 127 120 #define MBXID(p_mbxcb) ((ID)(((p_mbxcb) - mbxcb_table) + TMIN_MBXID)) 128 121 129 122 /* 130 * [{bNX@\Ìú»123 * メールボックス機能の初期化 131 124 */ 132 125 extern void initialize_mailbox(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/mempfix.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Åè·v[@\44 * 固定長メモリプール機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 59 55 */ 60 56 #ifndef LOG_ACRE_MPF_ENTER … … 123 119 124 120 /* 125 * Åè·v[Ì121 * 固定長メモリプールの数 126 122 */ 127 123 #define tnum_mpf ((uint_t)(tmax_mpfid - TMIN_MPFID + 1)) … … 129 125 130 126 /* 131 * Åè·v[ID©çÅè·v[ÇubNðæèo·½132 * ßÌ}N127 * 固定長メモリプールIDから固定長メモリプール管理ブロックを取り出すた 128 * めのマクロ 133 129 */ 134 130 #define INDEX_MPF(mpfid) ((uint_t)((mpfid) - TMIN_MPFID)) … … 136 132 137 133 /* 138 * ÁêÈCfbNXlÌè`139 */ 140 #define INDEX_NULL (~0U) /* ó«ubNXgÌÅã*/141 #define INDEX_ALLOC (~1U) /* ÄÏÝÌubN*/134 * 特殊なインデックス値の定義 135 */ 136 #define INDEX_NULL (~0U) /* 空きブロックリストの最後 */ 137 #define INDEX_ALLOC (~1U) /* 割当て済みのブロック */ 142 138 143 139 #ifdef TOPPERS_mpfini 144 140 145 141 /* 146 * gpµÄ¢È¢Åè·v[ÇubNÌXg142 * 使用していない固定長メモリプール管理ブロックのリスト 147 143 */ 148 144 QUEUE free_mpfcb; 149 145 150 146 /* 151 * Åè·v[@\Ìú»147 * 固定長メモリプール機能の初期化 152 148 */ 153 149 void … … 179 175 180 176 /* 181 * Åè·v[©çubNðl¾177 * 固定長メモリプールからブロックを獲得 182 178 */ 183 179 #ifdef TOPPERS_mpfget … … 205 201 206 202 /* 207 * Åè·v[̶¬203 * 固定長メモリプールの生成 208 204 */ 209 205 #ifdef TOPPERS_acre_mpf … … 284 280 285 281 /* 286 * Åè·v[Ìí282 * 固定長メモリプールの削除 287 283 */ 288 284 #ifdef TOPPERS_del_mpf … … 334 330 335 331 /* 336 * Åè·ubNÌl¾332 * 固定長メモリブロックの獲得 337 333 */ 338 334 #ifdef TOPPERS_get_mpf … … 377 373 378 374 /* 379 * Åè·ubNÌl¾i|[Oj375 * 固定長メモリブロックの獲得(ポーリング) 380 376 */ 381 377 #ifdef TOPPERS_pget_mpf … … 413 409 414 410 /* 415 * Åè·ubNÌl¾i^CAEg èj411 * 固定長メモリブロックの獲得(タイムアウトあり) 416 412 */ 417 413 #ifdef TOPPERS_tget_mpf … … 462 458 463 459 /* 464 * Åè·ubNÌÔp460 * 固定長メモリブロックの返却 465 461 */ 466 462 #ifdef TOPPERS_rel_mpf … … 519 515 520 516 /* 521 * Åè·v[ÌÄú»517 * 固定長メモリプールの再初期化 522 518 */ 523 519 #ifdef TOPPERS_ini_mpf … … 559 555 560 556 /* 561 * Åè·v[ÌóÔQÆ557 * 固定長メモリプールの状態参照 562 558 */ 563 559 #ifdef TOPPERS_ref_mpf -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/mempfix.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Åè·v[@\44 * 固定長メモリプール機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * Åè·ubNÇubN53 * 固定長メモリブロック管理ブロック 58 54 * 59 * next tB[hÉÍCubNªÄÏÝÌêÍINDEX_ALLOCðC60 * ¢ÄÌêÍÌ¢ÄubNÌCfbNXÔði[·éD61 * ÅãÌ¢ÄubNÌêÉÍCINDEX_NULLði[·éD55 * nextフィールドには,メモリブロックが割当て済みの場合はINDEX_ALLOCを, 56 * 未割当ての場合は次の未割当てブロックのインデックス番号を格納する. 57 * 最後の未割当てブロックの場合には,INDEX_NULLを格納する. 62 58 */ 63 59 typedef struct fixed_memoryblock_management_block { 64 uint_t next; /* Ì¢ÄubN*/60 uint_t next; /* 次の未割当てブロック */ 65 61 } MPFMB; 66 62 67 63 /* 68 * Åè·v[ú»ubN64 * 固定長メモリプール初期化ブロック 69 65 * 70 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ71 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC72 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD66 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 67 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 68 * 最初のフィールドが共通になっている. 73 69 */ 74 70 typedef struct fixed_memorypool_initialization_block { 75 ATR mpfatr; /* Åè·v[®«*/76 uint_t blkcnt; /* ubN*/77 uint_t blksz; /* ubNÌTCYiÛß½lj*/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; /* 固定長メモリプール管理領域の先頭番地 */ 80 76 } MPFINIB; 81 77 82 78 /* 83 * Åè·v[ÇubN79 * 固定長メモリプール管理ブロック 84 80 * 85 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj86 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ87 * tB[hª¤ÊÉÈÁÄ¢éD81 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 82 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 83 * フィールドが共通になっている. 88 84 */ 89 85 typedef struct fixed_memorypool_control_block { 90 QUEUE wait_queue; /* Åè·v[Ò¿L 91 [ */ 92 const MPFINIB *p_mpfinib; /* ú»ubNÖÌ|C^ */ 93 uint_t fblkcnt; /* ¢ÄubN */ 94 uint_t unused; /* ¢gpubNÌæª */ 95 uint_t freelist; /* ¢ÄubNÌXg */ 86 QUEUE wait_queue; /* 固定長メモリプール待ちキュー */ 87 const MPFINIB *p_mpfinib; /* 初期化ブロックへのポインタ */ 88 uint_t fblkcnt; /* 未割当てブロック数 */ 89 uint_t unused; /* 未使用ブロックの先頭 */ 90 uint_t freelist; /* 未割当てブロックのリスト */ 96 91 } MPFCB; 97 92 98 93 /* 99 * Åè·v[Ò¿îñubNÌè`94 * 固定長メモリプール待ち情報ブロックの定義 100 95 * 101 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ102 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC103 * ÅÌ2ÂÌtB[hª¤ÊÉÈÁÄ¢éD96 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 97 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 98 * 最初の2つのフィールドが共通になっている. 104 99 */ 105 100 typedef struct fixed_memorypool_waiting_information { 106 WINFO winfo; /* WÌÒ¿îñubN*/107 MPFCB *p_mpfcb; /* ÒÁÄ¢éÅè·v[ÌÇubN*/108 void *blk; /* l¾µ½ubN*/101 WINFO winfo; /* 標準の待ち情報ブロック */ 102 MPFCB *p_mpfcb; /* 待っている固定長メモリプールの管理ブロック*/ 103 void *blk; /* 獲得したメモリブロック */ 109 104 } WINFO_MPF; 110 105 111 106 /* 112 * gpµÄ¢È¢Åè·v[ÇubNÌXg107 * 使用していない固定長メモリプール管理ブロックのリスト 113 108 */ 114 109 extern QUEUE free_mpfcb; 115 110 116 111 /* 117 * Åè·v[IDÌÅålikernel_cfg.cj112 * 固定長メモリプールIDの最大値(kernel_cfg.c) 118 113 */ 119 114 extern const ID tmax_mpfid; … … 121 116 122 117 /* 123 * Åè·v[ú»ubNÌGAikernel_cfg.cj118 * 固定長メモリプール初期化ブロックのエリア(kernel_cfg.c) 124 119 */ 125 120 extern const MPFINIB mpfinib_table[]; … … 127 122 128 123 /* 129 * Åè·v[ÇubNÌGAikernel_cfg.cj124 * 固定長メモリプール管理ブロックのエリア(kernel_cfg.c) 130 125 */ 131 126 extern MPFCB mpfcb_table[]; 132 127 133 128 /* 134 * Åè·v[ÇubN©çÅè·v[IDðæèo·½135 * ßÌ}N129 * 固定長メモリプール管理ブロックから固定長メモリプールIDを取り出すた 130 * めのマクロ 136 131 */ 137 132 #define MPFID(p_mpfcb) ((ID)(((p_mpfcb) - mpfcb_table) + TMIN_MPFID)) 138 133 139 134 /* 140 * Åè·v[@\Ìú»135 * 固定長メモリプール機能の初期化 141 136 */ 142 137 extern void initialize_mempfix(void); 143 138 144 139 /* 145 * Åè·v[©çubNðl¾140 * 固定長メモリプールからブロックを獲得 146 141 */ 147 142 extern void get_mpf_block(MPFCB *p_mpfcb, void **p_blk); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/pridataq.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Dæxf[^L 49 [@\ 44 * 優先度データキュー機能 50 45 */ 51 46 … … 57 52 58 53 /* 59 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 60 55 */ 61 56 #ifndef LOG_ACRE_PDQ_ENTER … … 148 143 149 144 /* 150 * Dæxf[^L 151 [Ì 145 * 優先度データキューの数 152 146 */ 153 147 #define tnum_pdq ((uint_t)(tmax_pdqid - TMIN_PDQID + 1)) … … 155 149 156 150 /* 157 * Dæxf[^L 158 [ID©çDæxf[^L 159 [ÇubNðæèo·½ 160 * ßÌ}N 151 * 優先度データキューIDから優先度データキュー管理ブロックを取り出すた 152 * めのマクロ 161 153 */ 162 154 #define INDEX_PDQ(pdqid) ((uint_t)((pdqid) - TMIN_PDQID)) … … 166 158 167 159 /* 168 * gpµÄ¢È¢Dæxf[^L 169 [ÇubNÌXg 160 * 使用していない優先度データキュー管理ブロックのリスト 170 161 */ 171 162 QUEUE free_pdqcb; 172 163 173 164 /* 174 * Dæxf[^L 175 [@\Ìú» 165 * 優先度データキュー機能の初期化 176 166 */ 177 167 void … … 205 195 206 196 /* 207 * Dæxf[^L 208 [ÇÌæÖÌf[^Ìi[ 197 * 優先度データキュー管理領域へのデータの格納 209 198 */ 210 199 #ifdef TOPPERS_pdqenq … … 243 232 244 233 /* 245 * Dæxf[^L 246 [ÇÌæ©çÌf[^Ìæoµ 234 * 優先度データキュー管理領域からのデータの取出し 247 235 */ 248 236 #ifdef TOPPERS_pdqdeq … … 267 255 268 256 /* 269 * Dæxf[^L 270 [ÖÌf[^M 257 * 優先度データキューへのデータ送信 271 258 */ 272 259 #ifdef TOPPERS_pdqsnd … … 297 284 298 285 /* 299 * Dæxf[^L 300 [©çÌf[^óM 286 * 優先度データキューからのデータ受信 301 287 */ 302 288 #ifdef TOPPERS_pdqrcv … … 339 325 340 326 /* 341 * Dæxf[^L 342 [̶¬ 327 * 優先度データキューの生成 343 328 */ 344 329 #ifdef TOPPERS_acre_pdq … … 402 387 403 388 /* 404 * Dæxf[^L 405 [Ìí 389 * 優先度データキューの削除 406 390 */ 407 391 #ifdef TOPPERS_del_pdq … … 453 437 454 438 /* 455 * Dæxf[^L 456 [ÖÌM 439 * 優先度データキューへの送信 457 440 */ 458 441 #ifdef TOPPERS_snd_pdq … … 503 486 504 487 /* 505 * Dæxf[^L 506 [ÖÌMi|[Oj 488 * 優先度データキューへの送信(ポーリング) 507 489 */ 508 490 #ifdef TOPPERS_psnd_pdq … … 547 529 548 530 /* 549 * Dæxf[^L 550 [ÖÌMi|[OCñ^XNReLXgpj 531 * 優先度データキューへの送信(ポーリング,非タスクコンテキスト用) 551 532 */ 552 533 #ifdef TOPPERS_ipsnd_pdq … … 591 572 592 573 /* 593 * Dæxf[^L 594 [ÖÌMi^CAEg èj 574 * 優先度データキューへの送信(タイムアウトあり) 595 575 */ 596 576 #ifdef TOPPERS_tsnd_pdq … … 647 627 648 628 /* 649 * Dæxf[^L 650 [©çÌóM 629 * 優先度データキューからの受信 651 630 */ 652 631 #ifdef TOPPERS_rcv_pdq … … 698 677 699 678 /* 700 * Dæxf[^L 701 [©çÌóMi|[Oj 679 * 優先度データキューからの受信(ポーリング) 702 680 */ 703 681 #ifdef TOPPERS_prcv_pdq … … 738 716 739 717 /* 740 * Dæxf[^L 741 [©çÌóMi^CAEg èj 718 * 優先度データキューからの受信(タイムアウトあり) 742 719 */ 743 720 #ifdef TOPPERS_trcv_pdq … … 794 771 795 772 /* 796 * Dæxf[^L 797 [ÌÄú» 773 * 優先度データキューの再初期化 798 774 */ 799 775 #ifdef TOPPERS_ini_pdq … … 839 815 840 816 /* 841 * Dæxf[^L 842 [ÌóÔQÆ 817 * 優先度データキューの状態参照 843 818 */ 844 819 #ifdef TOPPERS_ref_pdq -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/pridataq.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Dæxf[^L 49 [@\ 44 * 優先度データキュー機能 50 45 */ 51 46 … … 56 51 57 52 /* 58 * Dæxf[^ÇubN53 * 優先度データ管理ブロック 59 54 */ 60 55 typedef struct pridata_management_block PDQMB; 61 56 62 57 struct 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; /* データ優先度 */ 66 61 }; 67 62 68 63 /* 69 * Dæxf[^L 70 [ú»ubN 64 * 優先度データキュー初期化ブロック 71 65 * 72 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ73 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC74 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD66 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 67 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 68 * 最初のフィールドが共通になっている. 75 69 */ 76 70 typedef struct pridataq_initialization_block { 77 ATR pdqatr; /* Dæxf[^L 78 [®« */ 79 uint_t pdqcnt; /* Dæxf[^L 80 [ÌeÊ */ 81 PRI maxdpri; /* f[^DæxÌÅål */ 82 PDQMB *p_pdqmb; /* Dæxf[^L 83 [ÇÌæÌæªÔn */ 71 ATR pdqatr; /* 優先度データキュー属性 */ 72 uint_t pdqcnt; /* 優先度データキューの容量 */ 73 PRI maxdpri; /* データ優先度の最大値 */ 74 PDQMB *p_pdqmb; /* 優先度データキュー管理領域の先頭番地 */ 84 75 } PDQINIB; 85 76 86 77 /* 87 * Dæxf[^L 88 [ÇubN 78 * 優先度データキュー管理ブロック 89 79 * 90 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj91 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ92 * tB[hª¤ÊÉÈÁÄ¢éD80 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 81 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 82 * フィールドが共通になっている. 93 83 */ 94 84 typedef struct pridataq_control_block { 95 QUEUE swait_queue; /* Dæxf[^L 96 [MÒ¿L 97 [ */ 98 const PDQINIB *p_pdqinib; /* ú»ubNÖÌ|C^ */ 99 QUEUE rwait_queue; /* Dæxf[^L 100 [óMÒ¿L 101 [ */ 102 uint_t count; /* Dæxf[^L 103 [Ìf[^Ì */ 104 PDQMB *p_head; /* ÅÌf[^ */ 105 uint_t unused; /* ¢gpf[^ÇubNÌæª */ 106 PDQMB *p_freelist; /* ¢Äf[^ÇubNÌXg */ 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; /* 未割当てデータ管理ブロックのリスト */ 107 92 } PDQCB; 108 93 109 94 /* 110 * Dæxf[^L 111 [Ò¿îñubNÌè` 95 * 優先度データキュー待ち情報ブロックの定義 112 96 * 113 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ 114 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC 115 * ÅÌ2ÂÌtB[hª¤ÊÉÈÁÄ¢éD 116 * Dæxf[^L 117 [ÖÌMÒ¿ÆDæxf[^L 118 [©çÌóMÒ¿ÅC 119 * ¯¶Ò¿îñubNðg¤D 97 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 98 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 99 * 最初の2つのフィールドが共通になっている. 100 * 優先度データキューへの送信待ちと優先度データキューからの受信待ちで, 101 * 同じ待ち情報ブロックを使う. 120 102 */ 121 103 typedef struct pridataq_waiting_information { 122 WINFO winfo; /* WÌÒ¿îñubN */ 123 PDQCB *p_pdqcb; /* ÒÁÄ¢éDæxf[^L 124 [ÌÇubN*/ 125 intptr_t data; /* óMf[^ */ 126 PRI datapri; /* f[^Dæx */ 104 WINFO winfo; /* 標準の待ち情報ブロック */ 105 PDQCB *p_pdqcb; /* 待っている優先度データキューの管理ブロック*/ 106 intptr_t data; /* 送受信データ */ 107 PRI datapri; /* データ優先度 */ 127 108 } WINFO_PDQ; 128 109 129 110 /* 130 * gpµÄ¢È¢Dæxf[^L 131 [ÇubNÌXg 111 * 使用していない優先度データキュー管理ブロックのリスト 132 112 */ 133 113 extern QUEUE free_pdqcb; 134 114 135 115 /* 136 * Dæxf[^L 137 [IDÌÅålikernel_cfg.cj 116 * 優先度データキューIDの最大値(kernel_cfg.c) 138 117 */ 139 118 extern const ID tmax_pdqid; … … 141 120 142 121 /* 143 * Dæxf[^L 144 [ú»ubNÌGAikernel_cfg.cj 122 * 優先度データキュー初期化ブロックのエリア(kernel_cfg.c) 145 123 */ 146 124 extern const PDQINIB pdqinib_table[]; … … 148 126 149 127 /* 150 * Dæxf[^L 151 [ÇubNÌGAikernel_cfg.cj 128 * 優先度データキュー管理ブロックのエリア(kernel_cfg.c) 152 129 */ 153 130 extern PDQCB pdqcb_table[]; 154 131 155 132 /* 156 * Dæxf[^L 157 [ÇubN©çDæxf[^L 158 [IDðæèo·½ 159 * ßÌ}N 133 * 優先度データキュー管理ブロックから優先度データキューIDを取り出すた 134 * めのマクロ 160 135 */ 161 136 #define PDQID(p_pdqcb) ((ID)(((p_pdqcb) - pdqcb_table) + TMIN_PDQID)) 162 137 163 138 /* 164 * Dæxf[^L 165 [@\Ìú» 139 * 優先度データキュー機能の初期化 166 140 */ 167 141 extern void initialize_pridataq(void); 168 142 169 143 /* 170 * Dæxf[^L 171 [ÇÌæÖÌf[^Ìi[ 144 * 優先度データキュー管理領域へのデータの格納 172 145 */ 173 146 extern void enqueue_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri); 174 147 175 148 /* 176 * Dæxf[^L 177 [ÇÌæ©çÌf[^Ìæoµ 149 * 優先度データキュー管理領域からのデータの取出し 178 150 */ 179 151 extern void dequeue_pridata(PDQCB *p_pdqcb, intptr_t *p_data, PRI *p_datapri); 180 152 181 153 /* 182 * Dæxf[^L 183 [ÖÌf[^M 154 * 優先度データキューへのデータ送信 184 155 */ 185 156 extern bool_t send_pridata(PDQCB *p_pdqcb, intptr_t data, … … 187 158 188 159 /* 189 * Dæxf[^L 190 [©çÌf[^óM 160 * 優先度データキューからのデータ受信 191 161 */ 192 162 extern bool_t receive_pridata(PDQCB *p_pdqcb, intptr_t *p_data, -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/semaphore.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Z}tH@\44 * セマフォ機能 49 45 */ 50 46 … … 56 52 57 53 /* 58 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 59 55 */ 60 56 #ifndef LOG_ACRE_SEM_ENTER … … 131 127 132 128 /* 133 * Z}tHÌ129 * セマフォの数 134 130 */ 135 131 #define tnum_sem ((uint_t)(tmax_semid - TMIN_SEMID + 1)) … … 137 133 138 134 /* 139 * Z}tHID©çZ}tHÇubNðæèo·½ßÌ}N135 * セマフォIDからセマフォ管理ブロックを取り出すためのマクロ 140 136 */ 141 137 #define INDEX_SEM(semid) ((uint_t)((semid) - TMIN_SEMID)) … … 145 141 146 142 /* 147 * gpµÄ¢È¢Z}tHÇubNÌXg143 * 使用していないセマフォ管理ブロックのリスト 148 144 */ 149 145 QUEUE free_semcb; 150 146 151 147 /* 152 * Z}tH@\Ìú»148 * セマフォ機能の初期化 153 149 */ 154 150 void … … 178 174 179 175 /* 180 * Z}tH̶¬176 * セマフォの生成 181 177 */ 182 178 #ifdef TOPPERS_acre_sem … … 220 216 221 217 /* 222 * Z}tHÌí218 * セマフォの削除 223 219 */ 224 220 #ifdef TOPPERS_del_sem … … 264 260 265 261 /* 266 * Z}tH¹ÌÔp262 * セマフォ資源の返却 267 263 */ 268 264 #ifdef TOPPERS_sig_sem … … 308 304 309 305 /* 310 * Z}tH¹ÌÔpiñ^XNReLXgpj306 * セマフォ資源の返却(非タスクコンテキスト用) 311 307 */ 312 308 #ifdef TOPPERS_isig_sem … … 352 348 353 349 /* 354 * Z}tH¹Ìl¾350 * セマフォ資源の獲得 355 351 */ 356 352 #ifdef TOPPERS_wai_sem … … 392 388 393 389 /* 394 * Z}tH¹Ìl¾i|[Oj390 * セマフォ資源の獲得(ポーリング) 395 391 */ 396 392 #ifdef TOPPERS_pol_sem … … 428 424 429 425 /* 430 * Z}tH¹Ìl¾i^CAEg èj426 * セマフォ資源の獲得(タイムアウトあり) 431 427 */ 432 428 #ifdef TOPPERS_twai_sem … … 474 470 475 471 /* 476 * Z}tHÌÄú»472 * セマフォの再初期化 477 473 */ 478 474 #ifdef TOPPERS_ini_sem … … 512 508 513 509 /* 514 * Z}tHÌóÔQÆ510 * セマフォの状態参照 515 511 */ 516 512 #ifdef TOPPERS_ref_sem -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/semaphore.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Z}tH@\44 * セマフォ機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * Z}tHú»ubN53 * セマフォ初期化ブロック 58 54 * 59 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌú»ubN̤ʪ60 * iWOBJINIBjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC61 * ÅÌtB[hª¤ÊÉÈÁÄ¢éD55 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 56 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 57 * 最初のフィールドが共通になっている. 62 58 */ 63 59 typedef struct semaphore_initialization_block { 64 ATR sematr; /* Z}tH®«*/65 uint_t isemcnt; /* Z}tH̹Ìúl*/66 uint_t maxsem; /* Z}tHÌÅå¹*/60 ATR sematr; /* セマフォ属性 */ 61 uint_t isemcnt; /* セマフォの資源数の初期値 */ 62 uint_t maxsem; /* セマフォの最大資源数 */ 67 63 } SEMINIB; 68 64 69 65 /* 70 * Z}tHÇubN66 * セマフォ管理ブロック 71 67 * 72 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÇubN̤ʪiWOBJCBj73 * ðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅCÅÌ2ÂÌ74 * tB[hª¤ÊÉÈÁÄ¢éD68 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 69 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 70 * フィールドが共通になっている. 75 71 */ 76 72 typedef struct semaphore_control_block { 77 QUEUE wait_queue; /* Z}tHÒ¿L 78 [ */ 79 const SEMINIB *p_seminib; /* ú»ubNÖÌ|C^ */ 80 uint_t semcnt; /* Z}tH»ÝJEgl */ 73 QUEUE wait_queue; /* セマフォ待ちキュー */ 74 const SEMINIB *p_seminib; /* 初期化ブロックへのポインタ */ 75 uint_t semcnt; /* セマフォ現在カウント値 */ 81 76 } SEMCB; 82 77 83 78 /* 84 * Z}tHÒ¿îñubNÌè`79 * セマフォ待ち情報ブロックの定義 85 80 * 86 * ±Ì\¢ÌÍC¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ87 * iWINFO_WOBJjðg£iIuWFNgwü¾êÌp³Éjµ½àÌÅC88 * ·×ÄÌtB[hª¤ÊÉÈÁÄ¢éD81 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 82 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 83 * すべてのフィールドが共通になっている. 89 84 */ 90 85 typedef struct semaphore_waiting_information { 91 WINFO winfo; /* WÌÒ¿îñubN*/92 SEMCB *p_semcb; /* ÒÁÄ¢éZ}tHÌÇubN*/86 WINFO winfo; /* 標準の待ち情報ブロック */ 87 SEMCB *p_semcb; /* 待っているセマフォの管理ブロック */ 93 88 } WINFO_SEM; 94 89 95 90 /* 96 * gpµÄ¢È¢Z}tHÇubNÌXg91 * 使用していないセマフォ管理ブロックのリスト 97 92 */ 98 93 extern QUEUE free_semcb; 99 94 100 95 /* 101 * Z}tHIDÌÅålikernel_cfg.cj96 * セマフォIDの最大値(kernel_cfg.c) 102 97 */ 103 98 extern const ID tmax_semid; … … 105 100 106 101 /* 107 * Z}tHú»ubNÌGAikernel_cfg.cj102 * セマフォ初期化ブロックのエリア(kernel_cfg.c) 108 103 */ 109 104 extern const SEMINIB seminib_table[]; … … 111 106 112 107 /* 113 * Z}tHÇubNÌGAikernel_cfg.cj108 * セマフォ管理ブロックのエリア(kernel_cfg.c) 114 109 */ 115 110 extern SEMCB semcb_table[]; 116 111 117 112 /* 118 * Z}tHÇubN©çZ}tHIDðæèo·½ßÌ}N113 * セマフォ管理ブロックからセマフォIDを取り出すためのマクロ 119 114 */ 120 115 #define SEMID(p_semcb) ((ID)(((p_semcb) - semcb_table) + TMIN_SEMID)) 121 116 122 117 /* 123 * Z}tH@\Ìú»118 * セマフォ機能の初期化 124 119 */ 125 120 extern void initialize_semaphore(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/startup.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * J[lÌú»ÆI¹44 * カーネルの初期化と終了処理 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_KER_ENTER … … 75 71 76 72 /* 77 * J[l®ìóÔtO73 * カーネル動作状態フラグ 78 74 * 79 * X^[gAbv[`ÅCfalsei0jÉú»³êé±ÆðúÒµÄ80 * ¢éD75 * スタートアップルーチンで,false(=0)に初期化されることを期待して 76 * いる. 81 77 */ 82 78 bool_t kerflg = false; 83 79 84 80 /* 85 * J[lÌN®81 * カーネルの起動 86 82 */ 87 83 void … … 89 85 { 90 86 /* 91 * ^[Qbg˶Ìú»87 * ターゲット依存の初期化 92 88 */ 93 89 target_initialize(); 94 90 95 91 /* 96 * eW 97 [Ìú» 92 * 各モジュールの初期化 98 93 * 99 * ^CCxgÇW 100 [ͼÌW 101 [æèæÉú» 102 * ·éKvª éD 94 * タイムイベント管理モジュールは他のモジュールより先に初期化 95 * する必要がある. 103 96 */ 104 97 initialize_kmm(); … … 107 100 108 101 /* 109 * ú»[`ÌÀs102 * 初期化ルーチンの実行 110 103 */ 111 104 call_inirtn(); 112 105 113 106 /* 114 * J[l®ìÌJn107 * カーネル動作の開始 115 108 */ 116 109 kerflg = true; … … 123 116 124 117 /* 125 * J[lÌI¹118 * カーネルの終了 126 119 */ 127 120 #ifdef TOPPERS_ext_ker … … 135 128 136 129 /* 137 * ÝbNóÔÉÚs130 * 割込みロック状態に移行 138 131 */ 139 132 SIL_LOC_INT(); 140 133 141 134 /* 142 * J[l®ìÌI¹135 * カーネル動作の終了 143 136 */ 144 137 LOG_KER_LEAVE(); … … 146 139 147 140 /* 148 * J[lÌI¹ÌÄoµ141 * カーネルの終了処理の呼出し 149 142 * 150 * ñ^XNReLXgÉØè·¦ÄCexit_kernelðÄÑo·D143 * 非タスクコンテキストに切り換えて,exit_kernelを呼び出す. 151 144 */ 152 145 call_exit_kernel(); 153 146 154 147 /* 155 * RpCÌxÎôi±±Öé±ÆÍȢ͸j148 * コンパイラの警告対策(ここへ来ることはないはず) 156 149 */ 157 150 SIL_UNL_INT(); … … 161 154 162 155 /* 163 * J[lÌI¹156 * カーネルの終了処理 164 157 */ 165 158 void … … 167 160 { 168 161 /* 169 * I¹[`ÌÀs162 * 終了処理ルーチンの実行 170 163 */ 171 164 call_terrtn(); 172 165 173 166 /* 174 * ^[Qbg˶ÌI¹167 * ターゲット依存の終了処理 175 168 */ 176 169 target_exit(); … … 181 174 182 175 /* 183 * J[lÌèt¯éÌæÌÇ176 * カーネルの割り付けるメモリ領域の管理 184 177 * 185 * Ìæð檩çÉèÄCðú³ê½ÌæðÄpµÈ 186 * ¢ÇW 187 [D 178 * メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しな 179 * いメモリ管理モジュール. 188 180 */ 189 181 #ifdef TOPPERS_kermem -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/sys_manage.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * VXeóÔÇ@\44 * システム状態管理機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_ROT_RDQ_ENTER … … 177 173 178 174 /* 179 * ^XNÌDæÊÌñ]175 * タスクの優先順位の回転 180 176 */ 181 177 #ifdef TOPPERS_rot_rdq … … 207 203 208 204 /* 209 * ^XNÌDæÊÌñ]iñ^XNReLXgpj205 * タスクの優先順位の回転(非タスクコンテキスト用) 210 206 */ 211 207 #ifdef TOPPERS_irot_rdq … … 235 231 236 232 /* 237 * ÀsóÔÌ^XNIDÌQÆ233 * 実行状態のタスクIDの参照 238 234 */ 239 235 #ifdef TOPPERS_get_tid … … 260 256 261 257 /* 262 * ÀsóÔÌ^XNIDÌQÆiñ^XNReLXgpj258 * 実行状態のタスクIDの参照(非タスクコンテキスト用) 263 259 */ 264 260 #ifdef TOPPERS_iget_tid … … 285 281 286 282 /* 287 * CPU bNóÔÖÌÚs283 * CPUロック状態への移行 288 284 */ 289 285 #ifdef TOPPERS_loc_cpu … … 310 306 311 307 /* 312 * CPU bNóÔÖÌÚsiñ^XNReLXgpj308 * CPUロック状態への移行(非タスクコンテキスト用) 313 309 */ 314 310 #ifdef TOPPERS_iloc_cpu … … 335 331 336 332 /* 337 * CPU bNóÔÌð333 * CPUロック状態の解除 338 334 * 339 * CPU bNÍCfBXpb`ªKvÆÈéT[rXR[ðÄÑo·±340 * ÆÍÅ«È¢½ßCCPUbNóÔÌðÉfBXpb`ðN®·é341 * KvÍÈ¢D335 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ 336 * とはできないため,CPUロック状態の解除時にディスパッチャを起動する 337 * 必要はない. 342 338 */ 343 339 #ifdef TOPPERS_unl_cpu … … 364 360 365 361 /* 366 * CPU bNóÔÌðiñ^XNReLXgpj362 * CPUロック状態の解除(非タスクコンテキスト用) 367 363 * 368 * CPU bNÍCfBXpb`ªKvÆÈéT[rXR[ðÄÑo·±369 * ÆÍÅ«È¢½ßCCPUbNóÔÌðÉfBXpb`ÌN®ðv370 * ·éKvÍÈ¢D364 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ 365 * とはできないため,CPUロック状態の解除時にディスパッチャの起動を要 366 * 求する必要はない. 371 367 */ 372 368 #ifdef TOPPERS_iunl_cpu … … 393 389 394 390 /* 395 * fBXpb`ÌÖ~391 * ディスパッチの禁止 396 392 */ 397 393 #ifdef TOPPERS_dis_dsp … … 419 415 420 416 /* 421 * fBXpb`ÌÂ417 * ディスパッチの許可 422 418 */ 423 419 #ifdef TOPPERS_ena_dsp … … 450 446 451 447 /* 452 * ReLXgÌQÆ448 * コンテキストの参照 453 449 */ 454 450 #ifdef TOPPERS_sns_ctx … … 468 464 469 465 /* 470 * CPU bNóÔÌQÆ466 * CPUロック状態の参照 471 467 */ 472 468 #ifdef TOPPERS_sns_loc … … 486 482 487 483 /* 488 * fBXpb`Ö~óÔÌQÆ484 * ディスパッチ禁止状態の参照 489 485 */ 490 486 #ifdef TOPPERS_sns_dsp … … 504 500 505 501 /* 506 * fBXpb`Û¯óÔÌQÆ502 * ディスパッチ保留状態の参照 507 503 */ 508 504 #ifdef TOPPERS_sns_dpn … … 522 518 523 519 /* 524 * J[lñ®ìóÔÌQÆ520 * カーネル非動作状態の参照 525 521 */ 526 522 #ifdef TOPPERS_sns_ker -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^XNÇW 49 [ 44 * タスク管理モジュール 50 45 */ 51 46 … … 55 50 56 51 /* 57 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 58 53 */ 59 54 #ifndef LOG_TEX_ENTER … … 68 63 69 64 /* 70 * ÀsóÔÌ^XN65 * 実行状態のタスク 71 66 */ 72 67 TCB *p_runtsk; 73 68 74 69 /* 75 * ÅDæÊÌ^XN70 * 最高優先順位のタスク 76 71 */ 77 72 TCB *p_schedtsk; 78 73 79 74 /* 80 * ^XNfBXpb`^^XNáO[`N®vtO75 * タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ 81 76 */ 82 77 bool_t reqflg; 83 78 84 79 /* 85 * ÝDæx}XNSðóÔ80 * 割込み優先度マスク全解除状態 86 81 */ 87 82 bool_t ipmflg; 88 83 89 84 /* 90 * fBXpb`Ö~óÔ85 * ディスパッチ禁止状態 91 86 */ 92 87 bool_t disdsp; 93 88 94 89 /* 95 * ^XNfBXpb`Â\óÔ90 * タスクディスパッチ可能状態 96 91 */ 97 92 bool_t dspflg; 98 93 99 94 /* 100 * fBL 101 [ 95 * レディキュー 102 96 */ 103 97 QUEUE ready_queue[TNUM_TPRI]; 104 98 105 99 /* 106 * fBL 107 [T[`̽ßÌrbg}bv 100 * レディキューサーチのためのビットマップ 108 101 */ 109 102 uint16_t ready_primap; 110 103 111 104 /* 112 * gpµÄ¢È¢TCBÌXg105 * 使用していないTCBのリスト 113 106 */ 114 107 QUEUE free_tcb; 115 108 116 109 /* 117 * ^XNÇW 118 [Ìú» 110 * タスク管理モジュールの初期化 119 111 */ 120 112 void … … 160 152 161 153 /* 162 * rbg}bvT[`Ö163 * 164 * bitmap àÌ1ÌrbgÌàCÅàºÊiEjÌàÌðT[`µC»Ìrb165 * gÔðÔ·DrbgÔÍCźÊrbgð0Æ·éDbitmapÉ0ðwè166 * µÄÍÈçÈ¢D±ÌÖÅÍCbitmapª16rbgÅ é±Æð¼èµC167 * uint16_t ^ƵĢéD168 * 169 * rbgT[`½ßðÂvZbTÅÍCrbgT[`½ßðg¤æ¤É170 * «¼µ½ûªø¦ªÇ¢êª éD±Ìæ¤ÈêÉÍC^[Qbg171 * ˶ÅrbgT[`½ßðgÁ½bitmap_searchðè`µC172 * OMIT_BITMAP_SEARCH ð}Nè`·êÎæ¢DܽCrbgT[`½ßÌ173 * T[`ûüªtÈÇÌRÅDæxÆrbgÆÌÎðÏXµ½¢êÉ174 * ÍCPRIMAP_BITð}Nè`·êÎæ¢D175 * 176 * ܽCCuÉffsª éÈçCÌæ¤Éè`µÄCuÖð177 * gÁ½ûªø¦ªÇ¢Â\«à éD154 * ビットマップサーチ関数 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 * 使った方が効率が良い可能性もある. 178 170 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 179 171 */ … … 207 199 208 200 /* 209 * Dæxrbg}bvªó©Ì`FbN201 * 優先度ビットマップが空かのチェック 210 202 */ 211 203 Inline bool_t … … 216 208 217 209 /* 218 * Dæxrbg}bvÌT[`210 * 優先度ビットマップのサーチ 219 211 */ 220 212 Inline uint_t … … 225 217 226 218 /* 227 * Dæxrbg}bvÌZbg219 * 優先度ビットマップのセット 228 220 */ 229 221 Inline void … … 234 226 235 227 /* 236 * Dæxrbg}bvÌNA228 * 優先度ビットマップのクリア 237 229 */ 238 230 Inline void … … 243 235 244 236 /* 245 * ÅDæÊ^XNÌT[`237 * 最高優先順位タスクのサーチ 246 238 */ 247 239 #ifdef TOPPERS_tsksched … … 259 251 260 252 /* 261 * ÀsÅ«éóÔÖÌJÚ262 * 263 * ÅDæÊÌ^XNðXV·éÌÍCÀsÅ«é^XNªÈ©Á½ê264 * ÆCp_tcbÌDæxªÅDæÊÌ^XNÌDæxæèà¢êÅ265 * éD253 * 実行できる状態への遷移 254 * 255 * 最高優先順位のタスクを更新するのは,実行できるタスクがなかった場合 256 * と,p_tcbの優先度が最高優先順位のタスクの優先度よりも高い場合であ 257 * る. 266 258 */ 267 259 #ifdef TOPPERS_tskrun … … 285 277 286 278 /* 287 * ÀsÅ«éóÔ©ç¼ÌóÔÖÌJÚ 288 * 289 * ÅDæÊÌ^XNðXV·éÌÍCp_tcbªÅDæÊÌ^XNÅ 290 * Á½êÅ éDp_tcbƯ¶DæxÌ^XNª¼É éêÍCp_tcb 291 * ÌÌ^XNªÅDæÊÉÈéD»¤ÅÈ¢êÍCfBL 292 [ð 293 * T[`·éKvª éD 279 * 実行できる状態から他の状態への遷移 280 * 281 * 最高優先順位のタスクを更新するのは,p_tcbが最高優先順位のタスクで 282 * あった場合である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcb 283 * の次のタスクが最高優先順位になる.そうでない場合は,レディキューを 284 * サーチする必要がある. 294 285 */ 295 286 #ifdef TOPPERS_tsknrun … … 321 312 322 313 /* 323 * x~óÔÖÌJÚ314 * 休止状態への遷移 324 315 */ 325 316 #ifdef TOPPERS_tskdmt … … 339 330 340 331 /* 341 * x~óÔ©çÀsÅ«éóÔÖÌJÚ332 * 休止状態から実行できる状態への遷移 342 333 */ 343 334 #ifdef TOPPERS_tskact … … 355 346 356 347 /* 357 * ^XNÌDæxÌÏX 358 * 359 * ^XNªÀsÅ«éóÔÌêÉÍCfBL 360 [ÌÅÌÊuðÏX· 361 * éDIuWFNgÌÒ¿L 362 [ÌÅÒ¿óÔÉÈÁÄ¢éêÉÍCÒ 363 * ¿L 364 [ÌÅÌÊuðÏX·éD 365 * 366 * ÅDæÊÌ^XNðXV·éÌÍC(1) p_tcbªÅDæÊÌ^X 367 * NÅ ÁÄC»ÌDæx𺰽êC(2) p_tcbªÅDæÊÌ^X 368 * NÅÍÈCÏXãÌDæxªÅDæÊÌ^XNÌDæxæèࢠ369 * êÅ éD(1)ÌêÉÍCfBL 370 [ðT[`·éKvª éD 348 * タスクの優先度の変更 349 * 350 * タスクが実行できる状態の場合には,レディキューの中での位置を変更す 351 * る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待 352 * ちキューの中での位置を変更する. 353 * 354 * 最高優先順位のタスクを更新するのは,(1) p_tcbが最高優先順位のタス 355 * クであって,その優先度を下げた場合,(2) p_tcbが最高優先順位のタス 356 * クではなく,変更後の優先度が最高優先順位のタスクの優先度よりも高い 357 * 場合である.(1)の場合には,レディキューをサーチする必要がある. 371 358 */ 372 359 #ifdef TOPPERS_tskpri … … 382 369 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 383 370 /* 384 * ^XNªÀsÅ«éóÔÌê371 * タスクが実行できる状態の場合 385 372 */ 386 373 queue_delete(&(p_tcb->task_queue)); … … 407 394 if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) { 408 395 /* 409 * ^XNªC¯úEÊMIuWFNgÌÇubNÌ¤Ê 410 * ªiWOBJCBjÌÒ¿L 411 [ÉÂȪêÄ¢éê 396 * タスクが,同期・通信オブジェクトの管理ブロックの共通部 397 * 分(WOBJCB)の待ちキューにつながれている場合 412 398 */ 413 399 wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb, … … 421 407 422 408 /* 423 * fBL 424 [Ìñ] 425 * 426 * ÅDæÊÌ^XNðXV·éÌÍCÅDæÊÌ^XNª^XNL 427 * 428 [ÌöÉÚ®µ½êÅ éD 409 * レディキューの回転 410 * 411 * 最高優先順位のタスクを更新するのは,最高優先順位のタスクがタスクキ 412 * ューの末尾に移動した場合である. 429 413 */ 430 414 #ifdef TOPPERS_tskrot … … 450 434 451 435 /* 452 * ^XNáO[`ÌÄoµ453 * 454 * ASP J[lÅÍC^XNáO[`àÅCPUbNóÔÉJÚµC455 * ³ÌóÔÉß³¸É^[µ½êCJ[lª³ÌóÔÉß·D436 * タスク例外処理ルーチンの呼出し 437 * 438 * ASPカーネルでは,タスク例外処理ルーチン内でCPUロック状態に遷移し, 439 * 元の状態に戻さずにリターンした場合,カーネルが元の状態に戻す. 456 440 */ 457 441 #ifdef TOPPERS_tsktex … … 486 470 if (p_runtsk != p_schedtsk && dspflg) { 487 471 /* 488 * ±±ÅdispatchðÄÑo·ÍCÝÄAÄoµÉÈÁÄ489 * ¢éªCdispatchðÄÔOÉp_runtsk->enatexðfalseɵÄ490 * ¨¯ÎxáªÈ¢D»ÌRÉ¢ÄÍCuTOPPERS/ASP J[491 * l ÝvvðQÆ̱ÆD472 * ここでdispatchを呼び出す処理は,相互再帰呼出しになって 473 * いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして 474 * おけば支障がない.その理由については,「TOPPERS/ASP カー 475 * ネル 設計メモ」を参照のこと. 492 476 */ 493 477 dispatch(); … … 498 482 499 483 /* 500 * ^XNáO[`ÌN®484 * タスク例外処理ルーチンの起動 501 485 */ 502 486 #ifndef OMIT_CALLTEX -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^XNÇW 49 [ 44 * タスク管理モジュール 50 45 */ 51 46 … … 57 52 58 53 /* 59 * g[XO}NÌftHgè`54 * トレースログマクロのデフォルト定義 60 55 */ 61 56 #ifndef LOG_TSKSTAT … … 64 59 65 60 /* 66 * ^XNDæxÌà\»EO\»Ï·}N61 * タスク優先度の内部表現・外部表現変換マクロ 67 62 */ 68 63 #define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI)) … … 70 65 71 66 /* 72 * ^XNóÔÌà\» 73 * 74 * TCBÌ^XNóÔÅÍCÀsóÔiRUNNINGjÆÀsÂ\óÔiREADYj 75 * ÍæʵȢD¼óÔð̵ÄCÀsÅ«éóÔiRUNNABLEjÆÄÔ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æxf[^L 89 [©çÌóMÒ¿ */ 90 #define TS_WAIT_SEM (0x04U << 3) /* Z}tH¹Ìl¾Ò¿ */ 91 #define TS_WAIT_FLG (0x05U << 3) /* CxgtOÒ¿ */ 92 #define TS_WAIT_SDTQ (0x06U << 3) /* f[^L 93 [ÖÌMÒ¿ */ 94 #define TS_WAIT_SPDQ (0x07U << 3) /* Dæxf[^L 95 [ÖÌMÒ¿ */ 96 #define TS_WAIT_MBX (0x08U << 3) /* [{bNX©çÌóMÒ¿ */ 97 #define TS_WAIT_MPF (0x09U << 3) /* Åè·ubNÌl¾Ò¿ */ 98 99 /* 100 * ^XNóÔ»Ê}N 101 * 102 * TSTAT_DORMANTÍ^XNªx~óÔÅ é©Ç¤©ðCTSTAT_RUNNABLEÍ 103 * ^XNªÀ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 * 強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する. 106 97 */ 107 98 #define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT) … … 111 102 112 103 /* 113 * ^XNÒ¿vö»Ê}N 114 * 115 * TSTAT_WAIT_SLPÍ^XNªN°Ò¿Å é©Ç¤©ðCTSTAT_WAIT_WOBJ 116 * Í^XNª¯úEÊMIuWFNgÉηéÒ¿Å é©i¾¢·¦éÆC 117 * ¯úÊMIuWFNgÌÒ¿L 118 [ÉÂȪêÄ¢é©jǤ©ð»Ê· 119 * éDܽCTSTAT_WAIT_WOBJCBÍ^XNª¯úEÊMIuWFNgÌÇ 120 * ubN̤ʪiWOBJCBjÌÒ¿L 121 [ÉÂȪêÄ¢é©Ç¤©ð 122 * »Ê·éD 123 * 124 * TSTAT_WAIT_SLPÍCCÓÌ^XNóÔÌ©çC^XNª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^XNªÔoßÒ¿óÔÅ é 129 * ±Æð»Ê·é½ßÌTSTAT_WAIT_DLYðCTSTAT_WAIT_SLPƯlÌû@Å 130 * À»·é±ÆÍÅ«È¢D 131 */ 132 #define TS_WAIT_MASK (0x0fU << 3) /* Ò¿vöÌæoµ}XN */ 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) /* 待ち要因の取出しマスク */ 133 122 134 123 #define TSTAT_WAIT_SLP(tstat) (((tstat) & TS_WAIT_MASK) == TS_WAIT_SLP) … … 137 126 138 127 /* 139 * Ò¿îñubNiWINFOjÌè` 140 * 141 * ^XNªÒ¿óÔÌÔÍCTCB¨æÑ»Ìp_winfoÅw³êéWINFOðÌ 142 * æ¤ÉÝèµÈ¯êÎÈçÈ¢D 143 * 144 * (a) TCBÌ^XNóÔðÒ¿óÔiTS_WAITINGjÉ·éD»ÌÛÉCÒ¿ 145 * vöiTS_WAIT_???jàÝè·éD 146 * 147 * (b) ^CAEgðÄ·é½ßÉC^CCxgubNðo^·éD 148 * o^·é^CCxgubNÍCÒ¿ÉüéT[rXR[Ö 149 * Ì[JÏƵÄmÛµC»êÖÌ|C^ðWINFOÌp_tmevtbÉL 150 * ¯·éD^CAEgÌĪKvÈ¢êiivÒ¿ÌêjÉÍC 151 * p_tmevtbðNULLÉ·éD 152 * 153 * ¯úEÊMIuWFNgÉηéÒ¿óÔÌêÉÍCWÌWINFOÉ 154 * p_wobjcbtB[hðÇÁµ½\¢ÌiWINFO_WOBJCwait.hÅè`jðg 155 * ¤DܽCȺÌ(c)`(e)ÌÝèðs¤Kvª éD¯úEÊMIuWF 156 * NgÉÖWµÈ¢Ò¿iN°Ò¿CÔoßÒ¿jÌêÉÍC(c)`(e) 157 * ÍKvÈ¢D 158 * 159 * (c) TCBðÒ¿ÎÛ̯úEÊMIuWFNgÌÒ¿L 160 [ÉÂÈ®DÒ 161 * ¿L 162 [ÉÂÈ®½ßÉCtask_queueðg¤D 163 * 164 * (d) Ò¿ÎÛ̯úEÊMIuWFNgÌÇubNÖÌ|C^ðC 165 * WINFO_WOBJÌp_wobjcbÉL¯·éD 166 * 167 * (e) Ò¿ÎÛ̯úEÊMIuWFNgÉ˶µÄL¯·é±ÆªKvÈ 168 * îñª éêÉÍCWINFO_WOBJÉKvÈîñ̽ßÌtB[hðÇÁ 169 * µ½\¢Ìðè`µCWINFO_WOBJÌãíèÉp¢éD 170 * 171 * Ò¿óÔðð·éÛÉÍCÒ¿ðµ½^XNÉηéÔlðWINFOÌ 172 * wercdÉÝè·éDwercdªKvÈÌÍÒ¿ðÈ~Å éÌÉεÄC 173 * p_tmevtbÍÒ¿ðãÍKvÈ¢½ßCßñ̽ßɤpÌðgÁ 174 * Ä¢éD»Ì½ßCwercdÖG[R[hðÝè·éÌÍC^CCxg 175 * ubNð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 * ブロックを登録解除した後にしなければならない. 176 163 */ 177 164 typedef union waiting_information { 178 ER wercd; /* Ò¿ðÌG[R[h*/179 TMEVTB *p_tmevtb; /* Ò¿óÔpÌ^CCxgubN*/165 ER wercd; /* 待ち解除時のエラーコード */ 166 TMEVTB *p_tmevtb; /* 待ち状態用のタイムイベントブロック */ 180 167 } WINFO; 181 168 182 169 /* 183 * ^XNú»ubN184 * 185 * ^XNÉÖ·éîñðClªÏíçÈ¢½ßÉROMÉu¯éªi^XN186 * ú»ubNjÆClªÏ»·é½ßÉRAMÉu©È¯êÎÈçÈ¢187 * ªi^XNÇubNCTCBjɪ£µCTCBàÉηé^XNú»188 * ubNðw·|C^ðüêéD^XNú»ubNàÉηé189 * TCB ðw·|C^ðüêéû@ÌûªCRAMÌßñÌÏ_©çÍ]ܵ¢190 * ªCÀsø¦ª«Èé½ßÉÌpµÄ¢È¢D¼ÌIuWFNgÉ¢191 * Äà¯lɵ¤D192 * 193 * ^XNú»ubNÉÍCDEF_TEXÅè`³êé^XNáO[`194 * ÉÖ·éîñàÜÞD170 * タスク初期化ブロック 171 * 172 * タスクに関する情報を,値が変わらないためにROMに置ける部分(タスク 173 * 初期化ブロック)と,値が変化するためにRAMに置かなければならない部 174 * 分(タスク管理ブロック,TCB)に分離し,TCB内に対応するタスク初期化 175 * ブロックを指すポインタを入れる.タスク初期化ブロック内に対応する 176 * TCBを指すポインタを入れる方法の方が,RAMの節約の観点からは望ましい 177 * が,実行効率が悪くなるために採用していない.他のオブジェクトについ 178 * ても同様に扱う. 179 * 180 * タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ 181 * ンに関する情報も含む. 195 182 */ 196 183 typedef struct task_initialization_block { 197 ATR tskatr; /* ^XN®«*/198 intptr_t exinf; /* ^XNÌg£îñ*/199 TASK task; /* ^XNÌN®Ôn*/200 uint_t ipriority; /* ^XNÌN®Dæxià\»j*/184 ATR tskatr; /* タスク属性 */ 185 intptr_t exinf; /* タスクの拡張情報 */ 186 TASK task; /* タスクの起動番地 */ 187 uint_t ipriority; /* タスクの起動時優先度(内部表現) */ 201 188 202 189 #ifdef USE_TSKINICTXB 203 TSKINICTXB tskinictxb; /* ^XNú»ReLXgubN*/190 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */ 204 191 #else /* USE_TSKINICTXB */ 205 SIZE stksz; /* X^bNÌæÌTCYiÛß½lj*/206 void *stk; /* X^bNÌæÌæªÔn*/192 SIZE stksz; /* スタック領域のサイズ(丸めた値) */ 193 void *stk; /* スタック領域の先頭番地 */ 207 194 #endif /* USE_TSKINICTXB */ 208 195 209 ATR texatr; /* ^XNáO[`®«*/210 TEXRTN texrtn; /* ^XNáO[`ÌN®Ôn*/196 ATR texatr; /* タスク例外処理ルーチン属性 */ 197 TEXRTN texrtn; /* タスク例外処理ルーチンの起動番地 */ 211 198 } TINIB; 212 199 213 200 /* 214 * TCB ÌtB[hÌrbgÌè`215 * 216 * vZbTÉæÁÄÍCTCBÌtB[hÌrbgÅgpÊÆ217 * «\ªg[hItÉÈé½ßC^[Qbg˶ÉtB[hÌrbg218 * ðÏX·é±ÆðµÄ¢éD201 * TCB中のフィールドのビット幅の定義 202 * 203 * プロセッサによっては,TCB中のフィールドのビット幅でメモリ使用量と 204 * 性能がトレードオフになるため,ターゲット依存にフィールドのビット幅 205 * を変更することを許している. 219 206 */ 220 207 #ifndef TBIT_TCB_PRIORITY 221 #define TBIT_TCB_PRIORITY 8 /* priority tB[hÌrbg*/208 #define TBIT_TCB_PRIORITY 8 /* priorityフィールドのビット幅 */ 222 209 #endif /* TBIT_TCB_PRIORITY */ 223 210 224 211 /* 225 * ^XNÇubNiTCBj 226 * 227 * ASPJ[lÅÍC^XNÌN®vL 228 [COÌÅåliTMAX_ACTCNTj 229 * ÆN°vL 230 [COÌÅåliTMAX_WUPCNTjÍ1ÉÅè³êÄ¢é 231 * ½ßCL 232 [CO³êÄ¢é©Ç¤©Ì^UlÅ\»·é±ÆªÅ«éD 233 * ܽC§Ò¿vlXgÌÅåliTMAX_SUSCNTjª1ÉÅè³êÄ¢ 234 * éÌÅC§Ò¿vlXgisuscntjÍKvÈ¢D 235 * 236 * TCB̢©ÌtB[hÍCÁèÌ^XNóÔÅÌÝLøÈlðÛµC 237 * »êÈOÌêÍlªÛسêÈ¢iæÁÄCQƵÄÍÈçÈ¢jDe 238 * tB[hªLøÈlðÛ·éðÍÌÊèD 239 * 240 * Eú»ãÍíÉLøF 241 * p_tinibCtstatCactque 242 * Ex~óÔÈOÅLøix~óÔÅÍúlÉÈÁÄ¢éjF 243 * priorityCwupqueCenatexCtexptn 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 * ・待ち状態(二重待ち状態を含む)で有効: 245 229 * p_winfo 246 * EÀsÅ«éóÔƯúEÊMIuWFNgÉηéÒ¿óÔÅLøF230 * ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効: 247 231 * task_queue 248 * EÀsÂ\óÔCÒ¿óÔC§Ò¿óÔCñdÒ¿óÔÅLøF232 * ・実行可能状態,待ち状態,強制待ち状態,二重待ち状態で有効: 249 233 * tskctxb 250 234 */ 251 235 typedef struct task_control_block { 252 QUEUE task_queue; /* ^XNL 253 [ */ 254 const TINIB *p_tinib; /* ú»ubNÖÌ|C^ */ 236 QUEUE task_queue; /* タスクキュー */ 237 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */ 255 238 256 239 #ifdef UINT8_MAX 257 uint8_t tstat; /* ^XNóÔià\»j*/240 uint8_t tstat; /* タスク状態(内部表現)*/ 258 241 #else /* UINT8_MAX */ 259 BIT_FIELD_UINT tstat : 8; /* ^XNóÔià\»j*/242 BIT_FIELD_UINT tstat : 8; /* タスク状態(内部表現)*/ 260 243 #endif /* UINT8_MAX */ 261 244 #if defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) 262 uint8_t priority; /* »ÝÌDæxià\»j*/245 uint8_t priority; /* 現在の優先度(内部表現)*/ 263 246 #else /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */ 264 247 BIT_FIELD_UINT priority : TBIT_TCB_PRIORITY; 265 /* »ÝÌDæxià\»j*/248 /* 現在の優先度(内部表現)*/ 266 249 #endif /* defined(UINT8_MAX) && (TBIT_TCB_PRIORITY == 8) */ 267 BIT_FIELD_BOOL actque : 1; /* N®vL 268 [CO */ 269 BIT_FIELD_BOOL wupque : 1; /* N°vL 270 [CO */ 271 BIT_FIELD_BOOL enatex : 1; /* ^XNáOÂóÔ */ 272 273 TEXPTN texptn; /* Û¯áOvö */ 274 WINFO *p_winfo; /* Ò¿îñubNÖÌ|C^ */ 275 TSKCTXB tskctxb; /* ^XNReLXgubN */ 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; /* タスクコンテキストブロック */ 276 257 } TCB; 277 258 278 259 /* 279 * ÀsóÔÌ^XN280 * 281 * ÀsóÔÌ^XNivZbTªReLXgðÁÄ¢é^XNjÌ282 * TCB ðw·|C^DÀsóÔÌ^XNªÈ¢êÍNULLÉ·éD283 * 284 * T[rXR[ÌÅC©^XNiT[rXR[ðÄÑoµ½^X285 * NjÉÖ·éîñðQÆ·éêÍp_runtskðg¤Dp_runtskð«·¦286 * éÌÍCfBXpb`iÆú»jÌÝÅ éD260 * 実行状態のタスク 261 * 262 * 実行状態のタスク(=プロセッサがコンテキストを持っているタスク)の 263 * TCBを指すポインタ.実行状態のタスクがない場合はNULLにする. 264 * 265 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス 266 * ク)に関する情報を参照する場合はp_runtskを使う.p_runtskを書き換え 267 * るのは,ディスパッチャ(と初期化処理)のみである. 287 268 */ 288 269 extern TCB *p_runtsk; 289 270 290 271 /* 291 * ÅDæÊÌ^XN292 * 293 * ÀsÅ«é^XNÌÅÅDæÊÌ^XNÌTCBðw·|C^DÀ294 * sÅ«é^XNªÈ¢êÍNULLÉ·éD295 * 296 * fBXpb`Ö~óÔÈÇCfBXpb`ªÛ¯³êÄ¢éÔÍp_runtsk297 * ÆêvµÄ¢éÆÍÀçÈ¢D272 * 最高優先順位のタスク 273 * 274 * 実行できるタスクの中で最高優先順位のタスクのTCBを指すポインタ.実 275 * 行できるタスクがない場合はNULLにする. 276 * 277 * ディスパッチ禁止状態など,ディスパッチが保留されている間はp_runtsk 278 * と一致しているとは限らない. 298 279 */ 299 280 extern TCB *p_schedtsk; 300 281 301 282 /* 302 * fBXpb`^^XNáO[`N®vtO303 * 304 * Ýnh^CPUáOnhÌoûÉCfBXpb`ܽÍ305 * ^XNáO[`ÌN®ðv·é±Æð¦·tOD283 * ディスパッチ/タスク例外処理ルーチン起動要求フラグ 284 * 285 * 割込みハンドラ/CPU例外ハンドラの出口処理に,ディスパッチまたは 286 * タスク例外処理ルーチンの起動を要求することを示すフラグ. 306 287 */ 307 288 extern bool_t reqflg; 308 289 309 290 /* 310 * ÝDæx}XNSðóÔ311 * 312 * ÝDæx}XNSðóÔÅ é±Æð¦·tOD291 * 割込み優先度マスク全解除状態 292 * 293 * 割込み優先度マスク全解除状態であることを示すフラグ. 313 294 */ 314 295 extern bool_t ipmflg; 315 296 316 297 /* 317 * fBXpb`Ö~óÔ318 * 319 * fBXpb`Ö~óÔÅ é±Æð¦·tOD298 * ディスパッチ禁止状態 299 * 300 * ディスパッチ禁止状態であることを示すフラグ. 320 301 */ 321 302 extern bool_t disdsp; 322 303 323 304 /* 324 * ^XNfBXpb`Â\óÔ325 * 326 * ÝDæx}XNSðóÔÅ èCfBXpb`ÂóÔÅ éifB327 * Xpb`Ö~óÔÅÈ¢j±Æð¦·tOD305 * タスクディスパッチ可能状態 306 * 307 * 割込み優先度マスク全解除状態であり,ディスパッチ許可状態である(ディ 308 * スパッチ禁止状態でない)ことを示すフラグ. 328 309 */ 329 310 extern bool_t dspflg; 330 311 331 312 /* 332 * fBL 333 [ 334 * 335 * fBL 336 [ÍCÀsÅ«éóÔÌ^XNðÇ·é½ßÌL 337 [Å éD 338 * ÀsóÔÌ^XNàǵĢé½ßCfBiÀsÂ\jL 339 [Æ¢¤ 340 * ¼ÌͳmÅÍÈ¢ªCfBL 341 [Æ¢¤¼Ìªè 342 µÄ¢é½ßC± 343 * ̼ÌÅÄÔ±ÆÉ·éD 344 * 345 * fBL 346 [ÍCDæx²ÆÌ^XNL 347 [Å\¬³êÄ¢éD^XNÌ 348 * TCBÍCY·éDæxÌL 349 [Éo^³êéD 313 * レディキュー 314 * 315 * レディキューは,実行できる状態のタスクを管理するためのキューである. 316 * 実行状態のタスクも管理しているため,レディ(実行可能)キューという 317 * 名称は正確ではないが,レディキューという名称が定着しているため,こ 318 * の名称で呼ぶことにする. 319 * 320 * レディキューは,優先度ごとのタスクキューで構成されている.タスクの 321 * TCBは,該当する優先度のキューに登録される. 350 322 */ 351 323 extern QUEUE ready_queue[TNUM_TPRI]; 352 324 353 325 /* 354 * fBL 355 [T[`̽ßÌrbg}bv 356 * 357 * fBL 358 [ÌT[`ðø¦æs¤½ßÉCDæx²ÆÌ^XNL 359 [ 360 * É^XNªüÁÄ¢é©Ç¤©ð¦·rbg}bvðpӵĢéDrb 361 * g}bvðg¤±ÆÅCANZXÌñð¸ç·±ÆªÅ«éªC 362 * rbgì½ßª[ÀµÄ¢È¢vZbTÅCDæxÌiKªÈ¢ 363 * êÉÍCrbg}bvìÌI[o[wbh̽ßÉCtÉø¦ª¿ 364 * éÂ\«à éD 365 * 366 * Dæxª16iKÅ é±Æð¼èµÄ¢é½ßCuint16_t^ƵĢéD 326 * レディキューサーチのためのビットマップ 327 * 328 * レディキューのサーチを効率よく行うために,優先度ごとのタスクキュー 329 * にタスクが入っているかどうかを示すビットマップを用意している.ビッ 330 * トマップを使うことで,メモリアクセスの回数を減らすことができるが, 331 * ビット操作命令が充実していないプロセッサで,優先度の段階数が少ない 332 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち 333 * る可能性もある. 334 * 335 * 優先度が16段階であることを仮定しているため,uint16_t型としている. 367 336 */ 368 337 extern uint16_t ready_primap; 369 338 370 339 /* 371 * gpµÄ¢È¢TCBÌXg340 * 使用していないTCBのリスト 372 341 */ 373 342 extern QUEUE free_tcb; 374 343 375 344 /* 376 * ^XNIDÌÅålikernel_cfg.cj345 * タスクIDの最大値(kernel_cfg.c) 377 346 */ 378 347 extern const ID tmax_tskid; … … 380 349 381 350 /* 382 * ^XNú»ubNÌGAikernel_cfg.cj351 * タスク初期化ブロックのエリア(kernel_cfg.c) 383 352 */ 384 353 extern const TINIB tinib_table[]; … … 386 355 387 356 /* 388 * ^XN¶¬e[uikernel_cfg.cj357 * タスク生成順序テーブル(kernel_cfg.c) 389 358 */ 390 359 extern const ID torder_table[]; 391 360 392 361 /* 393 * TCB ÌGAikernel_cfg.cj362 * TCBのエリア(kernel_cfg.c) 394 363 */ 395 364 extern TCB tcb_table[]; 396 365 397 366 /* 398 * ^XNÌ367 * タスクの数 399 368 */ 400 369 #define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1)) … … 402 371 403 372 /* 404 * ^XNID©çTCBðæèo·½ßÌ}N373 * タスクIDからTCBを取り出すためのマクロ 405 374 */ 406 375 #define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID)) … … 409 378 410 379 /* 411 * TCB ©ç^XNIDðæèo·½ßÌ}N380 * TCBからタスクIDを取り出すためのマクロ 412 381 */ 413 382 #define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID)) 414 383 415 384 /* 416 * ^XNÇW 417 [Ìú» 385 * タスク管理モジュールの初期化 418 386 */ 419 387 extern void initialize_task(void); 420 388 421 389 /* 422 * ÅDæÊ^XNÌT[` 423 * 424 * fBL 425 [ÌÅDæÊÌ^XNðT[`µC»ÌTCBÖÌ|C^ 426 * ðÔ·DfBL 427 [ªóÌêÉÍC±ÌÖðÄÑoµÄÍÈçÈ¢D 390 * 最高優先順位タスクのサーチ 391 * 392 * レディキュー中の最高優先順位のタスクをサーチし,そのTCBへのポインタ 393 * を返す.レディキューが空の場合には,この関数を呼び出してはならない. 428 394 */ 429 395 extern TCB *search_schedtsk(void); 430 396 431 397 /* 432 * ÀsÅ«éóÔÖÌJÚ 433 * 434 * p_tcbÅwè³êé^XNðfBL 435 [É}ü·éDfBL 436 [É}ü 437 * µ½^XNÌDæxªCÅDæÊÌ^XNÌDæxæèà¢êÍC 438 * ÅDæÊÌ^XNðXVµCfBXpb`ÂóÔÅ êÎtrueðÔ 439 * ·D»¤ÅÈ¢êÍfalseðÔ·D 398 * 実行できる状態への遷移 399 * 400 * p_tcbで指定されるタスクをレディキューに挿入する.レディキューに挿入 401 * したタスクの優先度が,最高優先順位のタスクの優先度よりも高い場合は, 402 * 最高優先順位のタスクを更新し,ディスパッチ許可状態であればtrueを返 403 * す.そうでない場合はfalseを返す. 440 404 */ 441 405 extern bool_t make_runnable(TCB *p_tcb); 442 406 443 407 /* 444 * ÀsÅ«éóÔ©ç¼ÌóÔÖÌJÚ 445 * 446 * p_tcbÅwè³êé^XNðfBL 447 [©çí·éDp_tcbÅwèµ½ 448 * ^XNªÅDæÊÌ^XNÅ Á½êÉÍCÅDæÊÌ^XN 449 * ðÝèµÈ¨µCfBXpb`ÂóÔÅ êÎtrueðÔ·D»¤ÅÈ¢ 450 * êÍfalseðÔ·D^XNÌóÔÍXVµÈ¢D 408 * 実行できる状態から他の状態への遷移 409 * 410 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した 411 * タスクが最高優先順位のタスクであった場合には,最高優先順位のタスク 412 * を設定しなおし,ディスパッチ許可状態であればtrueを返す.そうでない 413 * 場合はfalseを返す.タスクの状態は更新しない. 451 414 */ 452 415 extern bool_t make_non_runnable(TCB *p_tcb); 453 416 454 417 /* 455 * x~óÔÖÌJÚ456 * 457 * p_tcb Åwè³êé^XNÌóÔðx~óÔÆ·éDܽC^XNÌN®458 * Éú»·×«ÏÌú»ÆC^XNN®Ì½ßÌReLXgðÝ459 * è·éD418 * 休止状態への遷移 419 * 420 * p_tcbで指定されるタスクの状態を休止状態とする.また,タスクの起動 421 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設 422 * 定する. 460 423 */ 461 424 extern void make_dormant(TCB *p_tcb); 462 425 463 426 /* 464 * x~óÔ©çÀsÅ«éóÔÖÌJÚ465 * 466 * p_tcb Åwè³êé^XNÌóÔðx~óÔ©çÀsÅ«éóÔÆ·éD467 * ÀsÅ«éóÔÉJÚµ½^XNÖÌfBXpb`ªKvÈêÍtrueC468 * »¤ÅÈ¢êÍfalseðÔ·D427 * 休止状態から実行できる状態への遷移 428 * 429 * p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする. 430 * 実行できる状態に遷移したタスクへのディスパッチが必要な場合はtrue, 431 * そうでない場合はfalseを返す. 469 432 */ 470 433 extern bool_t make_active(TCB *p_tcb); 471 434 472 435 /* 473 * ^XNÌDæxÌÏX474 * 475 * p_tcb Åwè³êé^XNÌDæxðnewpriià\»jÉÏX·éDܽC476 * KvÈêÉÍÅDæÊÌ^XNðXVµCfBXpb`ÂóÔÅ477 * êÎtrueðÔ·D»¤ÅÈ¢êÍfalseðÔ·D436 * タスクの優先度の変更 437 * 438 * p_tcbで指定されるタスクの優先度をnewpri(内部表現)に変更する.また, 439 * 必要な場合には最高優先順位のタスクを更新し,ディスパッチ許可状態で 440 * あればtrueを返す.そうでない場合はfalseを返す. 478 441 */ 479 442 extern bool_t change_priority(TCB *p_tcb, uint_t newpri); 480 443 481 444 /* 482 * fBL 483 [Ìñ] 484 * 485 * fBL 486 [ÌCpriÅwè³êéDæxÌ^XNL 487 [ðñ]³¹éD 488 * ܽCKvÈêÉÍÅDæÊÌ^XNðÏXµCfBXpb`ªÛ 489 * ¯³êĢȯêÎtrueðÔ·D»¤ÅÈ¢êÍfalseðÔ·D 445 * レディキューの回転 446 * 447 * レディキュー中の,priで指定される優先度のタスクキューを回転させる. 448 * また,必要な場合には最高優先順位のタスクを変更し,ディスパッチが保 449 * 留されていなければtrueを返す.そうでない場合はfalseを返す. 490 450 */ 491 451 extern bool_t rotate_ready_queue(uint_t pri); 492 452 493 453 /* 494 * ^XNáO[`ÌÄoµ495 * 496 * ^XNáO[`ðÄÑo·DÄÑo·OÉCÀsóÔÌ^XNÌ497 * Û¯áOvöðNAµC^XNáOÖ~óÔɵCCPUbNðð498 * ·éD499 * 500 * ^XNáO[`©çßéÆCܸCPUbNóÔÉßµC»ÌÔ501 * ÉÛ¯áOvöª0ÅÈÈÁÄ¢êÎCÄÑ^XNáO[`ð502 * ÄÑo·DÛ¯áOvöª0ÌêÉÍCáOÂóÔɵÄÖ©503 * ç^[·éD504 * 505 * ±ÌÖÍCÀsóÔÌ^XNªC^XNáOÂóÔienatexª506 * true jÅCÛ¯áOvöª0ÅÈ¢itexptnª0ÅÈ¢jêÉÄÑo·±507 * ÆðzèµÄ¢éD±ÌÖÍCCPUbNóÔÅÄÑo³È¯êÎÈç508 * È¢D454 * タスク例外処理ルーチンの呼出し 455 * 456 * タスク例外処理ルーチンを呼び出す.呼び出す前に,実行状態のタスクの 457 * 保留例外要因をクリアし,タスク例外処理禁止状態にし,CPUロックを解 458 * 除する. 459 * 460 * タスク例外処理ルーチンから戻ると,まずCPUロック状態に戻し,その間 461 * に保留例外要因が0でなくなっていれば,再びタスク例外処理ルーチンを 462 * 呼び出す.保留例外要因が0の場合には,例外処理許可状態にして関数か 463 * らリターンする. 464 * 465 * この関数は,実行状態のタスクが,タスク例外処理許可状態(enatexが 466 * true)で,保留例外要因が0でない(texptnが0でない)場合に呼び出すこ 467 * とを想定している.この関数は,CPUロック状態で呼び出さなければなら 468 * ない. 509 469 */ 510 470 extern void call_texrtn(void); 511 471 512 472 /* 513 * ^XNáO[`ÌN®514 * 515 * ÀsóÔÌ^XNª^XNáO[`ÌN®ðð½µÄ¢êÎC516 * ^XNáO[`ðÄÑo·DCPUáO[`ðÄÑo·517 * ÍCêIÉCPUbNðð·éD518 * 519 * ±ÌÖÍCfBXpb`âÝnh^CPUáOnhÌoû520 * ©çÄÑo³êé±ÆðzèµÄ¢éD±ÌÖÍCCPUbNóÔ521 * ÅÄÑo³È¯êÎÈçÈ¢D522 * 523 * Àsø¦ðã°é½ßÉC±ÌÖð^[Qbg˶ÅLqµÄàæ¢D524 * »ÌêÉÍCOMIT_CALLTEXð}Nè`·éD473 * タスク例外処理ルーチンの起動 474 * 475 * 実行状態のタスクがタスク例外処理ルーチンの起動条件を満たしていれば, 476 * タスク例外処理ルーチンを呼び出す.CPU例外処理ルーチンを呼び出す時 477 * は,一時的にCPUロックを解除する. 478 * 479 * この関数は,ディスパッチャや割込みハンドラ/CPU例外ハンドラの出口 480 * 処理から呼び出されることを想定している.この関数は,CPUロック状態 481 * で呼び出さなければならない. 482 * 483 * 実行効率を上げるために,この関数をターゲット依存部で記述してもよい. 484 * その場合には,OMIT_CALLTEXをマクロ定義する. 525 485 */ 526 486 extern void calltex(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task_except.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^XNáO@\44 * タスク例外処理機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_DEF_TEX_ENTER … … 113 109 114 110 /* 115 * ^XNáO[`Ìè`111 * タスク例外処理ルーチンの定義 116 112 */ 117 113 #ifdef TOPPERS_def_tex … … 175 171 176 172 /* 177 * ^XNáOÌv173 * タスク例外処理の要求 178 174 */ 179 175 #ifdef TOPPERS_ras_tex … … 215 211 216 212 /* 217 * ^XNáOÌviñ^XNReLXgpj213 * タスク例外処理の要求(非タスクコンテキスト用) 218 214 */ 219 215 #ifdef TOPPERS_iras_tex … … 255 251 256 252 /* 257 * ^XNáOÌÖ~253 * タスク例外処理の禁止 258 254 */ 259 255 #ifdef TOPPERS_dis_tex … … 285 281 286 282 /* 287 * ^XNáOÌÂ283 * タスク例外処理の許可 288 284 */ 289 285 #ifdef TOPPERS_ena_tex … … 318 314 319 315 /* 320 * ^XNáOÖ~óÔÌQÆ316 * タスク例外処理禁止状態の参照 321 317 */ 322 318 #ifdef TOPPERS_sns_tex … … 336 332 337 333 /* 338 * ^XNáOÌóÔQÆ334 * タスク例外処理の状態参照 339 335 */ 340 336 #ifdef TOPPERS_ref_tex -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task_manage.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * ^XNÇ@\44 * タスク管理機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * g[XO}NÌftHgè`53 * トレースログマクロのデフォルト定義 58 54 */ 59 55 #ifndef LOG_ACRE_TSK_ENTER … … 138 134 139 135 /* 140 * ^XN̶¬136 * タスクの生成 141 137 */ 142 138 #ifdef TOPPERS_acre_tsk 143 139 144 140 #ifndef TARGET_MIN_STKSZ 145 #define TARGET_MIN_STKSZ 1U /* ¢è`ÌêÍ0ÅÈ¢±Æð`FbN*/141 #define TARGET_MIN_STKSZ 1U /* 未定義の場合は0でないことをチェック */ 146 142 #endif /* TARGET_MIN_STKSZ */ 147 143 … … 215 211 216 212 /* 217 * ^XNÌí213 * タスクの削除 218 214 */ 219 215 #ifdef TOPPERS_del_tsk … … 261 257 262 258 /* 263 * ^XNÌN®259 * タスクの起動 264 260 */ 265 261 #ifdef TOPPERS_act_tsk … … 303 299 304 300 /* 305 * ^XNÌN®iñ^XNReLXgpj301 * タスクの起動(非タスクコンテキスト用) 306 302 */ 307 303 #ifdef TOPPERS_iact_tsk … … 345 341 346 342 /* 347 * ^XNN®vÌLZ343 * タスク起動要求のキャンセル 348 344 */ 349 345 #ifdef TOPPERS_can_act … … 378 374 379 375 /* 380 * ©^XNÌI¹376 * 自タスクの終了 381 377 */ 382 378 #ifdef TOPPERS_ext_tsk … … 392 388 if (t_sense_lock()) { 393 389 /* 394 * CPU bNóÔÅext_tskªÄÎê½êÍCCPUbNððµ395 * Ä©ç^XNðI¹·éDÀãÍCT[rXR[àÅÌCPU396 * bNðȪ·êÎ梾¯D390 * CPUロック状態でext_tskが呼ばれた場合は,CPUロックを解除し 391 * てからタスクを終了する.実装上は,サービスコール内でのCPU 392 * ロックを省略すればよいだけ. 397 393 */ 398 394 } … … 402 398 if (disdsp) { 403 399 /* 404 * fBXpb`Ö~óÔÅext_tskªÄÎê½êÍCfBXpb405 * `ÂóÔɵĩç^XNðI¹·éD400 * ディスパッチ禁止状態でext_tskが呼ばれた場合は,ディスパッ 401 * チ許可状態にしてからタスクを終了する. 406 402 */ 407 403 disdsp = false; … … 409 405 if (!ipmflg) { 410 406 /* 411 * ÝDæx}XNiIPMjªTIPM_ENAALLÈOÌóÔÅext_tsk412 * ªÄÎê½êÍCIPMðTIPM_ENAALLɵĩç^XNðI¹·413 * éD407 * 割込み優先度マスク(IPM)がTIPM_ENAALL以外の状態でext_tsk 408 * が呼ばれた場合は,IPMをTIPM_ENAALLにしてからタスクを終了す 409 * る. 414 410 */ 415 411 t_set_ipm(TIPM_ENAALL); … … 435 431 436 432 /* 437 * ^XŅI¹433 * タスクの強制終了 438 434 */ 439 435 #ifdef TOPPERS_ter_tsk … … 461 457 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 462 458 /* 463 * p_tcb Í©^XNÅÈ¢½ßCiVOvZbTÅÍjÀ464 * sóÔÅÈCmake_non_runnable(p_tcb)Å^XNfBXpb465 * `ªKvÉÈé±ÆÍÈ¢D459 * p_tcbは自タスクでないため,(シングルプロセッサでは)実 460 * 行状態でなく,make_non_runnable(p_tcb)でタスクディスパッ 461 * チが必要になることはない. 466 462 */ 467 463 (void) make_non_runnable(p_tcb); … … 490 486 491 487 /* 492 * ^XNÌx[XDæxÌÏX488 * タスクのベース優先度の変更 493 489 */ 494 490 #ifdef TOPPERS_chg_pri … … 532 528 533 529 /* 534 * ^XNDæxÌQÆ530 * タスク優先度の参照 535 531 */ 536 532 #ifdef TOPPERS_get_pri … … 568 564 569 565 /* 570 * ©^XNÌg£îñÌQÆ566 * 自タスクの拡張情報の参照 571 567 */ 572 568 #ifdef TOPPERS_get_inf -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task_refer.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 10 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 11 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 12 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 13 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 14 * XR[hÉÜÜêÄ¢é±ÆD 15 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 16 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 17 gip 18 * Ò}j 19 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 20 * ̳ÛØKèðfÚ·é±ÆD 21 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 22 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 23 * ÆD 24 * (a) Äzzɺ¤hL 25 gipÒ}j 26 AÈÇjÉCãLÌ 27 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 28 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 29 * ñ·é±ÆD 30 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 31 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 32 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 33 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 34 * ÆÓ·é±ÆD 35 * 36 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 37 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 38 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 41 37 * 42 38 * @(#) $Id$ … … 44 40 45 41 /* 46 * ^XNÌóÔQÆ@\42 * タスクの状態参照機能 47 43 */ 48 44 … … 60 56 61 57 /* 62 * g[XO}NÌftHgè`58 * トレースログマクロのデフォルト定義 63 59 */ 64 60 #ifndef LOG_REF_TSK_ENTER … … 71 67 72 68 /* 73 * ^XNÌóÔQÆ69 * タスクの状態参照 74 70 */ 75 71 #ifdef TOPPERS_ref_tsk … … 95 91 if (TSTAT_DORMANT(tstat)) { 96 92 /* 97 * ÎÛ^XNªx~óÔÌê93 * 対象タスクが休止状態の場合 98 94 */ 99 95 pk_rtsk->tskstat = TTS_DMT; … … 101 97 else { 102 98 /* 103 * ^XNóÔÌæoµ99 * タスク状態の取出し 104 100 */ 105 101 if (TSTAT_SUSPENDED(tstat)) { … … 122 118 123 119 /* 124 * »ÝDæxÆx[XDæxÌæoµ120 * 現在優先度とベース優先度の取出し 125 121 */ 126 122 pk_rtsk->tskpri = EXT_TSKPRI(p_tcb->priority); … … 129 125 if (TSTAT_WAITING(tstat)) { 130 126 /* 131 * Ò¿vöÆÒ¿ÎÛÌIuWFNgÌIDÌæoµ127 * 待ち要因と待ち対象のオブジェクトのIDの取出し 132 128 */ 133 129 switch (tstat & TS_WAIT_MASK) { … … 181 177 182 178 /* 183 * ^CAEg·éÜÅÌÔÌæoµ179 * タイムアウトするまでの時間の取出し 184 180 */ 185 181 if (p_tcb->p_winfo->p_tmevtb != NULL) { … … 193 189 194 190 /* 195 * N°vL 196 [COÌæoµ 191 * 起床要求キューイング数の取出し 197 192 */ 198 193 pk_rtsk->wupcnt = p_tcb->wupque ? 1U : 0U; … … 200 195 201 196 /* 202 * N®vL 203 [COÌæoµ 197 * 起動要求キューイング数の取出し 204 198 */ 205 199 pk_rtsk->actcnt = p_tcb->actque ? 1U : 0U; -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/task_sync.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * ^XNt®¯ú@\44 * タスク付属同期機能 49 45 */ 50 46 … … 55 51 56 52 /* 57 * g[XO}NÌftHgè`53 * トレースログマクロのデフォルト定義 58 54 */ 59 55 #ifndef LOG_SLP_TSK_ENTER … … 138 134 139 135 /* 140 * N°Ò¿136 * 起床待ち 141 137 */ 142 138 #ifdef TOPPERS_slp_tsk … … 173 169 174 170 /* 175 * N°Ò¿i^CAEg èj171 * 起床待ち(タイムアウトあり) 176 172 */ 177 173 #ifdef TOPPERS_tslp_tsk … … 213 209 214 210 /* 215 * ^XNÌN°211 * タスクの起床 216 212 */ 217 213 #ifdef TOPPERS_wup_tsk … … 258 254 259 255 /* 260 * ^XNÌN°iñ^XNReLXgpj256 * タスクの起床(非タスクコンテキスト用) 261 257 */ 262 258 #ifdef TOPPERS_iwup_tsk … … 303 299 304 300 /* 305 * ^XNN°vÌLZ301 * タスク起床要求のキャンセル 306 302 */ 307 303 #ifdef TOPPERS_can_wup … … 339 335 340 336 /* 341 * Ò¿óÔ̧ð337 * 待ち状態の強制解除 342 338 */ 343 339 #ifdef TOPPERS_rel_wai … … 377 373 378 374 /* 379 * Ò¿óÔ̧ðiñ^XNReLXgpj375 * 待ち状態の強制解除(非タスクコンテキスト用) 380 376 */ 381 377 #ifdef TOPPERS_irel_wai … … 415 411 416 412 /* 417 * §Ò¿óÔÖÌÚs413 * 強制待ち状態への移行 418 414 */ 419 415 #ifdef TOPPERS_sus_tsk … … 442 438 else if (TSTAT_RUNNABLE(p_tcb->tstat)) { 443 439 /* 444 * ÀsÅ«éóÔ©ç§Ò¿óÔÖÌJÚ440 * 実行できる状態から強制待ち状態への遷移 445 441 */ 446 442 p_tcb->tstat = TS_SUSPENDED; … … 456 452 else { 457 453 /* 458 * Ò¿óÔ©çñdÒ¿óÔÖÌJÚ454 * 待ち状態から二重待ち状態への遷移 459 455 */ 460 456 p_tcb->tstat |= TS_SUSPENDED; … … 472 468 473 469 /* 474 * §Ò¿óÔ©çÌÄJ470 * 強制待ち状態からの再開 475 471 */ 476 472 #ifdef TOPPERS_rsm_tsk … … 496 492 else if (!TSTAT_WAITING(p_tcb->tstat)) { 497 493 /* 498 * §Ò¿óÔ©çÀsÅ«éóÔÖÌJÚ494 * 強制待ち状態から実行できる状態への遷移 499 495 */ 500 496 p_tcb->tstat = TS_RUNNABLE; … … 507 503 else { 508 504 /* 509 * ñdÒ¿óÔ©çÒ¿óÔÖÌJÚ505 * 二重待ち状態から待ち状態への遷移 510 506 */ 511 507 p_tcb->tstat &= ~TS_SUSPENDED; … … 523 519 524 520 /* 525 * ©^XNÌx521 * 自タスクの遅延 526 522 */ 527 523 #ifdef TOPPERS_dly_tsk -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/time_event.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^CCxgÇW 49 [ 44 * タイムイベント管理モジュール 50 45 */ 51 46 … … 54 49 55 50 /* 56 * ^CCxgq[vì}N57 */ 58 #define PARENT(index) ((index) >> 1) /* em[hðßé*/59 #define LCHILD(index) ((index) << 1) /* ¶Ìqm[hðßé*/51 * タイムイベントヒープ操作マクロ 52 */ 53 #define PARENT(index) ((index) >> 1) /* 親ノードを求める */ 54 #define LCHILD(index) ((index) << 1) /* 左の子ノードを求める */ 60 55 #define TMEVT_NODE(index) (tmevt_heap[(index) - 1]) 61 56 62 57 /* 63 * Cxg¶är}N64 * 65 * Cxg¶ÍCmin_time©çÌÎlÅär·éD·Èí¿C66 * min_time ðŬliÅàߢjCmit_time-1ªÅåliÅà¢j67 * ÆÝȵÄär·éD58 * イベント発生時刻比較マクロ 59 * 60 * イベント発生時刻は,min_timeからの相対値で比較する.すなわち, 61 * min_timeを最小値(最も近い時刻),mit_time-1が最大値(最も遠い時刻) 62 * とみなして比較する. 68 63 */ 69 64 #define EVTTIM_LT(t1, t2) (((t1) - min_time) < ((t2) - min_time)) … … 73 68 74 69 /* 75 * »ÝÌVXeiPÊ: 1~bj76 * 77 * µ§ÉÍCOÌ^CeBbNÌVXeD70 * 現在のシステム時刻(単位: 1ミリ秒) 71 * 72 * 厳密には,前のタイムティックのシステム時刻. 78 73 */ 79 74 EVTTIM current_time; 80 75 81 76 /* 82 * ^CCxgq[vÅLøÈŬÌVXeiPÊ: 1~bj77 * タイムイベントヒープ中で有効な最小のシステム時刻(単位: 1ミリ秒) 83 78 */ 84 79 EVTTIM min_time; 85 80 86 81 /* 87 * Ì^CeBbNÌVXeiPÊ: 1~bj82 * 次のタイムティックのシステム時刻(単位: 1ミリ秒) 88 83 */ 89 84 EVTTIM next_time; 90 85 91 86 /* 92 * VXeÏZpÏiPÊ: 1/TIC_DENO~bj87 * システム時刻積算用変数(単位: 1/TIC_DENOミリ秒) 93 88 */ 94 89 #if TIC_DENO != 1U … … 97 92 98 93 /* 99 * ^CCxgq[vÌÅãÌgpÌæÌCfbNX94 * タイムイベントヒープの最後の使用領域のインデックス 100 95 */ 101 96 uint_t last_index; 102 97 103 98 /* 104 * ^C}W 105 [Ìú» 99 * タイマモジュールの初期化 106 100 */ 107 101 void … … 120 114 121 115 /* 122 * ^CCxgÌ}üÊuðãü«ÉTõ123 * 124 * timeɶ·é^CCxgð}ü·ém[hðó¯é½ßÉC125 * q[vÌãÉü©ÁÄóm[hðÚ®³¹éDÚ®OÌóm[hÌÊuð126 * index Én·ÆCÚ®ãÌóm[hÌÊui·Èí¿}üÊujðÔ·D116 * タイムイベントの挿入位置を上向きに探索 117 * 118 * 時刻timeに発生するタイムイベントを挿入するノードを空けるために, 119 * ヒープの上に向かって空ノードを移動させる.移動前の空ノードの位置を 120 * indexに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す. 127 121 */ 128 122 #ifdef TOPPERS_tmeup … … 135 129 while (index > 1) { 136 130 /* 137 * em[hÌCxg¶Ìûª¢iܽͯ¶jÈçÎC138 * index ª}üÊuÈÌÅ[vð²¯éD131 * 親ノードのイベント発生時刻の方が早い(または同じ)ならば, 132 * indexが挿入位置なのでループを抜ける. 139 133 */ 140 134 parent = PARENT(index); … … 144 138 145 139 /* 146 * em[hðindexÌÊuÉÚ®³¹éD140 * 親ノードをindexの位置に移動させる. 147 141 */ 148 142 TMEVT_NODE(index) = TMEVT_NODE(parent); … … 150 144 151 145 /* 152 * index ðem[hÌÊuÉXVD146 * indexを親ノードの位置に更新. 153 147 */ 154 148 index = parent; … … 160 154 161 155 /* 162 * ^CCxgÌ}üÊuðºü«ÉTõ163 * 164 * timeɶ·é^CCxgð}ü·ém[hðó¯é½ßÉC165 * q[v̺Éü©ÁÄóm[hðÚ®³¹éDÚ®OÌóm[hÌÊuð166 * index Én·ÆCÚ®ãÌóm[hÌÊui·Èí¿}üÊujðÔ·D156 * タイムイベントの挿入位置を下向きに探索 157 * 158 * 時刻timeに発生するタイムイベントを挿入するノードを空けるために, 159 * ヒープの下に向かって空ノードを移動させる.移動前の空ノードの位置を 160 * indexに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す. 167 161 */ 168 162 #ifdef TOPPERS_tmedown … … 175 169 while ((child = LCHILD(index)) <= last_index) { 176 170 /* 177 * ¶EÌqm[hÌCxg¶ðärµC¢ûÌqm[h178 * ÌÊuðchildÉÝè·éDȺÌqm[hÍC±±ÅIÎê½û179 * Ìqm[ẖÆD171 * 左右の子ノードのイベント発生時刻を比較し,早い方の子ノード 172 * の位置をchildに設定する.以下の子ノードは,ここで選ばれた方 173 * の子ノードのこと. 180 174 */ 181 175 if (child + 1 <= last_index … … 186 180 187 181 /* 188 * qm[hÌCxg¶Ìûªx¢iܽͯ¶jÈçÎC189 * index ª}üÊuÈÌÅ[vð²¯éD182 * 子ノードのイベント発生時刻の方が遅い(または同じ)ならば, 183 * indexが挿入位置なのでループを抜ける. 190 184 */ 191 185 if (EVTTIM_LE(time, TMEVT_NODE(child).time)) { … … 194 188 195 189 /* 196 * qm[hðindexÌÊuÉÚ®³¹éD190 * 子ノードをindexの位置に移動させる. 197 191 */ 198 192 TMEVT_NODE(index) = TMEVT_NODE(child); … … 200 194 201 195 /* 202 * index ðqm[hÌÊuÉXVD196 * indexを子ノードの位置に更新. 203 197 */ 204 198 index = child; … … 210 204 211 205 /* 212 * ^CCxgq[vÖÌo^213 * 214 * p_tmevtb Åwèµ½^CCxgubNðCtimeÅwèµ½Ôªo215 * ßãÉCxgª¶·éæ¤ÉC^CCxgq[vÉo^·éD206 * タイムイベントヒープへの登録 207 * 208 * p_tmevtbで指定したタイムイベントブロックを,timeで指定した時間が経 209 * 過後にイベントが発生するように,タイムイベントヒープに登録する. 216 210 */ 217 211 #ifdef TOPPERS_tmeins … … 223 217 224 218 /* 225 * last_index ðCNgµC»±©çãÉ}üÊuðT·D219 * last_indexをインクリメントし,そこから上に挿入位置を探す. 226 220 */ 227 221 index = tmevt_up(++last_index, time); 228 222 229 223 /* 230 * ^CCxgðindexÌÊuÉ}ü·éD224 * タイムイベントをindexの位置に挿入する. 231 225 */ 232 226 TMEVT_NODE(index).time = time; … … 238 232 239 233 /* 240 * ^CCxgq[v©çÌí234 * タイムイベントヒープからの削除 241 235 */ 242 236 #ifdef TOPPERS_tmedel … … 250 244 251 245 /* 252 * íÉæè^CCxgq[vªóÉÈéêͽàµÈ¢D246 * 削除によりタイムイベントヒープが空になる場合は何もしない. 253 247 */ 254 248 if (--last_index == 0) { … … 257 251 258 252 /* 259 * íµ½m[hÌÊuÉÅãÌm[hilast_index+1ÌÊuÌm[hj260 * ð}üµC»êðKØÈÊuÖÚ®³¹éDÀÛÉÍCÅãÌm[h261 * ðÀÛÉ}ü·éÌÅÍÈCíµ½m[hÌÊuªóm[hÉÈ262 * éÌÅCÅãÌm[hð}ü·×«ÊuÖü¯Äóm[hðÚ®³¹263 * éD264 * ÅãÌm[hÌCxg¶ªCíµ½m[hÌem[hÌC265 * xg¶æèOÌêÉÍCãÉü©ÁÄ}üÊuðT·D»266 * ¤ÅÈ¢êÉÍCºÉü©ÁÄT·D253 * 削除したノードの位置に最後のノード(last_index+1の位置のノード) 254 * を挿入し,それを適切な位置へ移動させる.実際には,最後のノード 255 * を実際に挿入するのではなく,削除したノードの位置が空ノードにな 256 * るので,最後のノードを挿入すべき位置へ向けて空ノードを移動させ 257 * る. 258 * 最後のノードのイベント発生時刻が,削除したノードの親ノードのイ 259 * ベント発生時刻より前の場合には,上に向かって挿入位置を探す.そ 260 * うでない場合には,下に向かって探す. 267 261 */ 268 262 if (index > 1 && EVTTIM_LT(event_time, 269 263 TMEVT_NODE(parent = PARENT(index)).time)) { 270 264 /* 271 * em[hðindexÌÊuÉÚ®³¹éD265 * 親ノードをindexの位置に移動させる. 272 266 */ 273 267 TMEVT_NODE(index) = TMEVT_NODE(parent); … … 275 269 276 270 /* 277 * íµ½m[hÌem[h©çãÉü©ÁÄ}üÊuðT·D271 * 削除したノードの親ノードから上に向かって挿入位置を探す. 278 272 */ 279 273 index = tmevt_up(parent, event_time); … … 281 275 else { 282 276 /* 283 * íµ½m[h©çºÉü©ÁÄ}üÊuðT·D277 * 削除したノードから下に向かって挿入位置を探す. 284 278 */ 285 279 index = tmevt_down(index, event_time); … … 287 281 288 282 /* 289 * ÅãÌm[hðindexÌÊuÉ}ü·éD283 * 最後のノードをindexの位置に挿入する. 290 284 */ 291 285 TMEVT_NODE(index) = TMEVT_NODE(last_index + 1); … … 296 290 297 291 /* 298 * ^CCxgq[vÌæªÌm[hÌí292 * タイムイベントヒープの先頭のノードの削除 299 293 */ 300 294 Inline void … … 305 299 306 300 /* 307 * íÉæè^CCxgq[vªóÉÈéêͽàµÈ¢D301 * 削除によりタイムイベントヒープが空になる場合は何もしない. 308 302 */ 309 303 if (--last_index == 0) { … … 312 306 313 307 /* 314 * [gm[hÉÅãÌm[hilast_index + 1 ÌÊuÌm[hjð315 * }üµC»êðKØÈÊuÖÚ®³¹éDÀÛÉÍCÅãÌm[hð316 * ÀÛÉ}ü·éÌÅÍÈC[gm[hªóm[hÉÈéÌÅCÅ317 * ãÌm[hð}ü·×«ÊuÖü¯Äóm[hðÚ®³¹éD308 * ルートノードに最後のノード(last_index + 1 の位置のノード)を 309 * 挿入し,それを適切な位置へ移動させる.実際には,最後のノードを 310 * 実際に挿入するのではなく,ルートノードが空ノードになるので,最 311 * 後のノードを挿入すべき位置へ向けて空ノードを移動させる. 318 312 */ 319 313 index = tmevt_down(1, event_time); 320 314 321 315 /* 322 * ÅãÌm[hðindexÌÊuÉ}ü·éD316 * 最後のノードをindexの位置に挿入する. 323 317 */ 324 318 TMEVT_NODE(index) = TMEVT_NODE(last_index + 1); … … 327 321 328 322 /* 329 * ^CCxgÜÅÌcèÔÌvZ323 * タイムイベントまでの残り時間の計算 330 324 */ 331 325 #ifdef TOPPERS_tmeltim … … 339 333 if (EVTTIM_LE(time, next_time)) { 340 334 /* 341 * Ì^CeBbNųêéêÉÍ0ðÔ·D335 * 次のタイムティックで処理される場合には0を返す. 342 336 */ 343 337 return(0U); … … 351 345 352 346 /* 353 * ^CeBbNÌ347 * タイムティックの供給 354 348 */ 355 349 #ifdef TOPPERS_sigtim … … 366 360 367 361 /* 368 * current_time ðXV·éD362 * current_timeを更新する. 369 363 */ 370 364 current_time = next_time; 371 365 372 366 /* 373 * next_time Cnext_subtimeðXV·éD367 * next_time,next_subtimeを更新する. 374 368 */ 375 369 #if TIC_DENO == 1U … … 385 379 386 380 /* 387 * current_time æèCxg¶Ì¢iܽͯ¶j^CCx388 * gðC^CCxgq[v©çíµCR[obNÖðÄÑ389 * o·D381 * current_timeよりイベント発生時刻の早い(または同じ)タイムイベ 382 * ントを,タイムイベントヒープから削除し,コールバック関数を呼び 383 * 出す. 390 384 */ 391 385 while (last_index > 0 && EVTTIM_LE(TMEVT_NODE(1).time, current_time)) { … … 396 390 397 391 /* 398 * min_time ðXV·éD392 * min_timeを更新する. 399 393 */ 400 394 min_time = current_time; -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/time_event.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^CCxgÇW 49 [ 44 * タイムイベント管理モジュール 50 45 */ 51 46 … … 54 49 55 50 /* 56 * Cxg¶Ìf[^^Ìè`57 * 58 * EVTTIM ÍCRELTIMƵÄwèÅ«éÍÍæèàL¢ÍÍð\»Å«éKv59 * ª éDÊITRON4.0dlÌX^_[hvt@CÅÍCRELTIMª16rb60 * gÈãÅȯêÎÈçÈ¢½ßCEVTTIMÍ17rbgÈãÅ é±ÆªKv61 * Å éD»Ì½ßC16rbgÉÈéêª éuint_tÅÍÈCulong_tÉ62 * è`µÄ¢éD51 * イベント発生時刻のデータ型の定義 52 * 53 * EVTTIMは,RELTIMとして指定できる範囲よりも広い範囲を表現できる必要 54 * がある.μITRON4.0仕様のスタンダードプロファイルでは,RELTIMが16ビッ 55 * ト以上でなければならないため,EVTTIMは17ビット以上であることが必要 56 * である.そのため,16ビットになる場合があるuint_tではなく,ulong_tに 57 * 定義している. 63 58 */ 64 59 typedef ulong_t EVTTIM; 65 60 66 61 /* 67 * ^CCxgubNÌf[^^Ìè`68 */ 69 typedef void (*CBACK)(void *); /* R[obNÖÌ^*/62 * タイムイベントブロックのデータ型の定義 63 */ 64 typedef void (*CBACK)(void *); /* コールバック関数の型 */ 70 65 71 66 typedef struct time_event_block { 72 uint_t index; /* ^CCxgq[vÅÌÊu*/73 CBACK callback; /* R[obNÖ*/74 void *arg; /* R[obNÖÖn·ø*/67 uint_t index; /* タイムイベントヒープ中での位置 */ 68 CBACK callback; /* コールバック関数 */ 69 void *arg; /* コールバック関数へ渡す引数 */ 75 70 } TMEVTB; 76 71 77 72 /* 78 * ^CCxgq[vÌm[hÌf[^^Ìè`73 * タイムイベントヒープ中のノードのデータ型の定義 79 74 */ 80 75 typedef struct time_event_node { 81 EVTTIM time; /* Cxg¶*/82 TMEVTB *p_tmevtb; /* ηé^CCxgubN*/76 EVTTIM time; /* イベント発生時刻 */ 77 TMEVTB *p_tmevtb; /* 対応するタイムイベントブロック */ 83 78 } TMEVTN; 84 79 85 80 /* 86 * ^CCxgq[vikernel_cfg.cj81 * タイムイベントヒープ(kernel_cfg.c) 87 82 */ 88 83 extern TMEVTN tmevt_heap[]; 89 84 90 85 /* 91 * »ÝÌVXeiPÊ: 1~bj92 * 93 * VXeN®É0Éú»³êCÈ~C^CeBbNª³êéxÉ94 * P²ÉÁ·éD86 * 現在のシステム時刻(単位: 1ミリ秒) 87 * 88 * システム起動時に0に初期化され,以降,タイムティックが供給される度に 89 * 単調に増加する. 95 90 */ 96 91 extern EVTTIM current_time; 97 92 98 93 /* 99 * ^CCxgq[vÅLøÈŬÌVXeiPÊ: 1~bj94 * タイムイベントヒープ中で有効な最小のシステム時刻(単位: 1ミリ秒) 100 95 */ 101 96 extern EVTTIM min_time; 102 97 103 98 /* 104 * Ì^CeBbNÌVXeiPÊ: 1~bj99 * 次のタイムティックのシステム時刻(単位: 1ミリ秒) 105 100 */ 106 101 extern EVTTIM next_time; 107 102 108 103 /* 109 * VXeÏZpÏiPÊ: 1/TIC_DENO~bj 110 * 111 * Ì^CeBbNÌVXeÌºÊ 112 ð¦·iãÊ 113 Ínext_timejD 114 * TIC_DENOª1ÌÍCºÊ 115 ÍíÉ0Å é½ßC±ÌÏÍKvÈ¢D 104 * システム時刻積算用変数(単位: 1/TIC_DENOミリ秒) 105 * 106 * 次のタイムティックのシステム時刻の下位桁を示す(上位桁はnext_time). 107 * TIC_DENOが1の時は,下位桁は常に0であるため,この変数は必要ない. 116 108 */ 117 109 #if TIC_DENO != 1U … … 120 112 121 113 /* 122 * ÎÔÌîiPÊ: 1~bj123 * 124 * Ì^CeBbNÌVXeðØèã°½DTIC_DENOª1Ì125 * ÍCnext_timeÉêv·éD114 * 相対時間の基準時刻(単位: 1ミリ秒) 115 * 116 * 次のタイムティックのシステム時刻を切り上げた時刻.TIC_DENOが1の時 117 * は,next_timeに一致する. 126 118 */ 127 119 #if TIC_DENO == 1U … … 132 124 133 125 /* 134 * ^CCxgq[vÌÅãÌgpÌæÌCfbNX135 * 136 * ^CCxgq[vÉo^³êÄ¢é^CCxgÌÉêv·éD126 * タイムイベントヒープの最後の使用領域のインデックス 127 * 128 * タイムイベントヒープに登録されているタイムイベントの数に一致する. 137 129 */ 138 130 extern uint_t last_index; 139 131 140 132 /* 141 * ^CCxgÇW 142 [Ìú» 133 * タイムイベント管理モジュールの初期化 143 134 */ 144 135 extern void initialize_tmevt(void); 145 136 146 137 /* 147 * ^CCxgÌ}üÊuÌTõ138 * タイムイベントの挿入位置の探索 148 139 */ 149 140 extern uint_t tmevt_up(uint_t index, EVTTIM time); … … 151 142 152 143 /* 153 * ^CCxgq[vÖÌo^Æí144 * タイムイベントヒープへの登録と削除 154 145 */ 155 146 extern void tmevtb_insert(TMEVTB *p_tmevtb, EVTTIM time); … … 157 148 158 149 /* 159 * ^CCxgubNÌo^iÎÔwèj160 * 161 * time Åwèµ½ÎÔªoßµ½ãÉCargðøƵÄcallbackªÄ162 * Ño³êéæ¤ÉCp_tmevtbÅwèµ½^CCxgubNðo^·163 * éD150 * タイムイベントブロックの登録(相対時間指定) 151 * 152 * timeで指定した相対時間が経過した後に,argを引数としてcallbackが呼 153 * び出されるように,p_tmevtbで指定したタイムイベントブロックを登録す 154 * る. 164 155 * 165 156 */ … … 175 166 176 167 /* 177 * ^CCxgubNÌo^iCxg¶wèj178 * 179 * time Åwèµ½Cxg¶ÉCargðøƵÄcallbackªÄÑo180 * ³êéæ¤ÉCp_tmevtbÅwèµ½^CCxgubNðo^·éD168 * タイムイベントブロックの登録(イベント発生時刻指定) 169 * 170 * timeで指定したイベント発生時刻に,argを引数としてcallbackが呼び出 171 * されるように,p_tmevtbで指定したタイムイベントブロックを登録する. 181 172 */ 182 173 Inline void … … 189 180 190 181 /* 191 * ^CCxgubNÌo^ð182 * タイムイベントブロックの登録解除 192 183 */ 193 184 Inline void … … 198 189 199 190 /* 200 * ^CCxgÜÅÌcèÔÌvZ191 * タイムイベントまでの残り時間の計算 201 192 */ 202 193 extern RELTIM tmevt_lefttim(TMEVTB *p_tmevtb); 203 194 204 195 /* 205 * ^CeBbNÌ196 * タイムティックの供給 206 197 */ 207 198 extern void signal_time(void); -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/time_manage.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 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 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * VXeÇ@\44 * システム時刻管理機能 49 45 */ 50 46 … … 54 50 55 51 /* 56 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 57 53 */ 58 54 #ifndef LOG_GET_TIM_ENTER … … 73 69 74 70 /* 75 * VXeÌQÆ71 * システム時刻の参照 76 72 */ 77 73 #ifdef TOPPERS_get_tim … … 98 94 99 95 /* 100 * «\]¿pVXeÌQÆ96 * 性能評価用システム時刻の参照 101 97 */ 102 98 #ifdef TOPPERS_get_utm -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/wait.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Ò¿óÔÇW 49 [ 44 * 待ち状態管理モジュール 50 45 */ 51 46 … … 54 49 55 50 /* 56 * Ò¿óÔÖÌJÚi^CAEgwèj51 * 待ち状態への遷移(タイムアウト指定) 57 52 */ 58 53 #ifdef TOPPERS_waimake … … 77 72 78 73 /* 79 * Ò¿ð74 * 待ち解除 80 75 */ 81 76 #ifdef TOPPERS_waicmp … … 92 87 93 88 /* 94 * ^CAEgɺ¤Ò¿ð89 * タイムアウトに伴う待ち解除 95 90 */ 96 91 #ifdef TOPPERS_waitmo … … 106 101 107 102 /* 108 * ±±ÅDæxÌ¢Ýðó¯t¯éD103 * ここで優先度の高い割込みを受け付ける. 109 104 */ 110 105 i_unlock_cpu(); … … 124 119 125 120 /* 126 * ±±ÅDæxÌ¢Ýðó¯t¯éD121 * ここで優先度の高い割込みを受け付ける. 127 122 */ 128 123 i_unlock_cpu(); … … 133 128 134 129 /* 135 * Ò¿óÔ̧ð130 * 待ち状態の強制解除 136 131 */ 137 132 #ifdef TOPPERS_wairel … … 149 144 150 145 /* 151 * ÀsÌ^XN̯úEÊMIuWFNgÌÒ¿L 152 [ÖÌ}ü 146 * 実行中のタスクの同期・通信オブジェクトの待ちキューへの挿入 153 147 * 154 * ÀsÌ^XNðC¯úEÊMIuWFNgÌÒ¿L 155 [Ö}ü·éDI 156 * uWFNgÌ®«É¶ÄCFIFOܽÍ^XNDæxÅ}ü·éD 148 * 実行中のタスクを,同期・通信オブジェクトの待ちキューへ挿入する.オ 149 * ブジェクトの属性に応じて,FIFO順またはタスク優先度順で挿入する. 157 150 */ 158 151 Inline void … … 168 161 169 162 /* 170 * ¯úEÊMIuWFNgÉηéÒ¿óÔÖÌJÚ163 * 同期・通信オブジェクトに対する待ち状態への遷移 171 164 */ 172 165 #ifdef TOPPERS_wobjwai … … 197 190 198 191 /* 199 * Ò¿L 200 [Ìú» 192 * 待ちキューの初期化 201 193 */ 202 194 #ifdef TOPPERS_iniwque -
Property svn:mime-type
changed from
-
UsbWattMeter/trunk/asp_dcre/kernel/wait.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æѺL̳ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêÄ¢é±ÆD 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æѺL 22 * ̳ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pÅ«È¢`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æѺL̳ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 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 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Ò¿óÔÇW 49 [ 44 * 待ち状態管理モジュール 50 45 */ 51 46 … … 57 52 58 53 /* 59 * ^XNÌDæxÌÒ¿L 60 [ÖÌ}ü 61 * 62 * p_tcbÅwè³êé^XNðC^XNDæxÌL 63 [p_queueÉ}ü·éD 64 * L 65 [Ìɯ¶DæxÌ^XNª éêÉÍC»ÌÅãÉ}ü·éD 54 * タスクの優先度順の待ちキューへの挿入 55 * 56 * p_tcbで指定されるタスクを,タスク優先度順のキューp_queueに挿入する. 57 * キューの中に同じ優先度のタスクがある場合には,その最後に挿入する. 66 58 */ 67 59 Inline void … … 81 73 82 74 /* 83 * Ò¿óÔÖÌJÚ 84 * 85 * ÀsÌ^XNðÒ¿óÔÉJÚ³¹éDïÌIÉÍCÀsÌ^XNð 86 * fBL 87 [©çíµCTCBÌp_winfotB[hCWINFOÌp_tmevtbtB[ 88 * hðÝè·éD 75 * 待ち状態への遷移 76 * 77 * 実行中のタスクを待ち状態に遷移させる.具体的には,実行中のタスクを 78 * レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー 79 * ルドを設定する. 89 80 */ 90 81 Inline void … … 97 88 98 89 /* 99 * Ò¿óÔÖÌJÚi^CAEgwèj 100 * 101 * ÀsÌ^XNðC^CAEgwèt«ÅÒ¿óÔÉJÚ³¹éDïÌ 102 * IÉÍCÀsÌ^XNðfBL 103 [©çíµCTCBÌp_winfotB[ 104 * hCWINFOÌp_tmevtbtB[hðÝè·éDܽC^CCxgu 105 * bNðo^·éD 90 * 待ち状態への遷移(タイムアウト指定) 91 * 92 * 実行中のタスクを,タイムアウト指定付きで待ち状態に遷移させる.具体 93 * 的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー 94 * ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ 95 * ロックを登録する. 106 96 */ 107 97 extern void make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout); 108 98 109 99 /* 110 * Ò¿ð̽ßÌ^XNóÔÌXV 111 * 112 * p_tcbÅwè³êé^XNðCÒ¿ð·éæ¤^XNóÔðXV·éD 113 * Ò¿ð·é^XNªÀsÅ«éóÔÉÈéêÍCfBL 114 [ÉÂÈ 115 * ®DܽCfBXpb`ªKvÈêÉÍtrueðÔ·D 100 * 待ち解除のためのタスク状態の更新 101 * 102 * p_tcbで指定されるタスクを,待ち解除するようタスク状態を更新する. 103 * 待ち解除するタスクが実行できる状態になる場合は,レディキューにつな 104 * ぐ.また,ディスパッチが必要な場合にはtrueを返す. 116 105 */ 117 106 Inline bool_t … … 122 111 if (!TSTAT_SUSPENDED(p_tcb->tstat)) { 123 112 /* 124 * Ò¿óÔ©çÀsÅ«éóÔÖÌJÚ113 * 待ち状態から実行できる状態への遷移 125 114 */ 126 115 p_tcb->tstat = TS_RUNNABLE; … … 130 119 else { 131 120 /* 132 * ñdÒ¿óÔ©ç§Ò¿óÔÖÌJÚ121 * 二重待ち状態から強制待ち状態への遷移 133 122 */ 134 123 p_tcb->tstat = TS_SUSPENDED; … … 139 128 140 129 /* 141 * IuWFNgÒ¿L 142 [©çÌí 143 * 144 * p_tcbÅwè³êé^XNªC¯úEÊMIuWFNgÌÒ¿L 145 [É 146 * ȪêÄ¢êÎCÒ¿L 147 [©çí·éD 130 * オブジェクト待ちキューからの削除 131 * 132 * p_tcbで指定されるタスクが,同期・通信オブジェクトの待ちキューにつ 133 * ながれていれば,待ちキューから削除する. 148 134 */ 149 135 Inline void … … 156 142 157 143 /* 158 * Ôҿ̽ßÌ^CCxgubNÌo^ð159 * 160 * p_tcb Åwè³êé^XNÉεÄCÔҿ̽ßÌ^CCxgu161 * bNªo^³êÄ¢êÎC»êðo^ð·éD144 * 時間待ちのためのタイムイベントブロックの登録解除 145 * 146 * p_tcbで指定されるタスクに対して,時間待ちのためのタイムイベントブ 147 * ロックが登録されていれば,それを登録解除する. 162 148 */ 163 149 Inline void … … 170 156 171 157 /* 172 * Ò¿ð 173 * 174 * p_tcbÅwè³êé^XNÌÒ¿óÔðð·éDïÌIÉÍC^CC 175 * xgubNªo^³êÄ¢êÎC»êðo^ð·éDܽC^XN 176 * óÔðXVµCÒ¿ðµ½^XN©çÌÔlðE_OKÆ·éDÒ¿L 177 [ 178 * ©çÌíÍsíÈ¢DÒ¿ðµ½^XNÖÌfBXpb`ªKvÈê 179 * ÉÍtrueðÔ·D 158 * 待ち解除 159 * 160 * p_tcbで指定されるタスクの待ち状態を解除する.具体的には,タイムイ 161 * ベントブロックが登録されていれば,それを登録解除する.また,タスク 162 * 状態を更新し,待ち解除したタスクからの返値をE_OKとする.待ちキュー 163 * からの削除は行わない.待ち解除したタスクへのディスパッチが必要な場 164 * 合にはtrueを返す. 180 165 */ 181 166 extern bool_t wait_complete(TCB *p_tcb); 182 167 183 168 /* 184 * ^CAEgɺ¤Ò¿ð 185 * 186 * p_tcbÅwè³êé^XNªCÒ¿L 187 [ÉÂȪêÄ¢êÎÒ¿L 188 [ 189 * ©çíµC^XNóÔðXV·éDܽCÒ¿ðµ½^XN©çÌÔ 190 * lðCwait_tmoutÅÍE_TMOUTCwait_tmout_okÅÍE_OKÆ·éDÒ¿ð 191 * µ½^XNÖÌfBXpb`ªKvÈÍCreqflgðtrueÉ·éD 192 * 193 * wait_tmout_okÍCdly_tskÅg¤½ßÌàÌÅCÒ¿L 194 [©çí·é 195 * ðsíÈ¢D 196 * 197 * ¢¸êÌÖàC^CCxgÌR[obNÖƵÄp¢é½ßÌ 198 * àÌÅCÝnh©çÄÑ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 * もので,割込みハンドラから呼び出されることを想定している. 199 181 */ 200 182 extern void wait_tmout(TCB *p_tcb); … … 202 184 203 185 /* 204 * Ò¿óÔ̧ð 205 * 206 * p_tcbÅwè³êé^XNÌÒ¿óÔð§IÉð·éDïÌIÉÍC 207 * ^XNªÒ¿L 208 [ÉÂȪêÄ¢êÎÒ¿L 209 [©çíµC^CC 210 * xgubNªo^³êÄ¢êλêðo^ð·éDܽC^XNÌ 211 * óÔðXVµCÒ¿ðµ½^XN©çÌÔlðE_RLWAIÆ·éDܽC 212 * Ò¿ðµ½^XNÖÌfBXpb`ªKvÈêÉÍtrueðÔ·D 186 * 待ち状態の強制解除 187 * 188 * p_tcbで指定されるタスクの待ち状態を強制的に解除する.具体的には, 189 * タスクが待ちキューにつながれていれば待ちキューから削除し,タイムイ 190 * ベントブロックが登録されていればそれを登録解除する.また,タスクの 191 * 状態を更新し,待ち解除したタスクからの返値をE_RLWAIとする.また, 192 * 待ち解除したタスクへのディスパッチが必要な場合にはtrueを返す. 213 193 */ 214 194 extern bool_t wait_release(TCB *p_tcb); 215 195 216 196 /* 217 * Ò¿L 218 [ÌæªÌ^XNID 219 * 220 * p_wait_queueÅwèµ½Ò¿L 221 [ÌæªÌ^XNIDðÔ·DÒ¿L 222 [ 223 * ªóÌêÉÍCTSK_NONEðÔ·D 197 * 待ちキューの先頭のタスクID 198 * 199 * p_wait_queueで指定した待ちキューの先頭のタスクIDを返す.待ちキュー 200 * が空の場合には,TSK_NONEを返す. 224 201 */ 225 202 Inline ID … … 235 212 236 213 /* 237 * ¯úEÊMIuWFNgÌÇubN̤ʪì[` 238 * 239 * ¯úEÊMIuWFNgÌú»ubNÆÇubNÌ檪ͤ 240 * ÊÉÈÁÄ¢éDȺÍC»Ì¤Êªðµ¤½ßÌ^¨æÑ[`Q 241 * Å éD 242 * 243 * ¡ÌÒ¿L 244 [ð¯úEÊMIuWFNgÌêCæªÈOÌÒ¿ 245 * L 246 [ðì·éêÉÍC±êçÌ[`Íg¦È¢DܽCIuWF 247 * Ng®«ÌTA_TPRIrbgðQÆ·éÌÅC±Ìrbgð¼ÌÚIÉgÁÄ 248 * ¢éêàC±êçÌ[`Íg¦È¢D 249 */ 250 251 /* 252 * ¯úEÊMIuWFNgÌú»ubN̤ʪ 214 * 同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン 215 * 216 * 同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共 217 * 通になっている.以下は,その共通部分を扱うための型およびルーチン群 218 * である. 219 * 220 * 複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち 221 * キューを操作する場合には,これらのルーチンは使えない.また,オブジェ 222 * クト属性のTA_TPRIビットを参照するので,このビットを他の目的に使って 223 * いる場合も,これらのルーチンは使えない. 224 */ 225 226 /* 227 * 同期・通信オブジェクトの初期化ブロックの共通部分 253 228 */ 254 229 typedef struct wait_object_initialization_block { 255 ATR wobjatr; /* IuWFNg®«*/230 ATR wobjatr; /* オブジェクト属性 */ 256 231 } WOBJINIB; 257 232 258 233 /* 259 * ¯úEÊMIuWFNgÌÇubN̤ʪ234 * 同期・通信オブジェクトの管理ブロックの共通部分 260 235 */ 261 236 typedef struct wait_object_control_block { 262 QUEUE wait_queue; /* Ò¿L 263 [ */ 264 const WOBJINIB *p_wobjinib; /* ú»ubNÖÌ|C^ */ 237 QUEUE wait_queue; /* 待ちキュー */ 238 const WOBJINIB *p_wobjinib; /* 初期化ブロックへのポインタ */ 265 239 } WOBJCB; 266 240 267 241 /* 268 * ¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ269 * 270 * ±Ì\¢ÌÍCÒ¿îñubNiWINFOjðg£iIuWFNgwü¾271 * êÌp³Éjµ½àÌÅ éªCWINFOª¤pÌÅè`³êÄ¢é½272 * ßÉC1ÂÌtB[hƵÄÜßÄ¢éD242 * 同期・通信オブジェクトの待ち情報ブロックの共通部分 243 * 244 * この構造体は,待ち情報ブロック(WINFO)を拡張(オブジェクト指向言 245 * 語の継承に相当)したものであるが,WINFOが共用体で定義されているた 246 * めに,1つのフィールドとして含めている. 273 247 */ 274 248 typedef struct wait_object_waiting_information { 275 WINFO winfo; /* WÌÒ¿îñubN*/276 WOBJCB *p_wobjcb; /* Ò¿IuWFNgÌÇubN*/249 WINFO winfo; /* 標準の待ち情報ブロック */ 250 WOBJCB *p_wobjcb; /* 待ちオブジェクトの管理ブロック */ 277 251 } WINFO_WOBJ; 278 252 279 253 /* 280 * ¯úEÊMIuWFNgÉηéÒ¿óÔÖÌJÚ254 * 同期・通信オブジェクトに対する待ち状態への遷移 281 255 * 282 * ÀsÌ^XNðÒ¿óÔÉJÚ³¹C¯úEÊMIuWFNgÌÒ¿L 283 [ 284 * ÉÂÈ®DܽCÒ¿îñubNiWINFOjÌp_wobjcbðÝè·éD 285 * wobj_make_wait_tmoutÍC^CCxgubNÌo^às¤D 256 * 実行中のタスクを待ち状態に遷移させ,同期・通信オブジェクトの待ちキュー 257 * につなぐ.また,待ち情報ブロック(WINFO)のp_wobjcbを設定する. 258 * wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う. 286 259 */ 287 260 extern void wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo); … … 290 263 291 264 /* 292 * ^XNDæxÏXÌ 293 * 294 * ¯úEÊMIuWFNgÉηéÒ¿óÔÉ é^XNÌDæxªÏX³ 295 * ê½êÉCÒ¿L 296 [ÌÅÌ^XNÌÊuðC³·éD 265 * タスク優先度変更時の処理 266 * 267 * 同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ 268 * れた場合に,待ちキューの中でのタスクの位置を修正する. 297 269 */ 298 270 Inline void … … 306 278 307 279 /* 308 * Ò¿L 309 [Ìú» 310 * 311 * Ò¿L 312 [ÉÂȪêÄ¢é^XNð·×ÄÒ¿ð·éDÒ¿ðµ½ 313 * ^XN©çÌÔlÍCE_DLTÆ·éDÒ¿ðµ½^XNÖÌfBXpb` 314 * ªKvÈêÍtrueC»¤ÅÈ¢êÍfalseðÔ·D 280 * 待ちキューの初期化 281 * 282 * 待ちキューにつながれているタスクをすべて待ち解除する.待ち解除した 283 * タスクからの返値は,E_DLTとする.待ち解除したタスクへのディスパッチ 284 * が必要な場合はtrue,そうでない場合はfalseを返す. 315 285 */ 316 286 extern bool_t init_wait_queue(QUEUE *p_wait_queue); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.