Changeset 318 for asp3_gr_sakura/trunk/kernel
- Timestamp:
- Aug 3, 2017, 10:46:41 PM (7 years ago)
- Location:
- asp3_gr_sakura/trunk/kernel
- Files:
-
- 62 edited
Legend:
- Unmodified
- Added
- Removed
-
asp3_gr_sakura/trunk/kernel/Makefile.kernel
-
Property svn:mime-type
changed from
text/x-makefile
totext/x-makefile; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : Makefile.kernel 554 2016-01-17 13:21:59Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã«ã¼ãã«ã®ãã¡ã¤ã«æ§æã®å®ç¾©44 # カーネルのファイル構成の定義 60 45 # 61 46 62 47 # 63 # 1 ã¤ã®ã½ã¼ã¹ãã¡ã¤ã«ããè¤æ°ã®ãªãã¸ã§ã¯ããã¡ã¤ã«ãçæããããã«ä½64 # æãããã½ã¼ã¹ãã¡ã¤ã«ã®ãªã¹ã48 # 1つのソースファイルから複数のオブジェクトファイルを生成するように作 49 # 成されたソースファイルのリスト 65 50 # 66 51 KERNEL_FCSRCS = startup.c task.c taskhook.c wait.c time_event.c \ … … 71 56 72 57 # 73 # åã½ã¼ã¹ãã¡ã¤ã«ããçæããããªãã¸ã§ã¯ããã¡ã¤ã«ã®ãªã¹ã58 # 各ソースファイルから生成されるオブジェクトファイルのリスト 74 59 # 75 60 startup = sta_ker.o ext_ker.o kermem.o … … 135 120 136 121 # 137 # çæããããªãã¸ã§ã¯ããã¡ã¤ã«ã®ä¾åé¢ä¿ã®å®ç¾©122 # 生成されるオブジェクトファイルの依存関係の定義 138 123 # 139 124 $(startup) $(startup:.o=.s): startup.c -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/alarm.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¢ã©ã¼ã éç¥æ©è½44 * アラーム通知機能 60 45 */ 61 46 … … 65 50 66 51 /* 67 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 * トレースログマクロのデフォルト定義 68 53 */ 69 54 #ifndef LOG_ALM_ENTER … … 116 101 117 102 /* 118 * ã¢ã©ã¼ã éç¥ã®æ°103 * アラーム通知の数 119 104 */ 120 105 #define tnum_alm ((uint_t)(tmax_almid - TMIN_ALMID + 1)) … … 122 107 123 108 /* 124 * ã¢ã©ã¼ã éç¥IDããã¢ã©ã¼ã éç¥ç®¡çãããã¯ãåãåºãããã®ãã¯ã109 * アラーム通知IDからアラーム通知管理ブロックを取り出すためのマクロ 125 110 */ 126 111 #define INDEX_ALM(almid) ((uint_t)((almid) - TMIN_ALMID)) … … 130 115 131 116 /* 132 * 使ç¨ãã¦ããªãã¢ã©ã¼ã éç¥ç®¡çãããã¯ã®ãªã¹ã117 * 使用していないアラーム通知管理ブロックのリスト 133 118 * 134 * ã¢ã©ã¼ã éç¥ç®¡çãããã¯ã®å 135 é ã«ã¯ãã¥ã¼ã«ã¤ãªãããã®é åããªãã 136 * ãï¼ã¿ã¤ã ã¤ãã³ããããã¯ï¼tmevtbï¼ã®é åãç¨ããï¼ 119 * アラーム通知管理ブロックの先頭にはキューにつなぐための領域がないた 120 * め,タイムイベントブロック(tmevtb)の領域を用いる. 137 121 */ 138 122 QUEUE free_almcb; 139 123 140 124 /* 141 * ã¢ã©ã¼ã éç¥æ©è½ã®åæå125 * アラーム通知機能の初期化 142 126 */ 143 127 void … … 170 154 171 155 /* 172 * ã¢ã©ã¼ã éç¥ã®çæ156 * アラーム通知の生成 173 157 */ 174 158 #ifdef TOPPERS_acre_alm … … 228 212 229 213 /* 230 * ã¢ã©ã¼ã éç¥ã®åé¤214 * アラーム通知の削除 231 215 */ 232 216 #ifdef TOPPERS_del_alm … … 272 256 273 257 /* 274 * ã¢ã©ã¼ã éç¥ã®åä½éå§258 * アラーム通知の動作開始 275 259 */ 276 260 #ifdef TOPPERS_sta_alm … … 312 296 313 297 /* 314 * ã¢ã©ã¼ã éç¥ã®åä½åæ¢298 * アラーム通知の動作停止 315 299 */ 316 300 #ifdef TOPPERS_stp_alm … … 348 332 349 333 /* 350 * ã¢ã©ã¼ã éç¥ã®ç¶æ 351 åç 352 § 334 * アラーム通知の状態参照 353 335 */ 354 336 #ifdef TOPPERS_ref_alm … … 389 371 390 372 /* 391 * ã¢ã©ã¼ã éç¥èµ·åã«ã¼ãã³373 * アラーム通知起動ルーチン 392 374 */ 393 375 #ifdef TOPPERS_almcal … … 397 379 { 398 380 /* 399 * ã¢ã©ã¼ã éç¥ãåæ¢ç¶æ 400 ã«ããï¼ 381 * アラーム通知を停止状態にする. 401 382 */ 402 383 p_almcb->almsta = false; 403 384 404 385 /* 405 * éç¥ãã³ãã©ãï¼CPUããã¯è§£é¤ç¶æ 406 ã§å¼ã³åºãï¼ 386 * 通知ハンドラを,CPUロック解除状態で呼び出す. 407 387 */ 408 388 unlock_cpu(); -
asp3_gr_sakura/trunk/kernel/alarm.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¢ã©ã¼ã éç¥æ©è½44 * アラーム通知機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * ã¢ã©ã¼ã éç¥åæåãããã¯55 * アラーム通知初期化ブロック 71 56 */ 72 57 typedef struct alarm_handler_initialization_block { 73 ATR almatr; /* ã¢ã©ã¼ã éç¥å±æ§ */ 74 intptr_t exinf; /* éç¥ãã³ãã©ã®æ¡å¼µæ 75 å ± */ 76 NFYHDR nfyhdr; /* éç¥ãã³ãã©ã®èµ·åçªå° */ 58 ATR almatr; /* アラーム通知属性 */ 59 intptr_t exinf; /* 通知ハンドラの拡張情報 */ 60 NFYHDR nfyhdr; /* 通知ハンドラの起動番地 */ 77 61 } ALMINIB; 78 62 79 63 /* 80 * ã¢ã©ã¼ã éç¥ç®¡çãããã¯64 * アラーム通知管理ブロック 81 65 */ 82 66 typedef struct alarm_handler_control_block { 83 const ALMINIB *p_alminib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 84 bool_t almsta; /* ã¢ã©ã¼ã éç¥ã®åä½ç¶æ 85 */ 86 TMEVTB tmevtb; /* ã¿ã¤ã ã¤ãã³ãããã㯠*/ 67 const ALMINIB *p_alminib; /* 初期化ブロックへのポインタ */ 68 bool_t almsta; /* アラーム通知の動作状態 */ 69 TMEVTB tmevtb; /* タイムイベントブロック */ 87 70 } ALMCB; 88 71 89 72 /* 90 * 使ç¨ãã¦ããªãã¢ã©ã¼ã éç¥ç®¡çãããã¯ã®ãªã¹ã73 * 使用していないアラーム通知管理ブロックのリスト 91 74 */ 92 75 extern QUEUE free_almcb; 93 76 94 77 /* 95 * ã¢ã©ã¼ã éç¥IDã®æ大å¤ï¼kernel_cfg.cï¼78 * アラーム通知IDの最大値(kernel_cfg.c) 96 79 */ 97 80 extern const ID tmax_almid; … … 99 82 100 83 /* 101 * ã¢ã©ã¼ã éç¥åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼84 * アラーム通知初期化ブロックのエリア(kernel_cfg.c) 102 85 */ 103 86 extern const ALMINIB alminib_table[]; … … 105 88 106 89 /* 107 * ã¢ã©ã¼ã éç¥ã®éç¥æ¹æ³ã®æ ¼ç´ã¨ãªã¢ï¼kernel_cfg.cï¼90 * アラーム通知の通知方法の格納エリア(kernel_cfg.c) 108 91 */ 109 92 extern T_NFYINFO aalm_nfyinfo_table[]; 110 93 111 94 /* 112 * ã¢ã©ã¼ã éç¥ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼95 * アラーム通知管理ブロックのエリア(kernel_cfg.c) 113 96 */ 114 97 extern ALMCB almcb_table[]; 115 98 116 99 /* 117 * ã¢ã©ã¼ã éç¥ç®¡çãããã¯ããã¢ã©ã¼ã éç¥IDãåãåºãããã®ãã¯ã100 * アラーム通知管理ブロックからアラーム通知IDを取り出すためのマクロ 118 101 */ 119 102 #define ALMID(p_almcb) ((ID)(((p_almcb) - almcb_table) + TMIN_ALMID)) 120 103 121 104 /* 122 * ã¢ã©ã¼ã éç¥æ©è½ã®åæå105 * アラーム通知機能の初期化 123 106 */ 124 107 extern void initialize_alarm(void); 125 108 126 109 /* 127 * ã¢ã©ã¼ã éç¥èµ·åã«ã¼ãã³110 * アラーム通知起動ルーチン 128 111 */ 129 112 extern void call_alarm(ALMCB *p_almcb); -
asp3_gr_sakura/trunk/kernel/alarm.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : alarm.trb 588 2016-02-05 12:54:58Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã¢ã©ã¼ã éç¥æ©è½ã®çæã¹ã¯ãªãã44 # アラーム通知機能の生成スクリプト 60 45 # 61 46 … … 67 52 68 53 def prepare(key, params) 69 # almatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2491ï¼½70 # ï¼TA_STA以å¤ã®ããããã»ããããã¦ããå ´åï¼54 # almatrが無効の場合(E_RSATR)[NGKI2491] 55 #(TA_STA以外のビットがセットされている場合) 71 56 if (params[:almatr] & ~($TA_STA)) != 0 72 57 error_illegal_id("E_RSATR", params, :almatr, :almid) 73 58 end 74 59 75 # éç¥æ 76 å ±ã®å¦ç 60 # 通知情報の処理 77 61 params[:nfyhdr] = generateNotifyHandler(key, params, :almid) 78 62 end … … 85 69 86 70 # 87 # ã¢ã©ã¼ã éç¥ã«é¢ããæ 88 å ±ã®çæ 71 # アラーム通知に関する情報の生成 89 72 # 90 73 $kernelCfgC.comment_header("Alarm Notification Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/allfunc.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 45 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ãã¹ã¦ã®é¢æ°ãã³ã³ãã¤ã«ããããã®å®ç¾©42 * すべての関数をコンパイルするための定義 58 43 */ 59 44 -
asp3_gr_sakura/trunk/kernel/check.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¨ã©ã¼ãã§ãã¯ç¨ãã¯ã44 * エラーチェック用マクロ 60 45 */ 61 46 … … 66 51 67 52 /* 68 * ãªãã¸ã§ã¯ãIDã®ç¯å²ã®å¤å®53 * オブジェクトIDの範囲の判定 69 54 */ 70 55 #define VALID_TSKID(tskid) (TMIN_TSKID <= (tskid) && (tskid) <= tmax_tskid) … … 80 65 81 66 /* 82 * ãªãã¸ã§ã¯ãçªå·ã®ç¯å²ã®å¤å®67 * オブジェクト番号の範囲の判定 83 68 */ 84 69 #ifndef VALID_INTNO_DISINT … … 91 76 92 77 /* 93 * åªå 94 度ã®ç¯å²ã®å¤å® 78 * 優先度の範囲の判定 95 79 */ 96 80 #define VALID_TPRI(tpri) (TMIN_TPRI <= (tpri) && (tpri) <= TMAX_TPRI) … … 107 91 108 92 /* 109 * ç¸å¯¾æéã®ç¯å²ã®å¤å®93 * 相対時間の範囲の判定 110 94 */ 111 95 #define VALID_RELTIM(reltim) ((reltim) <= TMAX_RELTIM) 112 96 113 97 /* 114 * ã¿ã¤ã ã¢ã¦ãæå®å¤ã®ç¯å²ã®å¤å®98 * タイムアウト指定値の範囲の判定 115 99 */ 116 100 #define VALID_TMOUT(tmout) ((tmout) <= TMAX_RELTIM || (tmout) == TMO_FEVR \ … … 118 102 119 103 /* 120 * ã¢ã©ã¤ã³ãã¦ãããã®å¤å®104 * アラインしているかの判定 121 105 */ 122 106 #define ALIGNED(val, align) ((((uintptr_t)(val)) & ((align) - 1U)) == 0U) … … 159 143 160 144 /* 161 * NULL ã§ãªããã¨ã®å¤å®145 * NULLでないことの判定 162 146 */ 163 147 #ifdef CHECK_INTPTR_NONNULL … … 174 158 175 159 /* 176 * å¼åºãã³ã³ããã¹ãã®ãã§ãã¯ï¼E_CTXï¼160 * 呼出しコンテキストのチェック(E_CTX) 177 161 */ 178 162 #define CHECK_TSKCTX() do { \ … … 184 168 185 169 /* 186 * CPUããã¯ç¶æ 187 ã®ãã§ãã¯ï¼E_CTXï¼ 170 * CPUロック状態のチェック(E_CTX) 188 171 */ 189 172 #define CHECK_UNL() do { \ … … 195 178 196 179 /* 197 * å¼åºãã³ã³ããã¹ãã¨CPUããã¯ç¶æ 198 ã®ãã§ãã¯ï¼E_CTXï¼ 180 * 呼出しコンテキストとCPUロック状態のチェック(E_CTX) 199 181 */ 200 182 #define CHECK_TSKCTX_UNL() do { \ … … 206 188 207 189 /* 208 * ãã£ã¹ãããä¿çç¶æ 209 ã§ãªããã®ãã§ãã¯ï¼E_CTXï¼ 190 * ディスパッチ保留状態でないかのチェック(E_CTX) 210 191 */ 211 192 #define CHECK_DISPATCH() do { \ … … 217 198 218 199 /* 219 * ãã®ä»ã®ã³ã³ããã¹ãã¨ã©ã¼ã®ãã§ãã¯ï¼E_CTXï¼200 * その他のコンテキストエラーのチェック(E_CTX) 220 201 */ 221 202 #define CHECK_CTX(exp) do { \ … … 227 208 228 209 /* 229 * ãªãã¸ã§ã¯ãIDã®ãã§ãã¯ï¼E_IDï¼210 * オブジェクトIDのチェック(E_ID) 230 211 */ 231 212 #define CHECK_ID(exp) do { \ … … 237 218 238 219 /* 239 * äºç´å±æ§ã¨ã©ã¼ã®ãã§ãã¯ï¼E_RSATRï¼220 * 予約属性エラーのチェック(E_RSATR) 240 221 */ 241 222 #define CHECK_RSATR(atr, valid_atr) do { \ … … 247 228 248 229 /* 249 * ãã©ã¡ã¼ã¿ã¨ã©ã¼ã®ãã§ãã¯ï¼E_PARï¼230 * パラメータエラーのチェック(E_PAR) 250 231 */ 251 232 #define CHECK_PAR(exp) do { \ … … 257 238 258 239 /* 259 * ä¸æ£ä½¿ç¨ã¨ã©ã¼ã®ãã§ãã¯ï¼E_ILUSEï¼240 * 不正使用エラーのチェック(E_ILUSE) 260 241 */ 261 242 #define CHECK_ILUSE(exp) do { \ … … 267 248 268 249 /* 269 * éçãªãªãã¸ã§ã¯ãç¶æ 270 ã¨ã©ã¼ã®ãã§ãã¯ï¼E_OBJï¼ 250 * 静的なオブジェクト状態エラーのチェック(E_OBJ) 271 251 */ 272 252 #define CHECK_OBJ(exp) do { \ -
asp3_gr_sakura/trunk/kernel/cyclic.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å¨æéç¥æ©è½44 * 周期通知機能 60 45 */ 61 46 … … 65 50 66 51 /* 67 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 * トレースログマクロのデフォルト定義 68 53 */ 69 54 #ifndef LOG_CYC_ENTER … … 116 101 117 102 /* 118 * å¨æéç¥ã®æ°103 * 周期通知の数 119 104 */ 120 105 #define tnum_cyc ((uint_t)(tmax_cycid - TMIN_CYCID + 1)) … … 122 107 123 108 /* 124 * å¨æéç¥IDããå¨æéç¥ç®¡çãããã¯ãåãåºãããã®ãã¯ã109 * 周期通知IDから周期通知管理ブロックを取り出すためのマクロ 125 110 */ 126 111 #define INDEX_CYC(cycid) ((uint_t)((cycid) - TMIN_CYCID)) … … 130 115 131 116 /* 132 * 使ç¨ãã¦ããªãå¨æéç¥ç®¡çãããã¯ã®ãªã¹ã117 * 使用していない周期通知管理ブロックのリスト 133 118 * 134 * å¨æéç¥ç®¡çãããã¯ã®å 135 é ã«ã¯ãã¥ã¼ã«ã¤ãªãããã®é åããªãããï¼ 136 * ã¿ã¤ã ã¤ãã³ããããã¯ï¼tmevtbï¼ã®é åãç¨ããï¼ 119 * 周期通知管理ブロックの先頭にはキューにつなぐための領域がないため, 120 * タイムイベントブロック(tmevtb)の領域を用いる. 137 121 */ 138 122 QUEUE free_cyccb; 139 123 140 124 /* 141 * å¨æéç¥æ©è½ã®åæå125 * 周期通知機能の初期化 142 126 */ 143 127 void … … 155 139 if ((p_cyccb->p_cycinib->cycatr & TA_STA) != 0U) { 156 140 /* 157 * ååã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1035ï¼½158 * ï¼»ASPD1062ï¼½ï¼141 * 初回の起動のためのタイムイベントを登録する[ASPD1035] 142 * [ASPD1062]. 159 143 */ 160 144 p_cyccb->cycsta = true; … … 181 165 182 166 /* 183 * å¨æéç¥ã®çæ167 * 周期通知の生成 184 168 */ 185 169 #ifdef TOPPERS_acre_cyc … … 254 238 255 239 /* 256 * å¨æéç¥ã®åé¤240 * 周期通知の削除 257 241 */ 258 242 #ifdef TOPPERS_del_cyc … … 298 282 299 283 /* 300 * å¨æéç¥ã®åä½éå§284 * 周期通知の動作開始 301 285 */ 302 286 #ifdef TOPPERS_sta_cyc … … 325 309 } 326 310 /* 327 * ååã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1036ï¼½ï¼311 * 初回の起動のためのタイムイベントを登録する[ASPD1036]. 328 312 */ 329 313 tmevtb_enqueue(&(p_cyccb->tmevtb), p_cyccb->p_cycinib->cycphs); … … 340 324 341 325 /* 342 * å¨æéç¥ã®åä½åæ¢326 * 周期通知の動作停止 343 327 */ 344 328 #ifdef TOPPERS_stp_cyc … … 376 360 377 361 /* 378 * å¨æéç¥ã®ç¶æ 379 åç 380 § 362 * 周期通知の状態参照 381 363 */ 382 364 #ifdef TOPPERS_ref_cyc … … 417 399 418 400 /* 419 * å¨æéç¥èµ·åã«ã¼ãã³401 * 周期通知起動ルーチン 420 402 */ 421 403 #ifdef TOPPERS_cyccal … … 425 407 { 426 408 /* 427 * 次åã®èµ·åã®ããã®ã¿ã¤ã ã¤ãã³ããç»é²ããï¼»ASPD1037ï¼½ï¼409 * 次回の起動のためのタイムイベントを登録する[ASPD1037]. 428 410 */ 429 p_cyccb->tmevtb.evttim += p_cyccb->p_cycinib->cyctim; /* ï¼»ASPD1038ï¼½*/411 p_cyccb->tmevtb.evttim += p_cyccb->p_cycinib->cyctim; /*[ASPD1038]*/ 430 412 tmevtb_register(&(p_cyccb->tmevtb)); 431 413 432 414 /* 433 * éç¥ãã³ãã©ãï¼CPUããã¯è§£é¤ç¶æ 434 ã§å¼ã³åºãï¼ 415 * 通知ハンドラを,CPUロック解除状態で呼び出す. 435 416 */ 436 417 unlock_cpu(); -
asp3_gr_sakura/trunk/kernel/cyclic.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å¨æéç¥æ©è½44 * 周期通知機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * å¨æéç¥åæåãããã¯55 * 周期通知初期化ブロック 71 56 */ 72 57 typedef struct cyclic_handler_initialization_block { 73 ATR cycatr; /* å¨æéç¥å±æ§ */ 74 intptr_t exinf; /* éç¥ãã³ãã©ã®æ¡å¼µæ 75 å ± */ 76 NFYHDR nfyhdr; /* éç¥ãã³ãã©ã®èµ·åçªå° */ 77 RELTIM cyctim; /* å¨æéç¥ã®èµ·åå¨æ */ 78 RELTIM cycphs; /* å¨æéç¥ã®èµ·åä½ç¸ */ 58 ATR cycatr; /* 周期通知属性 */ 59 intptr_t exinf; /* 通知ハンドラの拡張情報 */ 60 NFYHDR nfyhdr; /* 通知ハンドラの起動番地 */ 61 RELTIM cyctim; /* 周期通知の起動周期 */ 62 RELTIM cycphs; /* 周期通知の起動位相 */ 79 63 } CYCINIB; 80 64 81 65 /* 82 * å¨æéç¥ç®¡çãããã¯66 * 周期通知管理ブロック 83 67 * 84 * 次ã«å¨æéç¥ãèµ·åããæå»ã¯ï¼ã¿ã¤ã ã¤ãã³ããããã¯ï¼tmevtbï¼ä¸ã®85 * ã¿ã¤ã ã¤ãã³ãã®çºçæå»ï¼evttimï¼ã§ä¿æããï¼68 * 次に周期通知を起動する時刻は,タイムイベントブロック(tmevtb)中の 69 * タイムイベントの発生時刻(evttim)で保持する. 86 70 */ 87 71 typedef struct cyclic_handler_control_block { 88 const CYCINIB *p_cycinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 89 bool_t cycsta; /* å¨æéç¥ã®åä½ç¶æ 90 */ 91 TMEVTB tmevtb; /* ã¿ã¤ã ã¤ãã³ãããã㯠*/ 72 const CYCINIB *p_cycinib; /* 初期化ブロックへのポインタ */ 73 bool_t cycsta; /* 周期通知の動作状態 */ 74 TMEVTB tmevtb; /* タイムイベントブロック */ 92 75 } CYCCB; 93 76 94 77 /* 95 * 使ç¨ãã¦ããªãå¨æéç¥ç®¡çãããã¯ã®ãªã¹ã78 * 使用していない周期通知管理ブロックのリスト 96 79 */ 97 80 extern QUEUE free_cyccb; 98 81 99 82 /* 100 * å¨æéç¥IDã®æ大å¤ï¼kernel_cfg.cï¼83 * 周期通知IDの最大値(kernel_cfg.c) 101 84 */ 102 85 extern const ID tmax_cycid; … … 104 87 105 88 /* 106 * å¨æéç¥åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼89 * 周期通知初期化ブロックのエリア(kernel_cfg.c) 107 90 */ 108 91 extern const CYCINIB cycinib_table[]; … … 110 93 111 94 /* 112 * å¨æéç¥ã®éç¥æ¹æ³ã®æ ¼ç´ã¨ãªã¢ï¼kernel_cfg.cï¼95 * 周期通知の通知方法の格納エリア(kernel_cfg.c) 113 96 */ 114 97 extern T_NFYINFO acyc_nfyinfo_table[]; 115 98 116 99 /* 117 * å¨æéç¥ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼100 * 周期通知管理ブロックのエリア(kernel_cfg.c) 118 101 */ 119 102 extern CYCCB cyccb_table[]; 120 103 121 104 /* 122 * å¨æéç¥ç®¡çãããã¯ããå¨æéç¥IDãåãåºãããã®ãã¯ã105 * 周期通知管理ブロックから周期通知IDを取り出すためのマクロ 123 106 */ 124 107 #define CYCID(p_cyccb) ((ID)(((p_cyccb) - cyccb_table) + TMIN_CYCID)) 125 108 126 109 /* 127 * å¨æéç¥æ©è½ã®åæå110 * 周期通知機能の初期化 128 111 */ 129 112 extern void initialize_cyclic(void); 130 113 131 114 /* 132 * å¨æéç¥èµ·åã«ã¼ãã³115 * 周期通知起動ルーチン 133 116 */ 134 117 extern void call_cyclic(CYCCB *p_cyccb); -
asp3_gr_sakura/trunk/kernel/cyclic.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : cyclic.trb 588 2016-02-05 12:54:58Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # å¨æéç¥æ©è½ã®çæã¹ã¯ãªãã44 # 周期通知機能の生成スクリプト 60 45 # 61 46 … … 67 52 68 53 def prepare(key, params) 69 # cycatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2383ï¼½70 # ï¼TA_STA以å¤ã®ããããã»ããããã¦ããå ´åï¼54 # cycatrが無効の場合(E_RSATR)[NGKI2383] 55 #(TA_STA以外のビットがセットされている場合) 71 56 if (params[:cycatr] & ~($TA_STA)) != 0 72 57 error_illegal_id("E_RSATR", params, :cycatr, :cycid) 73 58 end 74 59 75 # (0 < cyctim && cyctim <= TMAX_RELTIM) ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI2397ï¼½60 # (0 < cyctim && cyctim <= TMAX_RELTIM)でない場合(E_PAR)[NGKI2397] 76 61 if !(0 < params[:cyctim] && params[:cyctim] <= $TMAX_RELTIM) 77 62 error_illegal_id("E_PAR", params, :cyctim, :cycid) 78 63 end 79 64 80 # (0 <= cycphs && cycphs <= TMAX_RELTIM) ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI2399ï¼½65 # (0 <= cycphs && cycphs <= TMAX_RELTIM)でない場合(E_PAR)[NGKI2399] 81 66 if !(0 <= params[:cycphs] && params[:cycphs] <= $TMAX_RELTIM) 82 67 error_illegal_id("E_PAR", params, :cycphs, :cycid) 83 68 end 84 69 85 # éç¥æ 86 å ±ã®å¦ç 70 # 通知情報の処理 87 71 params[:nfyhdr] = generateNotifyHandler(key, params, :cycid) 88 72 end … … 95 79 96 80 # 97 # å¨æéç¥ã«é¢ããæ 98 å ±ã®çæ 81 # 周期通知に関する情報の生成 99 82 # 100 83 $kernelCfgC.comment_header("Cyclic Notification Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/dataqueue.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ãã¼ã¿ãã¥ã¼æ©è½44 * データキュー機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_DTQ_ENTER … … 158 143 159 144 /* 160 * ãã¼ã¿ãã¥ã¼ã®æ°145 * データキューの数 161 146 */ 162 147 #define tnum_dtq ((uint_t)(tmax_dtqid - TMIN_DTQID + 1)) … … 164 149 165 150 /* 166 * ãã¼ã¿ãã¥ã¼IDãããã¼ã¿ãã¥ã¼ç®¡çãããã¯ãåãåºãããã®ãã¯ã151 * データキューIDからデータキュー管理ブロックを取り出すためのマクロ 167 152 */ 168 153 #define INDEX_DTQ(dtqid) ((uint_t)((dtqid) - TMIN_DTQID)) … … 172 157 173 158 /* 174 * 使ç¨ãã¦ããªããã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ãªã¹ã159 * 使用していないデータキュー管理ブロックのリスト 175 160 */ 176 161 QUEUE free_dtqcb; 177 162 178 163 /* 179 * ãã¼ã¿ãã¥ã¼æ©è½ã®åæå164 * データキュー機能の初期化 180 165 */ 181 166 void … … 208 193 209 194 /* 210 * ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´195 * データキュー管理領域へのデータの格納 211 196 */ 212 197 #ifdef TOPPERS_dtqenq … … 226 211 227 212 /* 228 * ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®å¼·å¶æ ¼ç´213 * データキュー管理領域へのデータの強制格納 229 214 */ 230 215 #ifdef TOPPERS_dtqfenq … … 249 234 250 235 /* 251 * ãã¼ã¿ãã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã236 * データキュー管理領域からのデータの取出し 252 237 */ 253 238 #ifdef TOPPERS_dtqdeq … … 267 252 268 253 /* 269 * ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿éä¿¡254 * データキューへのデータ送信 270 255 */ 271 256 #ifdef TOPPERS_dtqsnd … … 294 279 295 280 /* 296 * ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿å¼·å¶éä¿¡281 * データキューへのデータ強制送信 297 282 */ 298 283 #ifdef TOPPERS_dtqfsnd … … 316 301 317 302 /* 318 * ãã¼ã¿ãã¥ã¼ããã®ãã¼ã¿åä¿¡303 * データキューからのデータ受信 319 304 */ 320 305 #ifdef TOPPERS_dtqrcv … … 350 335 351 336 /* 352 * ãã¼ã¿ãã¥ã¼ã®çæ337 * データキューの生成 353 338 */ 354 339 #ifdef TOPPERS_acre_dtq … … 410 395 411 396 /* 412 * ãã¼ã¿ãã¥ã¼ã®åé¤397 * データキューの削除 413 398 */ 414 399 #ifdef TOPPERS_del_dtq … … 457 442 458 443 /* 459 * ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡444 * データキューへの送信 460 445 */ 461 446 #ifdef TOPPERS_snd_dtq … … 503 488 504 489 /* 505 * ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼490 * データキューへの送信(ポーリング) 506 491 */ 507 492 #ifdef TOPPERS_psnd_dtq … … 546 531 547 532 /* 548 * ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼533 * データキューへの送信(タイムアウトあり) 549 534 */ 550 535 #ifdef TOPPERS_tsnd_dtq … … 598 583 599 584 /* 600 * ãã¼ã¿ãã¥ã¼ã¸ã®å¼·å¶éä¿¡585 * データキューへの強制送信 601 586 */ 602 587 #ifdef TOPPERS_fsnd_dtq … … 642 627 643 628 /* 644 * ãã¼ã¿ãã¥ã¼ããã®åä¿¡629 * データキューからの受信 645 630 */ 646 631 #ifdef TOPPERS_rcv_dtq … … 693 678 694 679 /* 695 * ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼680 * データキューからの受信(ポーリング) 696 681 */ 697 682 #ifdef TOPPERS_prcv_dtq … … 731 716 732 717 /* 733 * ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼718 * データキューからの受信(タイムアウトあり) 734 719 */ 735 720 #ifdef TOPPERS_trcv_dtq … … 787 772 788 773 /* 789 * ãã¼ã¿ãã¥ã¼ã®ååæå774 * データキューの再初期化 790 775 */ 791 776 #ifdef TOPPERS_ini_dtq … … 827 812 828 813 /* 829 * ãã¼ã¿ãã¥ã¼ã®ç¶æ 830 åç 831 § 814 * データキューの状態参照 832 815 */ 833 816 #ifdef TOPPERS_ref_dtq -
asp3_gr_sakura/trunk/kernel/dataqueue.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ãã¼ã¿ãã¥ã¼æ©è½44 * データキュー機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * ãã¼ã¿ç®¡çãããã¯55 * データ管理ブロック 71 56 */ 72 57 typedef struct data_management_block { 73 intptr_t data; /* ãã¼ã¿æ¬ä½*/58 intptr_t data; /* データ本体 */ 74 59 } DTQMB; 75 60 76 61 /* 77 * ãã¼ã¿ãã¥ã¼åæåãããã¯62 * データキュー初期化ブロック 78 63 * 79 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 80 ±éé¨å 81 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 82 * æåã®ãã£ã¼ã«ããå 83 ±éã«ãªã£ã¦ããï¼ 64 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 65 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 66 * 最初のフィールドが共通になっている. 84 67 */ 85 68 typedef struct dataqueue_initialization_block { 86 ATR dtqatr; /* ãã¼ã¿ãã¥ã¼å±æ§ */ 87 uint_t dtqcnt; /* ãã¼ã¿ãã¥ã¼ã®å®¹é */ 88 DTQMB *p_dtqmb; /* ãã¼ã¿ãã¥ã¼ç®¡çé åã®å 89 é çªå° */ 69 ATR dtqatr; /* データキュー属性 */ 70 uint_t dtqcnt; /* データキューの容量 */ 71 DTQMB *p_dtqmb; /* データキュー管理領域の先頭番地 */ 90 72 } DTQINIB; 91 73 92 74 /* 93 * ãã¼ã¿ãã¥ã¼ç®¡çãããã¯75 * データキュー管理ブロック 94 76 * 95 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 96 ±éé¨åï¼WOBJCBï¼ 97 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 98 * ãã£ã¼ã«ããå 99 ±éã«ãªã£ã¦ããï¼ 77 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 78 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 79 * フィールドが共通になっている. 100 80 */ 101 81 typedef struct dataqueue_control_block { 102 QUEUE swait_queue; /* ãã¼ã¿ãã¥ã¼éä¿¡å¾ 103 ã¡ãã¥ã¼ */ 104 const DTQINIB *p_dtqinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 105 QUEUE rwait_queue; /* ãã¼ã¿ãã¥ã¼åä¿¡å¾ 106 ã¡ãã¥ã¼ */ 107 uint_t count; /* ãã¼ã¿ãã¥ã¼ä¸ã®ãã¼ã¿ã®æ° */ 108 uint_t head; /* æåã®ãã¼ã¿ã®æ ¼ç´å ´æ */ 109 uint_t tail; /* æå¾ã®ãã¼ã¿ã®æ ¼ç´å ´æã®æ¬¡ */ 82 QUEUE swait_queue; /* データキュー送信待ちキュー */ 83 const DTQINIB *p_dtqinib; /* 初期化ブロックへのポインタ */ 84 QUEUE rwait_queue; /* データキュー受信待ちキュー */ 85 uint_t count; /* データキュー中のデータの数 */ 86 uint_t head; /* 最初のデータの格納場所 */ 87 uint_t tail; /* 最後のデータの格納場所の次 */ 110 88 } DTQCB; 111 89 112 90 /* 113 * ãã¼ã¿ãã¥ã¼å¾ 114 ã¡æ 115 å ±ãããã¯ã®å®ç¾© 91 * データキュー待ち情報ブロックの定義 116 92 * 117 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 118 ã¡æ 119 å ±ãããã¯ã®å 120 ±éé¨å 121 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 122 * æåã®2ã¤ã®ãã£ã¼ã«ããå 123 ±éã«ãªã£ã¦ããï¼ 93 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 94 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 95 * 最初の2つのフィールドが共通になっている. 124 96 */ 125 97 typedef struct dataqueue_send_waiting_information { 126 WINFO winfo; /* æ¨æºã®å¾ 127 ã¡æ 128 å ±ããã㯠*/ 129 DTQCB *p_dtqcb; /* å¾ 130 ã£ã¦ãããã¼ã¿ãã¥ã¼ã®ç®¡çããã㯠*/ 131 intptr_t data; /* éä¿¡ãã¼ã¿ */ 98 WINFO winfo; /* 標準の待ち情報ブロック */ 99 DTQCB *p_dtqcb; /* 待っているデータキューの管理ブロック */ 100 intptr_t data; /* 送信データ */ 132 101 } WINFO_SDTQ; 133 102 134 103 typedef struct dataqueue_receive_waiting_information { 135 WINFO winfo; /* æ¨æºã®å¾ 136 ã¡æ 137 å ±ããã㯠*/ 138 DTQCB *p_dtqcb; /* å¾ 139 ã£ã¦ãããã¼ã¿ãã¥ã¼ã®ç®¡çããã㯠*/ 140 intptr_t data; /* åä¿¡ãã¼ã¿ */ 104 WINFO winfo; /* 標準の待ち情報ブロック */ 105 DTQCB *p_dtqcb; /* 待っているデータキューの管理ブロック */ 106 intptr_t data; /* 受信データ */ 141 107 } WINFO_RDTQ; 142 108 143 109 /* 144 * 使ç¨ãã¦ããªããã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ãªã¹ã110 * 使用していないデータキュー管理ブロックのリスト 145 111 */ 146 112 extern QUEUE free_dtqcb; 147 113 148 114 /* 149 * ãã¼ã¿ãã¥ã¼IDã®æ大å¤ï¼kernel_cfg.cï¼115 * データキューIDの最大値(kernel_cfg.c) 150 116 */ 151 117 extern const ID tmax_dtqid; … … 153 119 154 120 /* 155 * ãã¼ã¿ãã¥ã¼åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼121 * データキュー初期化ブロックのエリア(kernel_cfg.c) 156 122 */ 157 123 extern const DTQINIB dtqinib_table[]; … … 159 125 160 126 /* 161 * ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼127 * データキュー管理ブロックのエリア(kernel_cfg.c) 162 128 */ 163 129 extern DTQCB dtqcb_table[]; 164 130 165 131 /* 166 * ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ãããã¼ã¿ãã¥ã¼IDãåãåºãããã®ãã¯ã132 * データキュー管理ブロックからデータキューIDを取り出すためのマクロ 167 133 */ 168 134 #define DTQID(p_dtqcb) ((ID)(((p_dtqcb) - dtqcb_table) + TMIN_DTQID)) 169 135 170 136 /* 171 * ãã¼ã¿ãã¥ã¼æ©è½ã®åæå137 * データキュー機能の初期化 172 138 */ 173 139 extern void initialize_dataqueue(void); 174 140 175 141 /* 176 * ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´142 * データキュー管理領域へのデータの格納 177 143 */ 178 144 extern void enqueue_data(DTQCB *p_dtqcb, intptr_t data); 179 145 180 146 /* 181 * ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®å¼·å¶æ ¼ç´147 * データキュー管理領域へのデータの強制格納 182 148 */ 183 149 extern void force_enqueue_data(DTQCB *p_dtqcb, intptr_t data); 184 150 185 151 /* 186 * ãã¼ã¿ãã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã152 * データキュー管理領域からのデータの取出し 187 153 */ 188 154 extern void dequeue_data(DTQCB *p_dtqcb, intptr_t *p_data); 189 155 190 156 /* 191 * ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿éä¿¡157 * データキューへのデータ送信 192 158 */ 193 159 extern bool_t send_data(DTQCB *p_dtqcb, intptr_t data); 194 160 195 161 /* 196 * ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿å¼·å¶éä¿¡162 * データキューへのデータ強制送信 197 163 */ 198 164 extern void force_send_data(DTQCB *p_dtqcb, intptr_t data); 199 165 200 166 /* 201 * ãã¼ã¿ãã¥ã¼ããã®ãã¼ã¿åä¿¡167 * データキューからのデータ受信 202 168 */ 203 169 extern bool_t receive_data(DTQCB *p_dtqcb, intptr_t *p_data); -
asp3_gr_sakura/trunk/kernel/dataqueue.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : dataqueue.trb 668 2016-03-03 13:57:53Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ãã¼ã¿ãã¥ã¼æ©è½ã®çæã¹ã¯ãªãã44 # データキュー機能の生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®53 # パラメータが省略された時のデフォルト値の設定 69 54 params[:dtqmb] ||= "NULL" 70 55 71 # dtqatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1669ï¼½72 # ï¼TA_TPRI以å¤ã®ããããã»ããããã¦ããå ´åï¼56 # dtqatrが無効の場合(E_RSATR)[NGKI1669] 57 #(TA_TPRI以外のビットがセットされている場合) 73 58 if (params[:dtqatr] & ~($TA_TPRI)) != 0 74 59 error_illegal_id("E_RSATR", params, :dtqatr, :dtqid) 75 60 end 76 61 77 # dtqmb ãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0132ï¼½62 # dtqmbがNULLでない場合(E_NOSPT)[ASPS0132] 78 63 if params[:dtqmb] != "NULL" 79 64 error_illegal_id("E_NOSPT", params, :dtqmb, :dtqid) 80 65 end 81 66 82 # ãã¼ã¿ãã¥ã¼ç®¡çé å67 # データキュー管理領域 83 68 if params[:dtqcnt] > 0 84 69 dtqmbName = "_kernel_dtqmb_#{params[:dtqid]}" … … 97 82 98 83 # 99 # ãã¼ã¿ãã¥ã¼ã«é¢ããæ 100 å ±ã®çæ 84 # データキューに関する情報の生成 101 85 # 102 86 $kernelCfgC.comment_header("Dataqueue Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/eventflag.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¤ãã³ããã©ã°æ©è½44 * イベントフラグ機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_FLG_ENTER … … 142 127 143 128 /* 144 * ã¤ãã³ããã©ã°ã®æ°129 * イベントフラグの数 145 130 */ 146 131 #define tnum_flg ((uint_t)(tmax_flgid - TMIN_FLGID + 1)) … … 148 133 149 134 /* 150 * ã¤ãã³ããã©ã°IDããã¤ãã³ããã©ã°ç®¡çãããã¯ãåãåºãããã®ãã¯ã135 * イベントフラグIDからイベントフラグ管理ブロックを取り出すためのマクロ 151 136 */ 152 137 #define INDEX_FLG(flgid) ((uint_t)((flgid) - TMIN_FLGID)) … … 156 141 157 142 /* 158 * 使ç¨ãã¦ããªãã¤ãã³ããã©ã°ç®¡çãããã¯ã®ãªã¹ã143 * 使用していないイベントフラグ管理ブロックのリスト 159 144 */ 160 145 QUEUE free_flgcb; 161 146 162 147 /* 163 * ã¤ãã³ããã©ã°æ©è½ã®åæå148 * イベントフラグ機能の初期化 164 149 */ 165 150 void … … 189 174 190 175 /* 191 * ã¤ãã³ããã©ã°å¾ 192 ã¡è§£é¤æ¡ä»¶ã®ãã§ã㯠176 * イベントフラグ待ち解除条件のチェック 193 177 */ 194 178 #ifdef TOPPERS_flgcnd … … 211 195 212 196 /* 213 * ã¤ãã³ããã©ã°ã®çæ197 * イベントフラグの生成 214 198 * 215 * pk_cflg->iflgptnã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 216 §ããªãããï¼ 217 * ãã¼ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 218 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éã㪠219 * ãï¼ï¼ 199 * pk_cflg->iflgptnは,エラーチェックをせず,一度しか参照しないため, 200 * ローカル変数にコピーする必要がない(途中で書き換わっても支障がな 201 * い). 220 202 */ 221 203 #ifdef TOPPERS_acre_flg … … 260 242 261 243 /* 262 * ã¤ãã³ããã©ã°ã®åé¤244 * イベントフラグの削除 263 245 */ 264 246 #ifdef TOPPERS_del_flg … … 303 285 304 286 /* 305 * ã¤ãã³ããã©ã°ã®ã»ãã287 * イベントフラグのセット 306 288 */ 307 289 #ifdef TOPPERS_set_flg … … 361 343 362 344 /* 363 * ã¤ãã³ããã©ã°ã®ã¯ãªã¢345 * イベントフラグのクリア 364 346 */ 365 347 #ifdef TOPPERS_clr_flg … … 394 376 395 377 /* 396 * ã¤ãã³ããã©ã°å¾ 397 ã¡ 378 * イベントフラグ待ち 398 379 */ 399 380 #ifdef TOPPERS_wai_flg … … 448 429 449 430 /* 450 * ã¤ãã³ããã©ã°å¾ 451 ã¡ï¼ãã¼ãªã³ã°ï¼ 431 * イベントフラグ待ち(ポーリング) 452 432 */ 453 433 #ifdef TOPPERS_pol_flg … … 490 470 491 471 /* 492 * ã¤ãã³ããã©ã°å¾ 493 ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 472 * イベントフラグ待ち(タイムアウトあり) 494 473 */ 495 474 #ifdef TOPPERS_twai_flg … … 550 529 551 530 /* 552 * ã¤ãã³ããã©ã°ã®ååæå531 * イベントフラグの再初期化 553 532 */ 554 533 #ifdef TOPPERS_ini_flg … … 587 566 588 567 /* 589 * ã¤ãã³ããã©ã°ã®ç¶æ 590 åç 591 § 568 * イベントフラグの状態参照 592 569 */ 593 570 #ifdef TOPPERS_ref_flg -
asp3_gr_sakura/trunk/kernel/eventflag.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¤ãã³ããã©ã°æ©è½44 * イベントフラグ機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * ã¤ãã³ããã©ã°åæåãããã¯55 * イベントフラグ初期化ブロック 71 56 * 72 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 73 ±éé¨å 74 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 75 * æåã®ãã£ã¼ã«ããå 76 ±éã«ãªã£ã¦ããï¼ 57 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 58 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 59 * 最初のフィールドが共通になっている. 77 60 */ 78 61 typedef struct eventflag_initialization_block { 79 ATR flgatr; /* ã¤ãã³ããã©ã°å±æ§*/80 FLGPTN iflgptn; /* ã¤ãã³ããã©ã°ã®ããããã¿ã¼ã³ã®åæå¤*/62 ATR flgatr; /* イベントフラグ属性 */ 63 FLGPTN iflgptn; /* イベントフラグのビットパターンの初期値 */ 81 64 } FLGINIB; 82 65 83 66 /* 84 * ã¤ãã³ããã©ã°ç®¡çãããã¯67 * イベントフラグ管理ブロック 85 68 * 86 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 87 ±éé¨åï¼WOBJCBï¼ 88 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 89 * ãã£ã¼ã«ããå 90 ±éã«ãªã£ã¦ããï¼ 69 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 70 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 71 * フィールドが共通になっている. 91 72 */ 92 73 typedef struct eventflag_control_block { 93 QUEUE wait_queue; /* ã¤ãã³ããã©ã°å¾ 94 ã¡ãã¥ã¼ */ 95 const FLGINIB *p_flginib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 96 FLGPTN flgptn; /* ã¤ãã³ããã©ã°ç¾å¨ãã¿ã¼ã³ */ 74 QUEUE wait_queue; /* イベントフラグ待ちキュー */ 75 const FLGINIB *p_flginib; /* 初期化ブロックへのポインタ */ 76 FLGPTN flgptn; /* イベントフラグ現在パターン */ 97 77 } FLGCB; 98 78 99 79 /* 100 * ã¤ãã³ããã©ã°å¾ 101 ã¡æ 102 å ±ãããã¯ã®å®ç¾© 80 * イベントフラグ待ち情報ブロックの定義 103 81 * 104 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 105 ã¡æ 106 å ±ãããã¯ã®å 107 ±éé¨å 108 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 109 * æåã®2ã¤ã®ãã£ã¼ã«ããå 110 ±éã«ãªã£ã¦ããï¼ 82 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 83 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 84 * 最初の2つのフィールドが共通になっている. 111 85 * 112 * waiptnã«ã¯ï¼å¾ 113 ã¡ç¶æ 114 ã®éã¯å¾ 115 ã¡ãã¿ã¼ã³ãï¼å¾ 116 ã¡è§£é¤ãããå¾ã¯å¾ 117 ã¡è§£ 118 * é¤æã®ãã¿ã¼ã³ãå 119 ¥ããï¼1ã¤ã®ãã£ã¼ã«ãã2ã¤ã®ç®çã«å 120 ¼ç¨ãã¦ããï¼ï¼ 86 * waiptnには,待ち状態の間は待ちパターンを,待ち解除された後は待ち解 87 * 除時のパターンを入れる(1つのフィールドを2つの目的に兼用している). 121 88 */ 122 89 typedef struct eventflag_waiting_information { 123 WINFO winfo; /* æ¨æºã®å¾ 124 ã¡æ 125 å ±ããã㯠*/ 126 FLGCB *p_flgcb; /* å¾ 127 ã£ã¦ããã¤ãã³ããã©ã°ã®ç®¡çããã㯠*/ 128 FLGPTN waiptn; /* å¾ 129 ã¡ãã¿ã¼ã³ï¼å¾ 130 ã¡è§£é¤æã®ãã¿ã¼ã³ */ 131 MODE wfmode; /* å¾ 132 ã¡ã¢ã¼ã */ 90 WINFO winfo; /* 標準の待ち情報ブロック */ 91 FLGCB *p_flgcb; /* 待っているイベントフラグの管理ブロック */ 92 FLGPTN waiptn; /* 待ちパターン/待ち解除時のパターン */ 93 MODE wfmode; /* 待ちモード */ 133 94 } WINFO_FLG; 134 95 135 96 /* 136 * 使ç¨ãã¦ããªãã¤ãã³ããã©ã°ç®¡çãããã¯ã®ãªã¹ã97 * 使用していないイベントフラグ管理ブロックのリスト 137 98 */ 138 99 extern QUEUE free_flgcb; 139 100 140 101 /* 141 * ã¤ãã³ããã©ã°IDã®æ大å¤ï¼kernel_cfg.cï¼102 * イベントフラグIDの最大値(kernel_cfg.c) 142 103 */ 143 104 extern const ID tmax_flgid; … … 145 106 146 107 /* 147 * ã¤ãã³ããã©ã°åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼108 * イベントフラグ初期化ブロックのエリア(kernel_cfg.c) 148 109 */ 149 110 extern const FLGINIB flginib_table[]; … … 151 112 152 113 /* 153 * ã¤ãã³ããã©ã°ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼114 * イベントフラグ管理ブロックのエリア(kernel_cfg.c) 154 115 */ 155 116 extern FLGCB flgcb_table[]; 156 117 157 118 /* 158 * ã¤ãã³ããã©ã°ç®¡çãããã¯ããã¤ãã³ããã©ã°IDãåãåºãããã®ãã¯ã119 * イベントフラグ管理ブロックからイベントフラグIDを取り出すためのマクロ 159 120 */ 160 121 #define FLGID(p_flgcb) ((ID)(((p_flgcb) - flgcb_table) + TMIN_FLGID)) 161 122 162 123 /* 163 * ã¤ãã³ããã©ã°æ©è½ã®åæå124 * イベントフラグ機能の初期化 164 125 */ 165 126 extern void initialize_eventflag(void); 166 127 167 128 /* 168 * ã¤ãã³ããã©ã°å¾ 169 ã¡è§£é¤æ¡ä»¶ã®ãã§ã㯠129 * イベントフラグ待ち解除条件のチェック 170 130 */ 171 131 extern bool_t check_flg_cond(FLGCB *p_flgcb, FLGPTN waiptn, -
asp3_gr_sakura/trunk/kernel/eventflag.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : eventflag.trb 588 2016-02-05 12:54:58Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã¤ãã³ããã©ã°æ©è½ã®çæã¹ã¯ãªãã44 # イベントフラグ機能の生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # flgatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1562ï¼½69 # ï¼TA_TPRIï¼TA_WMULï¼TA_CLR以å¤ã®ããããã»ããããã¦ããå ´åï¼53 # flgatrが無効の場合(E_RSATR)[NGKI1562] 54 #(TA_TPRI,TA_WMUL,TA_CLR以外のビットがセットされている場合) 70 55 if (params[:flgatr] & ~($TA_TPRI|$TA_WMUL|$TA_CLR)) != 0 71 56 error_illegal_id("E_RSATR", params, :flgatr, :flgid) 72 57 end 73 58 74 # iflgptn ãFLGPTNã«æ ¼ç´ã§ããªãå ´åï¼E_PARï¼ï¼»NGKI3275ï¼½59 # iflgptnがFLGPTNに格納できない場合(E_PAR)[NGKI3275] 75 60 if (params[:iflgptn] & ~((1 << $TBIT_FLGPTN) - 1)) != 0 76 61 error_wrong_id("E_PAR", params, :iflgptn, :flgid, "too large") … … 84 69 85 70 # 86 # ã¤ãã³ããã©ã°ã«é¢ããæ 87 å ±ã®çæ 71 # イベントフラグに関する情報の生成 88 72 # 89 73 $kernelCfgC.comment_header("Eventflag Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/exception.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * CPU ä¾å¤ç®¡çæ©è½44 * CPU例外管理機能 60 45 */ 61 46 … … 65 50 66 51 /* 67 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 * トレースログマクロのデフォルト定義 68 53 */ 69 54 #ifndef LOG_XSNS_DPN_ENTER … … 76 61 77 62 /* 78 * CPU ä¾å¤ãã³ãã©ç®¡çæ©è½ã®åæå63 * CPU例外ハンドラ管理機能の初期化 79 64 */ 80 65 #ifdef TOPPERS_excini … … 97 82 98 83 /* 99 * CPUä¾å¤ã®çºçããã³ã³ããã¹ãã®åç 100 § 84 * CPU例外の発生したコンテキストの参照 101 85 */ 102 86 103 87 /* 104 * CPUä¾å¤çºçæã®ãã£ã¹ãããä¿çç¶æ 105 ã®åç 106 § 88 * CPU例外発生時のディスパッチ保留状態の参照 107 89 * 108 * CPUä¾å¤ãã³ãã©ä¸ã§enadspãå¤åãããã¨ã¯ãªãããï¼CPUä¾å¤ãçºçã 109 * ãæã®enadspãä¿åãã¦ããå¿ 110 è¦ã¯ãªãï¼ 90 * CPU例外ハンドラ中でenadspが変化することはないため,CPU例外が発生し 91 * た時のenadspを保存しておく必要はない. 111 92 */ 112 93 #ifdef TOPPERS_xsns_dpn -
asp3_gr_sakura/trunk/kernel/exception.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * CPU ä¾å¤ç®¡çæ©è½44 * CPU例外管理機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * CPU ä¾å¤ãã³ãã©åæåãããã¯55 * CPU例外ハンドラ初期化ブロック 71 56 */ 72 57 typedef struct cpu_exception_handler_initialization_block { 73 EXCNO excno; /* CPUä¾å¤ãã³ãã©çªå· */ 74 ATR excatr; /* CPUä¾å¤ãã³ãã©å±æ§ */ 75 FP exc_entry; /* CPUä¾å¤ãã³ãã©ã®åºå 76 ¥å£å¦çã®çªå° */ 58 EXCNO excno; /* CPU例外ハンドラ番号 */ 59 ATR excatr; /* CPU例外ハンドラ属性 */ 60 FP exc_entry; /* CPU例外ハンドラの出入口処理の番地 */ 77 61 } EXCINIB; 78 62 79 63 /* 80 * å®ç¾©ããCPUä¾å¤ãã³ãã©çªå·ã®æ°ï¼kernel_cfg.cï¼64 * 定義するCPU例外ハンドラ番号の数(kernel_cfg.c) 81 65 */ 82 66 extern const uint_t tnum_def_excno; 83 67 84 68 /* 85 * CPU ä¾å¤ãã³ãã©åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼69 * CPU例外ハンドラ初期化ブロックのエリア(kernel_cfg.c) 86 70 */ 87 71 extern const EXCINIB excinib_table[]; … … 90 74 91 75 /* 92 * CPU ä¾å¤ãã³ãã©ç®¡çæ©è½ã®åæå76 * CPU例外ハンドラ管理機能の初期化 93 77 */ 94 78 extern void initialize_exception(void); -
asp3_gr_sakura/trunk/kernel/exception.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : exception.trb 663 2016-02-27 04:45:50Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # CPU ä¾å¤ç®¡çæ©è½ã®çæã¹ã¯ãªãã44 # CPU例外管理機能の生成スクリプト 60 45 # 61 46 62 47 # 63 # kernel_cfg.c ã®çæ48 # kernel_cfg.cの生成 64 49 # 65 50 $kernelCfgC.comment_header("CPU Exception Management Functions") 66 51 67 52 # 68 # CPU ä¾å¤ãã³ãã©ã«é¢ããã¨ã©ã¼ãã§ãã¯53 # CPU例外ハンドラに関するエラーチェック 69 54 # 70 55 $cfgData[:DEF_EXC].each do |key, params| 71 # excno ãCPUä¾å¤ãã³ãã©çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3134ï¼½56 # excnoがCPU例外ハンドラ番号として正しくない場合(E_PAR)[NGKI3134] 72 57 if $EXCNO_VALID.index(params[:excno]).nil? 73 58 error_illegal("E_PAR", params, :excno) 74 59 end 75 60 76 # excatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3131ï¼½77 # ï¼TARGET_EXCATR以å¤ã®ããããã»ããããã¦ããå ´åï¼61 # excatrが無効の場合(E_RSATR)[NGKI3131] 62 #(TARGET_EXCATR以外のビットがセットされている場合) 78 63 if (params[:excatr] & ~($TARGET_EXCATR)) != 0 79 64 error_illegal_sym("E_RSATR", params, :excatr, :excno) … … 82 67 83 68 # 84 # CPUä¾å¤ãã³ãã©ã®ããã®æ¨æºçãªåæåæ 85 å ±ã®çæ 69 # CPU例外ハンドラのための標準的な初期化情報の生成 86 70 # 87 71 if !$OMIT_INITIALIZE_EXCEPTION 88 72 # 89 # å®ç¾©ããCPUä¾å¤ãã³ãã©ã®æ°73 # 定義するCPU例外ハンドラの数 90 74 # 91 75 $kernelCfgC.add(<<EOS) … … 96 80 if $cfgData[:DEF_EXC].size != 0 97 81 # 98 # CPU ä¾å¤ãã³ãã©ã®ã¨ã³ããª82 # CPU例外ハンドラのエントリ 99 83 # 100 84 $cfgData[:DEF_EXC].each do |key, params| … … 105 89 106 90 # 107 # CPU ä¾å¤ãã³ãã©åæåãããã¯91 # CPU例外ハンドラ初期化ブロック 108 92 # 109 93 $kernelCfgC.add("const EXCINIB _kernel_excinib_table[TNUM_DEF_EXCNO] = {") … … 122 106 123 107 # 124 # CPU ä¾å¤ç®¡çæ©è½åæåé¢æ°ã®è¿½å108 # CPU例外管理機能初期化関数の追加 125 109 # 126 110 $initializeFunctions.push("_kernel_initialize_exception();") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/genoffset.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 8 8 # Graduate School of Information Science, Nagoya Univ., JAPAN 9 9 # 10 # ä¸è¨èä½æ¨©è 11 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 12 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 13 # å¤ã»åé 14 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 15 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 16 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 17 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 18 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 19 # ç¨ã§ããå½¢ã§åé 20 å¸ããå ´åã«ã¯ï¼åé 21 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 22 # è 23 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 24 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 25 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 26 # ç¨ã§ããªãå½¢ã§åé 27 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 28 # ã¨ï¼ 29 # (a) åé 30 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 31 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 32 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 33 # (b) åé 34 å¸ã®å½¢æ 35 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 36 # å ±åãããã¨ï¼ 37 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 38 # 害ãããï¼ä¸è¨èä½æ¨©è 39 ããã³TOPPERSããã¸ã§ã¯ããå 40 責ãããã¨ï¼ 41 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 42 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 43 ããã³TOPPERSããã¸ã§ã¯ãã 44 # å 45 責ãããã¨ï¼ 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 # 免責すること. 46 32 # 47 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 48 ã 49 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 50 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 51 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 52 # ã®è²¬ä»»ãè² ããªãï¼ 33 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 34 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 35 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 36 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 37 # の責任を負わない. 53 38 # 54 # $Id : genoffset.trb 662 2016-02-27 02:33:51Z ertl-hiro$39 # $Id$ 55 40 # 56 41 57 42 # 58 # ãªãã»ãããã¡ã¤ã«çæç¨ã®çæã¹ã¯ãªãã43 # オフセットファイル生成用の生成スクリプト 59 44 # 60 45 61 46 # 62 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®47 # タイムスタンプファイルの指定 63 48 # 64 49 $timeStampFileName = "offset.timestamp" 65 50 66 51 # 67 # offset.hã®å 68 é é¨åã®çæ 52 # offset.hの先頭部分の生成 69 53 # 70 54 $offsetH = GenFile.new("offset.h") … … 72 56 73 57 # 74 # #define ãã£ã¬ã¯ãã£ãã®çæ58 # #defineディレクティブの生成 75 59 # 76 60 def GenerateDefine(symbol, value) … … 79 63 80 64 # 81 # ãããã®ãµã¼ã65 # ビットのサーチ 82 66 # 83 67 def SearchBit(val) … … 91 75 92 76 # 93 # ããããã£ã¼ã«ãã®ãªãã»ããã¨ãããä½ç½®ã®å®ç¾©ã®çæ77 # ビットフィールドのオフセットとビット位置の定義の生成 94 78 # 95 79 def GenerateDefineBit(label, structSize, outputSize) … … 138 122 139 123 # 140 # ãã¤ãé 141 ç½®ã®ãã§ã㯠124 # バイト配置のチェック 142 125 # 143 126 def magicCheck(size, check) -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/interrupt.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å²è¾¼ã¿ç®¡çæ©è½44 * 割込み管理機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ISR_ENTER … … 150 135 151 136 /* 152 * å²è¾¼ã¿çªå·ã®ç¯å²ã®å¤å®137 * 割込み番号の範囲の判定 153 138 */ 154 139 #ifndef VALID_INTNO_DISINT … … 173 158 174 159 /* 175 * å²è¾¼ã¿åªå 176 度ã®ç¯å²ã®å¤å® 160 * 割込み優先度の範囲の判定 177 161 */ 178 162 #ifndef VALID_INTPRI_CHGIPM … … 182 166 183 167 /* 184 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ°168 * 割込みサービスルーチンの数 185 169 */ 186 170 #define tnum_isr ((uint_t)(tmax_isrid - TMIN_ISRID + 1)) … … 188 172 189 173 /* 190 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ãå191 * ãåºãããã®ãã¯ã174 * 割込みサービスルーチンIDから割込みサービスルーチン管理ブロックを取 175 * り出すためのマクロ 192 176 */ 193 177 #define INDEX_ISR(isrid) ((uint_t)((isrid) - TMIN_ISRID)) … … 195 179 196 180 /* 197 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ãã¥ã¼ã¸ã®ç»é²181 * 割込みサービスルーチンキューへの登録 198 182 */ 199 183 Inline void … … 215 199 216 200 /* 217 * 使ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ã®ãªã¹ã201 * 使用していない割込みサービスルーチン管理ブロックのリスト 218 202 */ 219 203 QUEUE free_isrcb; 220 204 221 205 /* 222 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå206 * 割込みサービスルーチン機能の初期化 223 207 */ 224 208 void … … 251 235 252 236 /* 253 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã237 * 割込みサービスルーチンの呼出し 254 238 */ 255 239 #ifdef TOPPERS_isrcal … … 269 253 270 254 if (p_queue->p_next != p_isr_queue) { 271 /* ISRã®å¼åºãåã®ç¶æ 272 ã«æ»ã */ 255 /* ISRの呼出し前の状態に戻す */ 273 256 if (sense_lock()) { 274 257 unlock_cpu(); … … 281 264 282 265 /* 283 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ã®æ¤ç´¢266 * 割込みサービスルーチン呼出しキューの検索 284 267 */ 285 268 Inline QUEUE * … … 312 295 313 296 /* 314 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®çæ297 * 割込みサービスルーチンの生成 315 298 * 316 * pk_cisr->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 317 §ããªãããï¼ãã¼ 318 * ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 319 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼ 299 * pk_cisr->exinfは,エラーチェックをせず,一度しか参照しないため,ロー 300 * カル変数にコピーする必要がない(途中で書き換わっても支障がない). 320 301 */ 321 302 #ifdef TOPPERS_acre_isr … … 375 356 376 357 /* 377 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®åé¤358 * 割込みサービスルーチンの削除 378 359 */ 379 360 #ifdef TOPPERS_del_isr … … 415 396 416 397 /* 417 * å²è¾¼ã¿ç®¡çæ©è½ã®åæå398 * 割込み管理機能の初期化 418 399 */ 419 400 #ifdef TOPPERS_intini … … 441 422 442 423 /* 443 * å²è¾¼ã¿ã®ç¦æ¢ï¼»NGKI3555ï¼½424 * 割込みの禁止[NGKI3555] 444 425 */ 445 426 #ifdef TOPPERS_dis_int 446 #ifdef TOPPERS_SUPPORT_DIS_INT /* ï¼»NGKI3093ï¼½*/427 #ifdef TOPPERS_SUPPORT_DIS_INT /*[NGKI3093]*/ 447 428 448 429 ER … … 453 434 454 435 LOG_DIS_INT_ENTER(intno); 455 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3083][NGKI3087ï¼½*/436 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3083][NGKI3087]*/ 456 437 457 438 locked = sense_lock(); … … 460 441 } 461 442 if (check_intno_cfg(intno)) { 462 disable_int(intno); /* ï¼»NGKI3086ï¼½*/443 disable_int(intno); /*[NGKI3086]*/ 463 444 ercd = E_OK; 464 445 } 465 446 else { 466 ercd = E_OBJ; /* ï¼»NGKI3085ï¼½*/447 ercd = E_OBJ; /*[NGKI3085]*/ 467 448 } 468 449 if (!locked) { … … 479 460 480 461 /* 481 * å²è¾¼ã¿ã®è¨±å¯ï¼»NGKI3556ï¼½462 * 割込みの許可[NGKI3556] 482 463 */ 483 464 #ifdef TOPPERS_ena_int 484 #ifdef TOPPERS_SUPPORT_ENA_INT /* ï¼»NGKI3106ï¼½*/465 #ifdef TOPPERS_SUPPORT_ENA_INT /*[NGKI3106]*/ 485 466 486 467 ER … … 491 472 492 473 LOG_ENA_INT_ENTER(intno); 493 CHECK_PAR(VALID_INTNO_DISINT(intno)); /* ï¼»NGKI3096][NGKI3100ï¼½*/474 CHECK_PAR(VALID_INTNO_DISINT(intno)); /*[NGKI3096][NGKI3100]*/ 494 475 495 476 locked = sense_lock(); … … 498 479 } 499 480 if (check_intno_cfg(intno)) { 500 enable_int(intno); /* ï¼»NGKI3099ï¼½*/481 enable_int(intno); /*[NGKI3099]*/ 501 482 ercd = E_OK; 502 483 } 503 484 else { 504 ercd = E_OBJ; /* ï¼»NGKI3098ï¼½*/485 ercd = E_OBJ; /*[NGKI3098]*/ 505 486 } 506 487 if (!locked) { … … 517 498 518 499 /* 519 * å²è¾¼ã¿è¦æ±ã®ã¯ãªã¢ï¼»NGKI3920ï¼½500 * 割込み要求のクリア[NGKI3920] 520 501 */ 521 502 #ifdef TOPPERS_clr_int 522 #ifdef TOPPERS_SUPPORT_CLR_INT /* ï¼»NGKI3927ï¼½*/503 #ifdef TOPPERS_SUPPORT_CLR_INT /*[NGKI3927]*/ 523 504 524 505 ER … … 529 510 530 511 LOG_CLR_INT_ENTER(intno); 531 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /* ï¼»NGKI3921][NGKI3930ï¼½*/512 CHECK_PAR(VALID_INTNO_CLRINT(intno)); /*[NGKI3921][NGKI3930]*/ 532 513 533 514 locked = sense_lock(); … … 536 517 } 537 518 if (check_intno_cfg(intno) && check_intno_clear(intno)) { 538 clear_int(intno); /* ï¼»NGKI3924ï¼½*/519 clear_int(intno); /*[NGKI3924]*/ 539 520 ercd = E_OK; 540 521 } 541 522 else { 542 ercd = E_OBJ; /* ï¼»NGKI3923][NGKI3929ï¼½*/523 ercd = E_OBJ; /*[NGKI3923][NGKI3929]*/ 543 524 } 544 525 if (!locked) { … … 555 536 556 537 /* 557 * å²è¾¼ã¿ã®è¦æ±ï¼»NGKI3932ï¼½538 * 割込みの要求[NGKI3932] 558 539 */ 559 540 #ifdef TOPPERS_ras_int 560 #ifdef TOPPERS_SUPPORT_RAS_INT /* ï¼»NGKI3939ï¼½*/541 #ifdef TOPPERS_SUPPORT_RAS_INT /*[NGKI3939]*/ 561 542 562 543 ER … … 567 548 568 549 LOG_RAS_INT_ENTER(intno); 569 CHECK_PAR(VALID_INTNO_RASINT(intno)); /* ï¼»NGKI3933][NGKI3942ï¼½*/550 CHECK_PAR(VALID_INTNO_RASINT(intno)); /*[NGKI3933][NGKI3942]*/ 570 551 571 552 locked = sense_lock(); … … 574 555 } 575 556 if (check_intno_cfg(intno) && check_intno_raise(intno)) { 576 raise_int(intno); /* ï¼»NGKI3936ï¼½*/557 raise_int(intno); /*[NGKI3936]*/ 577 558 ercd = E_OK; 578 559 } 579 560 else { 580 ercd = E_OBJ; /* ï¼»NGKI3935][NGKI3941ï¼½*/561 ercd = E_OBJ; /*[NGKI3935][NGKI3941]*/ 581 562 } 582 563 if (!locked) { … … 593 574 594 575 /* 595 * å²è¾¼ã¿è¦æ±ã®ãã§ãã¯ï¼»NGKI3944ï¼½576 * 割込み要求のチェック[NGKI3944] 596 577 */ 597 578 #ifdef TOPPERS_prb_int 598 #ifdef TOPPERS_SUPPORT_PRB_INT /* ï¼»NGKI3951ï¼½*/579 #ifdef TOPPERS_SUPPORT_PRB_INT /*[NGKI3951]*/ 599 580 600 581 ER_BOOL … … 605 586 606 587 LOG_PRB_INT_ENTER(intno); 607 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /* ï¼»NGKI3945][NGKI3952ï¼½*/588 CHECK_PAR(VALID_INTNO_PRBINT(intno)); /*[NGKI3945][NGKI3952]*/ 608 589 609 590 locked = sense_lock(); … … 612 593 } 613 594 if (check_intno_cfg(intno)) { 614 ercd = (ER_BOOL) probe_int(intno); /* ï¼»NGKI3948ï¼½*/615 } 616 else { 617 ercd = E_OBJ; /* ï¼»NGKI3947ï¼½*/595 ercd = (ER_BOOL) probe_int(intno); /*[NGKI3948]*/ 596 } 597 else { 598 ercd = E_OBJ; /*[NGKI3947]*/ 618 599 } 619 600 if (!locked) { … … 630 611 631 612 /* 632 * å²è¾¼ã¿åªå 633 度ãã¹ã¯ã®å¤æ´ï¼»NGKI3107ï¼½ 613 * 割込み優先度マスクの変更[NGKI3107] 634 614 */ 635 615 #ifdef TOPPERS_chg_ipm … … 641 621 642 622 LOG_CHG_IPM_ENTER(intpri); 643 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3108][NGKI3109ï¼½*/644 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /* ï¼»NGKI3113][NGKI3114ï¼½*/623 CHECK_TSKCTX_UNL(); /*[NGKI3108][NGKI3109]*/ 624 CHECK_PAR(VALID_INTPRI_CHGIPM(intpri)); /*[NGKI3113][NGKI3114]*/ 645 625 646 626 lock_cpu(); 647 t_set_ipm(intpri); /* ï¼»NGKI3111ï¼½*/627 t_set_ipm(intpri); /*[NGKI3111]*/ 648 628 if (intpri == TIPM_ENAALL && enadsp) { 649 629 dspflg = true; … … 681 661 682 662 /* 683 * å²è¾¼ã¿åªå 684 度ãã¹ã¯ã®åç 685 §ï¼»NGKI3115ï¼½ 663 * 割込み優先度マスクの参照[NGKI3115] 686 664 */ 687 665 #ifdef TOPPERS_get_ipm … … 693 671 694 672 LOG_GET_IPM_ENTER(p_intpri); 695 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3116][NGKI3117ï¼½*/673 CHECK_TSKCTX_UNL(); /*[NGKI3116][NGKI3117]*/ 696 674 697 675 lock_cpu(); 698 *p_intpri = t_get_ipm(); /* ï¼»NGKI3120ï¼½*/676 *p_intpri = t_get_ipm(); /*[NGKI3120]*/ 699 677 ercd = E_OK; 700 678 unlock_cpu(); -
asp3_gr_sakura/trunk/kernel/interrupt.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å²è¾¼ã¿ç®¡çæ©è½44 * 割込み管理機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åæåãããã¯54 * 割込みサービスルーチン初期化ブロック 70 55 */ 71 56 typedef struct isr_initialization_block { 72 ATR isratr; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å±æ§ */ 73 intptr_t exinf; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®æ¡å¼µæ 74 å ± */ 75 QUEUE *p_isr_queue; /* ç»é²å 76 å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ */ 77 ISR isr; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å 78 é çªå° */ 79 PRI isrpri; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åªå 80 度 */ 57 ATR isratr; /* 割込みサービスルーチン属性 */ 58 intptr_t exinf; /* 割込みサービスルーチンの拡張情報 */ 59 QUEUE *p_isr_queue; /* 登録先割込みサービスルーチン呼出しキュー */ 60 ISR isr; /* 割込みサービスルーチンの先頭番地 */ 61 PRI isrpri; /* 割込みサービスルーチン優先度 */ 81 62 } ISRINIB; 82 63 83 64 /* 84 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯65 * 割込みサービスルーチン管理ブロック 85 66 */ 86 67 typedef struct isr_control_block { 87 QUEUE isr_queue; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼*/88 const ISRINIB *p_isrinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿*/68 QUEUE isr_queue; /* 割込みサービスルーチン呼出しキュー */ 69 const ISRINIB *p_isrinib; /* 初期化ブロックへのポインタ */ 89 70 } ISRCB; 90 71 91 72 /* 92 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ãæ¤ç´¢ããããã®ãã¼ã¿æ§é73 * 割込みサービスルーチン呼出しキューを検索するためのデータ構造 93 74 */ 94 75 typedef struct { 95 INTNO intno; /* å²è¾¼ã¿çªå·*/96 QUEUE *p_isr_queue; /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼*/76 INTNO intno; /* 割込み番号 */ 77 QUEUE *p_isr_queue; /* 割込みサービスルーチン呼出しキュー */ 97 78 } ISR_ENTRY; 98 79 99 80 /* 100 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ã®ã¨ã³ããªæ°ï¼kernel_cfg.cï¼81 * 割込みサービスルーチン呼出しキューのエントリ数(kernel_cfg.c) 101 82 */ 102 83 extern const uint_t tnum_isr_queue; 103 84 104 85 /* 105 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ãªã¹ãï¼kernel_cfg.cï¼86 * 割込みサービスルーチン呼出しキューリスト(kernel_cfg.c) 106 87 */ 107 88 extern const ISR_ENTRY isr_queue_list[]; 108 89 109 90 /* 110 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³å¼åºããã¥ã¼ã®ã¨ãªã¢ï¼kernel_cfg.cï¼91 * 割込みサービスルーチン呼出しキューのエリア(kernel_cfg.c) 111 92 */ 112 93 extern QUEUE isr_queue_table[]; 113 94 114 95 /* 115 * 使ç¨ãã¦ããªãå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ã®ãªã¹ã96 * 使用していない割込みサービスルーチン管理ブロックのリスト 116 97 */ 117 98 extern QUEUE free_isrcb; 118 99 119 100 /* 120 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDã®æ大å¤ï¼kernel_cfg.cï¼101 * 割込みサービスルーチンIDの最大値(kernel_cfg.c) 121 102 */ 122 103 extern const ID tmax_isrid; … … 124 105 125 106 /* 126 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼107 * 割込みサービスルーチン初期化ブロックのエリア(kernel_cfg.c) 127 108 */ 128 109 extern const ISRINIB isrinib_table[]; … … 130 111 131 112 /* 132 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³çæé åºãã¼ãã«ï¼kernel_cfg.cï¼113 * 割込みサービスルーチン生成順序テーブル(kernel_cfg.c) 133 114 */ 134 115 extern const ID isrorder_table[]; 135 116 136 117 /* 137 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼118 * 割込みサービスルーチン管理ブロックのエリア(kernel_cfg.c) 138 119 */ 139 120 extern ISRCB isrcb_table[]; 140 121 141 122 /* 142 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç®¡çãããã¯ããå²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDãå143 * ãåºãããã®ãã¯ã123 * 割込みサービスルーチン管理ブロックから割込みサービスルーチンIDを取 124 * り出すためのマクロ 144 125 */ 145 126 #define ISRID(p_isrcb) ((ID)(((p_isrcb) - isrcb_table) + TMIN_ISRID)) 146 127 147 128 /* 148 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³æ©è½ã®åæå129 * 割込みサービスルーチン機能の初期化 149 130 */ 150 131 extern void initialize_isr(void); 151 132 152 133 /* 153 * å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å¼åºã134 * 割込みサービスルーチンの呼出し 154 135 */ 155 136 extern void call_isr(QUEUE *p_isr_queue); … … 158 139 159 140 /* 160 * å²è¾¼ã¿ãã³ãã©åæåãããã¯141 * 割込みハンドラ初期化ブロック 161 142 */ 162 143 typedef struct interrupt_handler_initialization_block { 163 INHNO inhno; /* å²è¾¼ã¿ãã³ãã©çªå· */ 164 ATR inhatr; /* å²è¾¼ã¿ãã³ãã©å±æ§ */ 165 FP int_entry; /* å²è¾¼ã¿ãã³ãã©ã®åºå 166 ¥å£å¦çã®çªå° */ 144 INHNO inhno; /* 割込みハンドラ番号 */ 145 ATR inhatr; /* 割込みハンドラ属性 */ 146 FP int_entry; /* 割込みハンドラの出入口処理の番地 */ 167 147 } INHINIB; 168 148 169 149 /* 170 * å®ç¾©ããå²è¾¼ã¿ãã³ãã©çªå·ã®æ°ï¼kernel_cfg.cï¼150 * 定義する割込みハンドラ番号の数(kernel_cfg.c) 171 151 */ 172 152 extern const uint_t tnum_def_inhno; 173 153 174 154 /* 175 * å²è¾¼ã¿ãã³ãã©åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼155 * 割込みハンドラ初期化ブロックのエリア(kernel_cfg.c) 176 156 */ 177 157 extern const INHINIB inhinib_table[]; … … 182 162 183 163 /* 184 * å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯164 * 割込み要求ライン初期化ブロック 185 165 */ 186 166 typedef struct interrupt_request_initialization_block { 187 INTNO intno; /* å²è¾¼ã¿çªå· */ 188 ATR intatr; /* å²è¾¼ã¿å±æ§ */ 189 PRI intpri; /* å²è¾¼ã¿åªå 190 度 */ 167 INTNO intno; /* 割込み番号 */ 168 ATR intatr; /* 割込み属性 */ 169 PRI intpri; /* 割込み優先度 */ 191 170 } INTINIB; 192 171 193 172 /* 194 * è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°ï¼kernel_cfg.cï¼173 * 設定する割込み要求ラインの数(kernel_cfg.c) 195 174 */ 196 175 extern const uint_t tnum_cfg_intno; 197 176 198 177 /* 199 * å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼178 * 割込み要求ライン初期化ブロックのエリア(kernel_cfg.c) 200 179 */ 201 180 extern const INTINIB intinib_table[]; … … 204 183 205 184 /* 206 * å²è¾¼ã¿ç®¡çæ©è½ã®åæå185 * 割込み管理機能の初期化 207 186 */ 208 187 extern void initialize_interrupt(void); -
asp3_gr_sakura/trunk/kernel/interrupt.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 47 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 54 # 55 # $Id: interrupt.trb 678 2016-03-06 02:36:09Z ertl-hiro $ 56 # 57 58 # 59 # å²è¾¼ã¿ç®¡çæ©è½ã®çæã¹ã¯ãªãã 60 # 61 62 # 63 # kernel_cfg.cã®çæ 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 # の責任を負わない. 39 # 40 # $Id$ 41 # 42 43 # 44 # 割込み管理機能の生成スクリプト 45 # 46 47 # 48 # kernel_cfg.cの生成 64 49 # 65 50 $kernelCfgC.comment_header("Interrupt Management Functions") 66 51 67 52 # 68 # CRE_ISR ã§ä½¿ç¨ã§ããå²è¾¼ã¿çªå·ã¨ããã«å¯¾å¿ããå²è¾¼ã¿ãã³ãã©çªå·ã®ã69 # ãã©ã«ãå®ç¾©53 # CRE_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号のデ 54 # フォルト定義 70 55 # 71 56 if $INTNO_CREISR_VALID.nil? … … 77 62 78 63 # 79 # CFG_INTã§ä½¿ç¨ã§ããå²è¾¼ã¿åªå 80 度ã®ããã©ã«ãå®ç¾© 64 # CFG_INTで使用できる割込み優先度のデフォルト定義 81 65 # 82 66 if $INTPRI_CFGINT_VALID.nil? … … 85 69 86 70 # 87 # å²è¾¼ã¿çªå·ã¨å²è¾¼ã¿ãã³ãã©çªå·ã®å¤æãã¼ãã«ã®ä½æ71 # 割込み番号と割込みハンドラ番号の変換テーブルの作成 88 72 # 89 73 if $INTNO_CREISR_VALID.length != $INHNO_CREISR_VALID.length … … 101 85 102 86 # 103 # å²è¾¼ã¿è¦æ±ã©ã¤ã³ã«é¢ããã¨ã©ã¼ãã§ãã¯87 # 割込み要求ラインに関するエラーチェック 104 88 # 105 89 $cfgData[:CFG_INT].each do |key, params| 106 # intno ãå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI2972ï¼½90 # intnoが割込み番号として正しくない場合(E_PAR)[NGKI2972] 107 91 if $INTNO_VALID.index(params[:intno]).nil? 108 92 error_illegal("E_PAR", params, :intno) 109 93 end 110 94 111 # intatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2969ï¼½112 # ï¼TA_ENAINTï¼TA_EDGEï¼TARGET_INTATR以å¤ã®ããããã»ããããã¦ããå ´åï¼95 # intatrが無効の場合(E_RSATR)[NGKI2969] 96 #(TA_ENAINT,TA_EDGE,TARGET_INTATR以外のビットがセットされている場合) 113 97 if (params[:intatr] & ~($TA_ENAINT|$TA_EDGE|$TARGET_INTATR)) != 0 114 98 error_illegal_sym("E_RSATR", params, :intatr, :intno) 115 99 end 116 100 117 # intpriãCFG_INTã«å¯¾ããå²è¾¼ã¿åªå 118 度ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ 119 # ï¼»NGKI2973ï¼½ 101 # intpriがCFG_INTに対する割込み優先度として正しくない場合(E_PAR) 102 # [NGKI2973] 120 103 if $INTPRI_CFGINT_VALID.index(params[:intpri]).nil? 121 104 error_illegal_sym("E_OBJ", params, :intpri, :intno) 122 105 end 123 106 124 # ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIã125 # ããå°ããå¤ãæå®ãããªãã£ãå ´åï¼E_OBJï¼ï¼»NGKI2983ï¼½107 # カーネル管理外に固定されているintnoに対して,intpriにTMIN_INTPRIよ 108 # りも小さい値が指定されなかった場合(E_OBJ)[NGKI2983] 126 109 if !$INTNO_FIX_NONKERNEL.nil? 127 110 if !$INTNO_FIX_NONKERNEL.index(params[:intno]).nil? … … 133 116 end 134 117 135 # ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããintnoã«å¯¾ãã¦ï¼intpriã«TMIN_INTPRIãã136 # ãå°ããå¤ãæå®ãããå ´åï¼E_OBJï¼ï¼»NGKI2984ï¼½118 # カーネル管理に固定されているintnoに対して,intpriにTMIN_INTPRIより 119 # も小さい値が指定された場合(E_OBJ)[NGKI2984] 137 120 if !$INTNO_FIX_KERNEL.nil? 138 121 if !$INTNO_FIX_KERNEL.index(params[:intno]).nil? … … 146 129 147 130 # 148 # å²è¾¼ã¿ãã³ãã©ã«é¢ããã¨ã©ã¼ãã§ãã¯131 # 割込みハンドラに関するエラーチェック 149 132 # 150 133 $cfgData[:DEF_INH].each do |key, params| 151 # inhno ãå²è¾¼ã¿ãã³ãã©çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3055ï¼½134 # inhnoが割込みハンドラ番号として正しくない場合(E_PAR)[NGKI3055] 152 135 if $INHNO_VALID.index(params[:inhno]).nil? 153 136 error_illegal("E_PAR", params, :inhno) 154 137 end 155 138 156 # inhatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3052ï¼½157 # ï¼TARGET_INHATR以å¤ã®ããããã»ããããã¦ããå ´åï¼139 # inhatrが無効の場合(E_RSATR)[NGKI3052] 140 #(TARGET_INHATR以外のビットがセットされている場合) 158 141 if (params[:inhatr] & ~($TARGET_INHATR)) != 0 159 142 error_illegal_sym("E_RSATR", params, :inhatr, :inhno) 160 143 end 161 144 162 # ã«ã¼ãã«ç®¡çå¤ã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELã163 # æå®ããã¦ããªãå ´åï¼E_RSATRï¼ï¼»NGKI3067ï¼½145 # カーネル管理外に固定されているinhnoに対して,inhatrにTA_NONKERNELが 146 # 指定されていない場合(E_RSATR)[NGKI3067] 164 147 if !$INHNO_FIX_NONKERNEL.nil? 165 148 if !$INHNO_FIX_NONKERNEL.index(params[:inhno]).nil? … … 171 154 end 172 155 173 # ã«ã¼ãã«ç®¡çã«åºå®ããã¦ããinhnoã«å¯¾ãã¦ï¼inhatrã«TA_NONKERNELãæ174 # å®ããã¦ããå ´åï¼E_RSATRï¼ï¼»NGKI3068ï¼½156 # カーネル管理に固定されているinhnoに対して,inhatrにTA_NONKERNELが指 157 # 定されている場合(E_RSATR)[NGKI3068] 175 158 if !$INHNO_FIX_KERNEL.nil? 176 159 if !$INHNO_FIX_KERNEL.index(params[:inhno]).nil? … … 185 168 intnoVal = $toIntnoVal[params[:inhno].val] 186 169 187 # inhno ã«å¯¾å¿ããintnoã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ï¼»NGKI3062ï¼½170 # inhnoに対応するintnoに対するCFG_INTがない場合(E_OBJ)[NGKI3062] 188 171 if !$cfgData[:CFG_INT].has_key?(intnoVal) 189 172 error_ercd("E_OBJ", params, "intno `#{intnoVal}' corresponding to " \ … … 192 175 intnoParams = $cfgData[:CFG_INT][intnoVal] 193 176 if (params[:inhatr] & $TA_NONKERNEL) == 0 194 # inhatrã«TA_NONKERNELãæå®ããã¦ãããï¼inhnoã«å¯¾å¿ããintno 195 # ã«å¯¾ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 196 度ãTMIN_INTPRIãããå° 197 # ããå ´åï¼E_OBJï¼ï¼»NGKI3065ï¼½ 177 # inhatrにTA_NONKERNELが指定されておらず,inhnoに対応するintno 178 # に対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも小 179 # さい場合(E_OBJ)[NGKI3065] 198 180 if intnoParams[:intpri] < $TMIN_INTPRI 199 181 error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \ … … 201 183 end 202 184 else 203 # inhatrã«TA_NONKERNELãæå®ããã¦ããï¼inhnoã«å¯¾å¿ããintnoã« 204 # 対ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 205 度ãTMIN_INTPRI以ä¸ã§ãã 206 # å ´åï¼E_OBJï¼ï¼»NGKI3066ï¼½ 185 # inhatrにTA_NONKERNELが指定されており,inhnoに対応するintnoに 186 # 対してCFG_INTで設定された割込み優先度がTMIN_INTPRI以上である 187 # 場合(E_OBJ)[NGKI3066] 207 188 if intnoParams[:intpri] >= $TMIN_INTPRI 208 189 error_ercd("E_OBJ", params, "intpri `#{intnoParams[:intpri]}' " \ … … 215 196 216 197 # 217 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ã«é¢ããã¨ã©ã¼ãã§ãã¯198 # 割込みサービスルーチン(ISR)に関するエラーチェック 218 199 # 219 200 $cfgData[:CRE_ISR].sort.each do |key, params| 220 # isratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2998ï¼½221 # ï¼TARGET_ISRATR以å¤ã®ããããã»ããããã¦ããå ´åï¼201 # isratrが無効の場合(E_RSATR)[NGKI2998] 202 #(TARGET_ISRATR以外のビットがセットされている場合) 222 203 if (params[:isratr] & ~($TARGET_ISRATR)) != 0 223 204 error_illegal("E_RSATR", params, "isratr") 224 205 end 225 206 226 # intno ãCRE_ISRã«å¯¾ããå²è¾¼ã¿çªå·ã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼227 # ï¼»NGKI3003ï¼½207 # intnoがCRE_ISRに対する割込み番号として正しくない場合(E_PAR) 208 # [NGKI3003] 228 209 if $INTNO_CREISR_VALID.index(params[:intno]).nil? 229 210 error_illegal("E_PAR", params, "intno") 230 211 end 231 212 232 # (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI) ã§ãªãå ´åï¼E_PARï¼233 # ï¼»NGKI3005ï¼½213 # (TMIN_ISRPRI <= isrpri && isrpri <= TMAX_ISRPRI)でない場合(E_PAR) 214 # [NGKI3005] 234 215 if !($TMIN_ISRPRI <= params[:isrpri] && params[:isrpri] <= $TMAX_ISRPRI) 235 216 error_illegal("E_PAR", params, "isrpri") … … 238 219 239 220 $INTNO_CREISR_VALID.each do |intnoVal| 240 # å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRã®ãªã¹ãã®ä½æ221 # 割込み番号intnoに対して登録されたISRのリストの作成 241 222 isrParamsList = [] 242 223 $cfgData[:CRE_ISR].sort.each do |key, params| … … 246 227 end 247 228 248 # å²è¾¼ã¿çªå·intnoã«å¯¾ãã¦ç»é²ãããISRãåå¨ããå ´å229 # 割込み番号intnoに対して登録されたISRが存在する場合 249 230 if isrParamsList.size > 0 250 231 inhnoVal = $toInhnoVal[intnoVal] 251 232 252 # intno ã«å¯¾å¿ããinhnoã«å¯¾ãã¦DEF_INHãããå ´åï¼E_OBJï¼ï¼»NGKI3013ï¼½233 # intnoに対応するinhnoに対してDEF_INHがある場合(E_OBJ)[NGKI3013] 253 234 if $cfgData[:DEF_INH].has_key?(inhnoVal) 254 235 inhnoParams = $cfgData[:DEF_INH][inhnoVal] … … 257 238 end 258 239 259 # intno ã«å¯¾ããCFG_INTããªãå ´åï¼E_OBJï¼ï¼»NGKI3012ï¼½240 # intnoに対するCFG_INTがない場合(E_OBJ)[NGKI3012] 260 241 if !$cfgData[:CFG_INT].has_key?(intnoVal) 261 242 error_ercd("E_OBJ", isrParamsList[0], "%%intno in %apiname " \ … … 264 245 intnoParams = $cfgData[:CFG_INT][intnoVal] 265 246 266 # intnoã«å¯¾ãã¦CFG_INTã§è¨å®ãããå²è¾¼ã¿åªå 267 度ãTMIN_INTPRIããã 268 # å°ããå ´åï¼E_OBJï¼ï¼»NGKI3014ï¼½ 247 # intnoに対してCFG_INTで設定された割込み優先度がTMIN_INTPRIよりも 248 # 小さい場合(E_OBJ)[NGKI3014] 269 249 if intnoParams[:intpri] < $TMIN_INTPRI 270 250 error_ercd("E_OBJ", isrParamsList[0], … … 277 257 278 258 # 279 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼ç®¡çã®ãã¼ã¿æ§é259 # 割込みサービスルーチン(ISR)管理のデータ構造 280 260 # 281 261 intnoIsrList = [] … … 313 293 314 294 # 315 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ï¼ISRï¼å¼åºãã®ããã®å²è¾¼ã¿ãã³ãã©295 # 割込みサービスルーチン(ISR)呼出しのための割込みハンドラ 316 296 # 317 297 intnoIsrList.each do |intnoVal| 318 298 inhnoVal = $toInhnoVal[intnoVal] 319 299 320 # 次ã®DEF_INHã«ç¸å½ãããã¼ã¿ãçæ300 # 次のDEF_INHに相当するデータを生成 321 301 # DEF_INH(inhno, { TA_NULL, _kernel_inthdr_<intno> } ); 322 302 $cfgData[:DEF_INH][inhnoVal] = { … … 326 306 } 327 307 328 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ç¨ã®å²è¾¼ã¿ãã³ãã©308 # 割込みサービスルーチン用の割込みハンドラ 329 309 $kernelCfgC.add("void") 330 310 $kernelCfgC.add("_kernel_inthdr_#{intnoVal}(void)") … … 335 315 336 316 # 337 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ããä¸è¬çãªæ 338 å ±ã®çæ 317 # 割込みサービスルーチンに関する一般的な情報の生成 339 318 # 340 319 class IsrObject < KernelObject … … 344 323 345 324 def prepare(key, params) 346 # ã¨ã©ã¼ãã§ãã¯ã¯å®æ½æ¸ã¿ãªã®ã§ï¼ããã§ã®å¦çã¯ä¸è¦325 # エラーチェックは実施済みなので,ここでの処理は不要 347 326 end 348 327 … … 355 334 IsrObject.new.generate() 356 335 357 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³çæé åºãã¼ãã«ã®çæ336 # 割込みサービスルーチン生成順序テーブルの生成 358 337 $kernelCfgC.add("const ID _kernel_isrorder_table[TNUM_SISRID] = { ") 359 338 $kernelCfgC.append("\t") … … 366 345 367 346 # 368 # å²è¾¼ã¿ãã³ãã©ã®ããã®æ¨æºçãªåæåæ 369 å ±ã®çæ 347 # 割込みハンドラのための標準的な初期化情報の生成 370 348 # 371 349 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INHINIB_TABLE 372 350 # 373 # å®ç¾©ããå²è¾¼ã¿ãã³ãã©ã®æ°351 # 定義する割込みハンドラの数 374 352 # 375 353 $kernelCfgC.add(<<EOS) … … 380 358 if $cfgData[:DEF_INH].size != 0 381 359 # 382 # å²è¾¼ã¿ãã³ãã©ã®ã¨ã³ããª360 # 割込みハンドラのエントリ 383 361 # 384 362 $cfgData[:DEF_INH].each do |key, params| … … 391 369 392 370 # 393 # å²è¾¼ã¿ãã³ãã©åæåãããã¯371 # 割込みハンドラ初期化ブロック 394 372 # 395 373 $kernelCfgC.add("const INHINIB _kernel_inhinib_table[TNUM_DEF_INHNO] = {") … … 413 391 414 392 # 415 # å²è¾¼ã¿è¦æ±ã©ã¤ã³ã®ããã®æ¨æºçãªåæåæ 416 å ±ã®çæ 393 # 割込み要求ラインのための標準的な初期化情報の生成 417 394 # 418 395 if !$OMIT_INITIALIZE_INTERRUPT || $USE_INTINIB_TABLE 419 396 # 420 # è¨å®ããå²è¾¼ã¿è¦æ±ã©ã¤ã³ã®æ°397 # 設定する割込み要求ラインの数 421 398 # 422 399 $kernelCfgC.add(<<EOS) … … 426 403 427 404 # 428 # å²è¾¼ã¿è¦æ±ã©ã¤ã³åæåãããã¯405 # 割込み要求ライン初期化ブロック 429 406 # 430 407 if $cfgData[:CFG_INT].size != 0 … … 444 421 445 422 # 446 # å²è¾¼ã¿ç®¡çæ©è½åæåé¢æ°ã®è¿½å423 # 割込み管理機能初期化関数の追加 447 424 # 448 425 $initializeFunctions.push("_kernel_initialize_interrupt();") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/kernel.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : kernel.trb 716 2016-03-31 06:16:23Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®çæã¹ã¯ãªãã60 # 61 62 # 63 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®44 # コンフィギュレータのパス2の生成スクリプト 45 # 46 47 # 48 # タイムスタンプファイルの指定 64 49 # 65 50 $timeStampFileName = "kernel_cfg.timestamp" 66 51 67 52 # 68 # kernel_cfg.hã®å 69 é é¨åã®çæ 53 # kernel_cfg.hの先頭部分の生成 70 54 # 71 55 $kernelCfgH = GenFile.new("kernel_cfg.h") … … 77 61 78 62 # 79 # kernel_cfg.cã®å 80 é é¨åã®çæ 63 # kernel_cfg.cの先頭部分の生成 81 64 # 82 65 $kernelCfgC = GenFile.new("kernel_cfg.c") … … 92 75 93 76 # 94 # ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼77 # インクルードディレクティブ(#include) 95 78 # 96 79 $kernelCfgC.comment_header("Include Directives") … … 101 84 102 85 # 103 # ã¹ã¿ãã¯é åã®ç¢ºä¿é¢æ° 104 # 105 # ã¹ã¿ãã¯é åã®å®ç¾©åã¨ï¼ã¹ã¿ãã¯é åã®ãµã¤ãºè¨è¿°ãé 106 åã§è¿ãï¼ 86 # スタック領域の確保関数 87 # 88 # スタック領域の定義分と,スタック領域のサイズ記述を配列で返す. 107 89 # 108 90 unless defined? AllocStack() 109 91 def AllocStack(stack, size) 110 # 大ããæ¹ã«ä¸¸ãããµã¤ãºã§ç¢ºä¿ããï¼»NGKI1050][NGKI3220ï¼½92 # 大きい方に丸めたサイズで確保する[NGKI1050][NGKI3220] 111 93 $kernelCfgC.add("static STK_T #{stack}[COUNT_STK_T(#{size})];") 112 94 return("ROUND_STK_T(#{size})") … … 115 97 116 98 # 117 # ã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããæ 118 å ±ã®çæï¼ä»®æ³ã¯ã©ã¹ï¼ 99 # カーネルオブジェクトに関する情報の生成(仮想クラス) 119 100 # 120 101 class KernelObject … … 131 112 132 113 def generate() 133 # AID_@OBJ ã®å¦ç114 # AID_@OBJの処理 134 115 numAutoObjid = 0 135 116 $cfgData["AID_#{@OBJ}".to_sym].each do |key, params| … … 138 119 numObjid = $cfgData[@api].size + numAutoObjid 139 120 140 # kernel_cfg.h ã®çæ121 # kernel_cfg.hの生成 141 122 $kernelCfgH.add("#define TNUM_#{@OBJ}ID\t#{numObjid}") 142 123 143 # ãªãã¸ã§ã¯ãã®IDçªå·ã®ãã¯ãå®ç¾©ã®çæ124 # オブジェクトのID番号のマクロ定義の生成 144 125 $cfgData[@api].sort.each do |key, params| 145 126 $kernelCfgH.add("#define #{params[@objid]}\t#{params[@objid].val}") … … 147 128 $kernelCfgH.add() 148 129 149 # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°130 # オブジェクトのID番号を保持する変数 150 131 if $USE_EXTERNAL_ID 151 132 $cfgData[@api].sort.each do |key, params| … … 156 137 end 157 138 158 # éçã«çæããããªãã¸ã§ã¯ãã®æ°139 # 静的に生成されたオブジェクトの数 159 140 $kernelCfgC.add("#define TNUM_S#{@OBJ}ID\t#{$cfgData[@api].size}") 160 141 161 # ãªãã¸ã§ã¯ãIDçªå·ã®æ大å¤142 # オブジェクトID番号の最大値 162 143 $kernelCfgC.add("const ID _kernel_tmax_#{@obj}id" \ 163 144 " = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);") … … 165 146 " = (TMIN_#{@OBJ}ID + TNUM_S#{@OBJ}ID - 1);") 166 147 167 # ãã¼ã¿æ§é148 # データ構造 168 149 if $cfgData[@api].size > 0 169 # äºåæºåï¼ã¨ã©ã¼ãã§ãã¯ï¼ã¡ã¢ãªé åã®çæï¼150 # 事前準備(エラーチェック,メモリ領域の生成) 170 151 $cfgData[@api].sort.each do |key, params| 171 152 prepare(key, params) 172 153 end 173 154 174 # ãªãã¸ã§ã¯ãå 175 ¨ä½ã«å¯¾ãã¦å¿ 176 è¦ãªã¡ã¢ãªé åã®çæï¼ãªãã·ã§ã³ï¼ 155 # オブジェクト全体に対して必要なメモリ領域の生成(オプション) 177 156 if respond_to?(:generateData) 178 157 generateData() 179 158 end 180 159 181 # ãªãã¸ã§ã¯ãåæåãããã¯ã®çæ160 # オブジェクト初期化ブロックの生成 182 161 $kernelCfgC.add("const #{@OBJ_S}INIB _kernel_#{@obj_s}inib_table" \ 183 162 "[TNUM_S#{@OBJ}ID] = {") … … 193 172 end 194 173 195 # åççæãªãã¸ã§ã¯ãç¨ã®ãªãã¸ã§ã¯ãåæåãããã¯174 # 動的生成オブジェクト用のオブジェクト初期化ブロック 196 175 @inibList.each do |type, array| 197 176 if numAutoObjid > 0 … … 203 182 204 183 if numObjid > 0 205 # ãªãã¸ã§ã¯ã管çãããã¯ã®çæ184 # オブジェクト管理ブロックの生成 206 185 $kernelCfgC.add2("#{@OBJ_S}CB _kernel_#{@obj_s}cb_table" \ 207 186 "[TNUM_#{@OBJ}ID];") 208 187 209 # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å188 # オブジェクト初期化関数の追加 210 189 $initializeFunctions.push("_kernel_initialize_#{@object}();") 211 190 else … … 217 196 218 197 # 219 # éç¥ãã³ãã©ã®çæé¢æ°198 # 通知ハンドラの生成関数 220 199 # 221 200 def generateNotifyHandler(key, params, objid) 222 # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´201 # パラメータを変数に格納 223 202 nfymode = params[:nfymode] 224 203 nfymode1 = nfymode & 0x0f … … 227 206 par2 = params[:par2] 228 207 229 # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ£å¦ç208 # 通知処理のパラメータ数による補正処理 230 209 if nfymode == $TNFY_HANDLER || nfymode1 == $TNFY_SETVAR \ 231 210 || nfymode1 == $TNFY_SETFLG \ 232 211 || nfymode1 == $TNFY_SNDDTQ 233 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å212 # 通知処理のパラメータが2つの場合 234 213 numpar = 2 235 214 epar1 = params[:par3] 236 215 epar2 = params[:par4] 237 216 else 238 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å217 # 通知処理のパラメータが1つの場合 239 218 numpar = 1 240 219 epar1 = params[:par2] … … 242 221 end 243 222 244 # ãã©ã¡ã¼ã¿æ°ã®ãã§ãã¯223 # パラメータ数のチェック 245 224 if (numpar == 2 && par2.nil?) || (nfymode2 != 0 && epar1.nil?) \ 246 225 || (nfymode2 == $TENFY_SETFLG && epar2.nil?) 247 # ãã©ã¡ã¼ã¿ã足ããªãå ´å226 # パラメータが足りない場合 248 227 error_api(params, "too few parameters for nfymode `#{nfymode}' " \ 249 228 "in %apiname of %#{objid}") 250 229 elsif (nfymode2 == 0 && !epar1.nil?) \ 251 230 || (nfymode2 != $TENFY_SETFLG && !epar2.nil?) 252 # ãã©ã¡ã¼ã¿ãå¤ãããå ´å231 # パラメータが多すぎる場合 253 232 error_api(params, "too many parameters for nfymode `#{nfymode}' " \ 254 233 "in %apiname of %#{objid}") 255 234 elsif nfymode == $TNFY_HANDLER 256 # ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å¼åºã235 # タイムイベントハンドラの呼出し 257 236 funcname = "(NFYHDR)(#{par2})" 258 237 else 259 # éç¥ãã³ãã©ã®é¢æ°å238 # 通知ハンドラの関数名 260 239 funcname = "_kernel_nfyhdr_#{params[objid]}" 261 240 262 # ã¨ã©ã¼éç¥ã®ããã®å¤æ°ã®ã¢ãã¬ã¹ã¨ãªãã¸ã§ã¯ãIDãæ ¼ç´ãã 263 # å¤æ°ã®çæï¼ã¨ã©ã¼ãã§ãã¯ã®ããã«å¿ 264 è¦ï¼ 241 # エラー通知のための変数のアドレスとオブジェクトIDを格納する 242 # 変数の生成(エラーチェックのために必要) 265 243 if nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR 266 244 $kernelCfgC.add2("intptr_t *const #{funcname}_p_evar =" \ … … 276 254 end 277 255 278 # é¢æ°ã®å 279 é é¨åã®çæ 256 # 関数の先頭部分の生成 280 257 $kernelCfgC.add("static void") 281 258 $kernelCfgC.add("#{funcname}(intptr_t exinf)") … … 283 260 284 261 if nfymode2 == 0 285 # ã¨ã©ã¼éç¥ããªãå ´å262 # エラー通知がない場合 286 263 errorCode = "(void) " 287 264 else 288 # ã¨ã©ã¼éç¥ãããå ´å265 # エラー通知がある場合 289 266 $kernelCfgC.add2("\tER\tercd;") 290 267 errorCode = "ercd = " 291 268 end 292 269 293 # ã¤ãã³ãéç¥å¦çã®å¦ç270 # イベント通知処理の処理 294 271 if nfymode1 == $TNFY_SETVAR && nfymode2 == 0 295 # å¤æ°ã®è¨å®272 # 変数の設定 296 273 $kernelCfgC.add("\t*((intptr_t *) exinf) = (#{par2});") 297 274 elsif nfymode1 == $TNFY_INCVAR && nfymode2 == 0 298 # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã275 # 変数のインクリメント 299 276 $kernelCfgC.add("\t(void) loc_cpu();") 300 277 $kernelCfgC.add("\t*((intptr_t *) exinf) += 1;") 301 278 $kernelCfgC.add("\t(void) unl_cpu();") 302 279 elsif nfymode1 == $TNFY_ACTTSK 303 # ã¿ã¹ã¯ã®èµ·å280 # タスクの起動 304 281 $kernelCfgC.add("\t#{errorCode}act_tsk((ID) exinf);") 305 282 elsif nfymode1 == $TNFY_WUPTSK 306 # ã¿ã¹ã¯ã®èµ·åº283 # タスクの起床 307 284 $kernelCfgC.add("\t#{errorCode}wup_tsk((ID) exinf);") 308 285 elsif nfymode1 == $TNFY_SIGSEM 309 # ã»ããã©ã®è¿å´286 # セマフォの返却 310 287 $kernelCfgC.add("\t#{errorCode}sig_sem((ID) exinf);") 311 288 elsif nfymode1 == $TNFY_SETFLG 312 # ã¤ãã³ããã©ã°ã®ã»ãã289 # イベントフラグのセット 313 290 $kernelCfgC.add("\t#{errorCode}set_flg(((ID) exinf), #{par2});") 314 291 elsif nfymode1 == $TNFY_SNDDTQ 315 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡292 # データキューへの送信 316 293 $kernelCfgC.add("\t#{errorCode}psnd_dtq(((ID) exinf), #{par2});") 317 294 else … … 320 297 321 298 if nfymode2 != 0 322 # ã¨ã©ã¼éç¥å¦çã®å¦ç299 # エラー通知処理の処理 323 300 $kernelCfgC.add("\tif (ercd != E_OK) {") 324 301 325 302 326 303 if nfymode2 == $TENFY_SETVAR 327 # å¤æ°ã®è¨å®304 # 変数の設定 328 305 $kernelCfgC.add("\t\t*#{funcname}_p_evar = (intptr_t) ercd;") 329 306 elsif nfymode2 == $TENFY_INCVAR 330 # å¤æ°ã®ã¤ã³ã¯ãªã¡ã³ã307 # 変数のインクリメント 331 308 $kernelCfgC.add("\t\t(void) loc_cpu();") 332 309 $kernelCfgC.add("\t\t*#{funcname}_p_evar += 1;") 333 310 $kernelCfgC.add("\t\t(void) unl_cpu();") 334 311 elsif nfymode2 == $TENFY_ACTTSK 335 # ã¿ã¹ã¯ã®èµ·å312 # タスクの起動 336 313 $kernelCfgC.add("\t\t(void) act_tsk(#{funcname}_etskid);") 337 314 elsif nfymode2 == $TENFY_WUPTSK 338 # ã¿ã¹ã¯ã®èµ·åº315 # タスクの起床 339 316 $kernelCfgC.add("\t\t(void) wup_tsk(#{funcname}_etskid);") 340 317 elsif nfymode2 == $TENFY_SIGSEM 341 # ã»ããã©ã®è¿å´318 # セマフォの返却 342 319 $kernelCfgC.add("\t\t(void) sig_sem(#{funcname}_esemid);") 343 320 elsif nfymode2 == $TENFY_SETFLG 344 # ã¤ãã³ããã©ã°ã®ã»ãã321 # イベントフラグのセット 345 322 $kernelCfgC.add("\t\t(void) set_flg(#{funcname}_eflgid, #{epar2});") 346 323 elsif nfymode2 == $TENFY_SNDDTQ 347 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡324 # データキューへの送信 348 325 $kernelCfgC.add("\t\t(void) psnd_dtq(#{funcname}_edtqid," \ 349 326 " (intptr_t) ercd);") … … 354 331 end 355 332 356 # é¢æ°ã®æ«å°¾é¨åã®çæ333 # 関数の末尾部分の生成 357 334 $kernelCfgC.add2("}") 358 335 end … … 361 338 362 339 # 363 # åæ©è½ã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³340 # 各機能モジュールのコンフィギュレーション 364 341 # 365 342 $initializeFunctions = [] … … 378 355 379 356 # 380 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å357 # 非タスクコンテキスト用のスタック領域 381 358 # 382 359 $kernelCfgC.comment_header("Stack Area for Non-task Context") 383 360 384 361 if $cfgData[:DEF_ICS].size == 0 385 # DEF_ICS ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®362 # DEF_ICSがない場合のデフォルト値の設定 386 363 if $DEFAULT_ISTK.nil? 387 # ã¹ã¿ãã¯é åã®èªåå²ä»ã364 # スタック領域の自動割付け 388 365 istksz = AllocStack("_kernel_istack", "DEFAULT_ISTKSZ") 389 366 istk = "_kernel_istack" … … 393 370 end 394 371 else 395 # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼ï¼»NGKI3216ï¼½372 # 静的API「DEF_ICS」が複数ある(E_OBJ)[NGKI3216] 396 373 if $cfgData[:DEF_ICS].size > 1 397 374 error("E_OBJ: too many DEF_ICS") 398 375 end 399 376 400 # DEF_ICS ãããå ´åã®å¦ç377 # DEF_ICSがある場合の処理 401 378 params = $cfgData[:DEF_ICS][1] 402 379 403 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®380 # パラメータが省略された時のデフォルト値の設定 404 381 params[:istk] ||= "NULL" 405 382 406 # istksz ãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_ISTKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼407 # ãããå°ããå ´åï¼E_PARï¼ï¼»NGKI3254ï¼½383 # istkszがターゲット定義の最小値(TARGET_MIN_ISTKSZ,未定義の場合は1) 384 # よりも小さい場合(E_PAR)[NGKI3254] 408 385 if params[:istksz] < $TARGET_MIN_ISTKSZ 409 386 error_wrong("E_PAR", params, :istksz, "too small") … … 411 388 412 389 if params[:istk] == "NULL" 413 # ã¹ã¿ãã¯é åã®èªåå²ä»ã390 # スタック領域の自動割付け 414 391 istksz = AllocStack("_kernel_istack", params[:istksz]) 415 392 istk = "_kernel_istack" 416 393 else 417 # istksz ãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼E_PARï¼ï¼»NGKI3222ï¼½394 # istkszがスタック領域のサイズとして正しくない場合(E_PAR)[NGKI3222] 418 395 if (params[:istksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0 419 396 error_wrong("E_PAR", params, :istksz, "not aligned") … … 435 412 436 413 # 437 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé å414 # カーネルが割り付けるメモリ領域 438 415 # 439 416 $kernelCfgC.comment_header("Memory Area Allocated by Kernel") 440 417 441 418 if $cfgData[:DEF_KMM].size == 0 442 # DEF_KMM ããªãå ´åã®ããã©ã«ãå¤ã®è¨å®419 # DEF_KMMがない場合のデフォルト値の設定 443 420 kmmsz = "0" 444 421 kmm = "NULL" 445 422 else 446 # éçAPIãDEF_KMMããè¤æ°ããï¼E_OBJï¼423 # 静的API「DEF_KMM」が複数ある(E_OBJ) 447 424 if ($cfgData[:DEF_KMM].size > 1) 448 425 error("E_OBJ: too many DEF_KMM") 449 426 end 450 427 451 # DEF_KMM ãããå ´åã®å¦ç428 # DEF_KMMがある場合の処理 452 429 params = $cfgData[:DEF_KMM][1] 453 430 454 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®431 # パラメータが省略された時のデフォルト値の設定 455 432 params[:kmm] ||= "NULL" 456 433 457 # kmmsz ã0ã®å ´åï¼E_PARï¼434 # kmmszが0の場合(E_PAR) 458 435 if params[:kmmsz] == 0 459 436 error_wrong("E_PAR", params, :kmmsz, "zero") … … 461 438 462 439 if params[:kmm] == "NULL" 463 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®èªåå²ä»ã440 # カーネルが割り付けるメモリ領域の自動割付け 464 441 $kernelCfgC.add("static MB_T _kernel_memory" \ 465 442 "[TOPPERS_COUNT_SZ(#{params[:kmmsz]}, sizeof(MB_T))];") … … 467 444 kmm = "_kernel_memory" 468 445 else 469 # kmmsz ãã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´å470 # ï¼E_PARï¼446 # kmmszがカーネルが割り付けるメモリ領域のサイズとして正しくない場合 447 # (E_PAR) 471 448 if (params[:kmmsz] & ($CHECK_MB_ALIGN - 1)) != 0 472 449 error_wrong("E_PAR", params, :kmmsz, "not aligned") … … 484 461 485 462 # 486 # ã¿ã¤ã ã¤ãã³ã管ç463 # タイムイベント管理 487 464 # 488 465 $kernelCfgC.comment_header("Time Event Management") … … 492 469 493 470 # 494 # åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°471 # 各モジュールの初期化関数 495 472 # 496 473 $kernelCfgC.comment_header("Module Initialization Function") … … 506 483 507 484 # 508 # åæåã«ã¼ãã³æ©è½485 # 初期化ルーチン機能 509 486 # 510 487 $kernelCfgC.comment_header("Initialization Routine") 511 488 512 # ã¨ã©ã¼ãã§ãã¯489 # エラーチェック 513 490 $cfgData[:ATT_INI].each do |key, params| 514 # iniatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3241ï¼½515 # ï¼TA_NULLã§ãªãå ´åï¼491 # iniatrが無効の場合(E_RSATR)[NGKI3241] 492 #(TA_NULLでない場合) 516 493 if (params[:iniatr] != $TA_NULL) 517 494 error_illegal_sym("E_RSATR", params, :iniatr, :inirtn) … … 519 496 end 520 497 521 # åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ498 # 初期化ルーチンの実行関数の生成 522 499 $kernelCfgC.append(<<EOS) 523 500 void … … 532 509 533 510 # 534 # çµäºå¦çã«ã¼ãã³æ©è½511 # 終了処理ルーチン機能 535 512 # 536 513 $kernelCfgC.comment_header("Termination Routine") 537 514 538 # ã¨ã©ã¼ãã§ãã¯515 # エラーチェック 539 516 $cfgData[:ATT_TER].each do |key, params| 540 # teratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI3248ï¼½541 # ï¼TA_NULLã§ãªãå ´åï¼517 # teratrが無効の場合(E_RSATR)[NGKI3248] 518 #(TA_NULLでない場合) 542 519 if (params[:teratr] != $TA_NULL) 543 520 error_illegal_sym("E_RSATR", params, :teratr, :terrtn) … … 545 522 end 546 523 547 # çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ524 # 終了処理ルーチンの実行関数の生成 548 525 $kernelCfgC.append(<<EOS) 549 526 void … … 558 535 559 536 # 560 # kernel_cfg.h ã®æ«å°¾é¨åã®çæ537 # kernel_cfg.hの末尾部分の生成 561 538 # 562 539 $kernelCfgH.append(<<EOS) -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/kernel_api.def
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=UTF-8
-
asp3_gr_sakura/trunk/kernel/kernel_check.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 54 # 55 # $Id: kernel_check.trb 662 2016-02-27 02:33:51Z ertl-hiro $ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 39 # 40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®çæã¹ã¯ãªãã60 # 61 62 # 63 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®44 # コンフィギュレータのパス3の生成スクリプト 45 # 46 47 # 48 # タイムスタンプファイルの指定 64 49 # 65 50 $timeStampFileName = "check.timestamp" 66 51 67 52 # 68 # ãã¼ã¿ã»ã¯ã·ã§ã³ã®LMAããVMAã¸ã®ã³ãã¼53 # データセクションのLMAからVMAへのコピー 69 54 # 70 55 if !$lmaList.nil? … … 86 71 87 72 # 88 # éç¥æ 89 å ±ã®ãã§ãã¯é¢æ° 73 # 通知情報のチェック関数 90 74 # 91 75 $tmax_tskid = $TMIN_TSKID + $cfgData[:CRE_TSK].size - 1 … … 95 79 96 80 def checkNotifyHandler(key, params, objid, exinf, nfyhdr) 97 # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´81 # パラメータを変数に格納 98 82 nfymode = params[:nfymode] 99 83 nfymode1 = nfymode & 0x0f … … 103 87 funcname = "_kernel_nfyhdr_#{params[objid]}" 104 88 105 # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ£å¦ç89 # 通知処理のパラメータ数による補正処理 106 90 if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_SETFLG \ 107 91 || nfymode1 == $TNFY_SNDDTQ 108 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å92 # 通知処理のパラメータが2つの場合 109 93 epar1 = params[:par3] 110 94 epar2 = params[:par4] 111 95 else 112 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å96 # 通知処理のパラメータが1つの場合 113 97 epar1 = params[:par2] 114 98 epar2 = params[:par3] 115 99 end 116 100 117 # ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å 118 é çªå°ã®ãã§ãã¯ï¼»NGKI3693ï¼½ 101 # タイムイベントハンドラの先頭番地のチェック[NGKI3693] 119 102 if nfymode == $TNFY_HANDLER 120 103 tmehdr = nfyhdr … … 129 112 end 130 113 131 # ã¤ãã³ãéç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯114 # イベント通知処理の変数の番地とオブジェクトIDのチェック 132 115 if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_INCVAR 133 # å¤æ°ã®è¨å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¿ã¤ã ã¤ãã³ãã®éç¥116 # 変数の設定/インクリメントによるタイムイベントの通知 134 117 p_var = exinf 135 118 params1 = params.dup 136 119 params1[:p_var] = par1 137 120 138 # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3699][NGKI3897ï¼½121 # 変数の番地のチェック[NGKI3699][NGKI3897] 139 122 if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0 140 123 error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned") … … 144 127 end 145 128 elsif (nfymode1 == $TNFY_ACTTSK || nfymode1 == $TNFY_WUPTSK) 146 # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¿ã¤ã ã¤ãã³ãã®éç¥129 # タスクの起動/起床によるタイムイベントの通知 147 130 tskid = exinf 148 131 params1 = params.dup 149 132 params1[:tskid] = par1 150 133 151 # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½134 # タスクIDのチェック[NGKI3704] 152 135 if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid) 153 136 error_illegal_id("E_ID", params1, :tskid, objid) 154 137 end 155 138 elsif nfymode1 == $TNFY_SIGSEM 156 # ã»ããã©ã®è³æºã®è¿å´ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥139 # セマフォの資源の返却によるタイムイベントの通知 157 140 semid = exinf 158 141 params1 = params.dup 159 142 params1[:semid] = par1 160 143 161 # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½144 # セマフォIDのチェック[NGKI3707] 162 145 if !($TMIN_SEMID <= semid && semid <= $tmax_semid) 163 146 error_illegal_id("E_ID", params1, :semid, objid) 164 147 end 165 148 elsif nfymode1 == $TNFY_SETFLG 166 # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¿ã¤ã ã¤ãã³ãã®éç¥149 # イベントフラグのセットによるタイムイベントの通知 167 150 flgid = exinf 168 151 params1 = params.dup 169 152 params1[:flgid] = par1 170 153 171 # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½154 # イベントフラグIDのチェック[NGKI3710] 172 155 if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid) 173 156 error_illegal_id("E_ID", params1, :flgid, objid) 174 157 end 175 158 elsif nfymode1 == $TNFY_SNDDTQ 176 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥159 # データキューへの送信によるタイムイベントの通知 177 160 dtqid = exinf 178 161 params1 = params.dup 179 162 params1[:dtqid] = par1 180 163 181 # ãã¼ã¿ãã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3713ï¼½164 # データキューIDのチェック[NGKI3713] 182 165 if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid) 183 166 error_illegal_id("E_ID", params1, :dtqid, objid) … … 185 168 end 186 169 187 # ã¨ã©ã¼éç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯170 # エラー通知処理の変数の番地とオブジェクトIDのチェック 188 171 if (nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR) 189 # å¤æ°ã®è¨å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¨ã©ã¼ã®éç¥172 # 変数の設定/インクリメントによるエラーの通知 190 173 p_var = PEEK(SYMBOL(funcname + "_p_evar"), $sizeof_intptr_t) 191 174 params1 = params.dup 192 175 params1[:p_var] = epar1 193 176 194 # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3701][NGKI3897ï¼½177 # 変数の番地のチェック[NGKI3701][NGKI3897] 195 178 if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0 196 179 error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned") … … 200 183 end 201 184 elsif nfymode2 == $TENFY_ACTTSK || nfymode2 == $TENFY_WUPTSK 202 # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¨ã©ã¼ã®éç¥185 # タスクの起動/起床によるエラーの通知 203 186 tskid = PEEK(SYMBOL(funcname + "_etskid"), $sizeof_ID) 204 187 params1 = params.dup 205 188 params1[:tskid] = epar1 206 189 207 # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½190 # タスクIDのチェック[NGKI3704] 208 191 if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid) 209 192 error_illegal_id("E_ID", params1, :tskid, objid) 210 193 end 211 194 elsif nfymode2 == $TENFY_SIGSEM 212 # ã»ããã©ã®è³æºã®è¿å´ã«ããã¨ã©ã¼ã®éç¥195 # セマフォの資源の返却によるエラーの通知 213 196 semid = PEEK(SYMBOL(funcname + "_esemid"), $sizeof_ID) 214 197 params1 = params.dup 215 198 params1[:semid] = epar1 216 199 217 # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½200 # セマフォIDのチェック[NGKI3707] 218 201 if !($TMIN_SEMID <= semid && semid <= $tmax_semid) 219 202 error_illegal_id("E_ID", params1, :semid, objid) 220 203 end 221 204 elsif nfymode2 == $TENFY_SETFLG 222 # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¨ã©ã¼ã®éç¥205 # イベントフラグのセットによるエラーの通知 223 206 flgid = PEEK(SYMBOL(funcname + "_eflgid"), $sizeof_ID) 224 207 params1 = params.dup 225 208 params1[:flgid] = epar1 226 209 227 # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½210 # イベントフラグIDのチェック[NGKI3710] 228 211 if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid) 229 212 error_illegal_id("E_ID", params1, :flgid, objid) 230 213 end 231 214 elsif nfymode2 == $TENFY_SNDDTQ 232 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ã«ããã¨ã©ã¼ã®éç¥215 # データキューへの送信によるエラーの通知 233 216 dtqid = PEEK(SYMBOL(funcname + "_edtqid"), $sizeof_ID) 234 217 params1 = params.dup 235 218 params1[:dtqid] = epar1 236 219 237 # ãã¼ã¿ãã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3715ï¼½220 # データキューIDのチェック[NGKI3715] 238 221 if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid) 239 222 error_illegal_id("E_ID", params1, :dtqid, objid) … … 243 226 244 227 # 245 # ã¿ã¹ã¯ã«é¢ãããã§ãã¯228 # タスクに関するチェック 246 229 # 247 230 tinib = SYMBOL("_kernel_tinib_table") … … 249 232 task = PEEK(tinib + $offsetof_TINIB_task, $sizeof_TASK) 250 233 251 # ã¿ã¹ã¯ã®å 252 é çªå°ã®ãã§ãã¯ï¼»NGKI1033ï¼½ 234 # タスクの先頭番地のチェック[NGKI1033] 253 235 if (task & ($CHECK_FUNC_ALIGN - 1)) != 0 254 236 error_wrong_id("E_PAR", params, :task, :tskid, "not aligned") … … 258 240 end 259 241 260 # ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®å 261 é çªå°ã®ãã§ãã¯ï¼»NGKI1056ï¼½ 242 # タスクのスタック領域の先頭番地のチェック[NGKI1056] 262 243 if $USE_TSKINICTXB 263 244 stk = GetStackTskinictxb(key, params, tinib) … … 276 257 277 258 # 278 # åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ãããã§ãã¯259 # 固定長メモリプールに関するチェック 279 260 # 280 261 mpfinib = SYMBOL("_kernel_mpfinib_table") … … 282 263 mpf = PEEK(mpfinib + $offsetof_MPFINIB_mpf, $sizeof_void_ptr) 283 264 284 # åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 285 é çªå°ã®ãã§ãã¯ï¼»NGKI2249ï¼½ 265 # 固定長メモリプール領域の先頭番地のチェック[NGKI2249] 286 266 if (mpf & ($CHECK_MPF_ALIGN - 1)) != 0 287 267 error_wrong_id("E_PAR", params, :mpf, :mpfid, "not aligned") … … 295 275 296 276 # 297 # å¨æéç¥ã«é¢ãããã§ãã¯277 # 周期通知に関するチェック 298 278 # 299 279 cycinib = SYMBOL("_kernel_cycinib_table") … … 302 282 nfyhdr = PEEK(cycinib + $offsetof_CYCINIB_nfyhdr, $sizeof_NFYHDR) 303 283 304 # éç¥æ 305 å ±ã®ãã§ã㯠284 # 通知情報のチェック 306 285 checkNotifyHandler(key, params, :cycid, exinf, nfyhdr) 307 286 … … 310 289 311 290 # 312 # ã¢ã©ã¼ã éç¥ã«é¢ãããã§ãã¯291 # アラーム通知に関するチェック 313 292 # 314 293 alminib = SYMBOL("_kernel_alminib_table") … … 317 296 nfyhdr = PEEK(alminib + $offsetof_ALMINIB_nfyhdr, $sizeof_NFYHDR) 318 297 319 # éç¥æ 320 å ±ã®ãã§ã㯠298 # 通知情報のチェック 321 299 checkNotifyHandler(key, params, :almid, exinf, nfyhdr) 322 300 … … 325 303 326 304 # 327 # ãªã¼ãã©ã³ãã³ãã©ã«é¢ãããã§ãã¯305 # オーバランハンドラに関するチェック 328 306 # 329 307 ovrinib = SYMBOL("_kernel_ovrinib") … … 331 309 ovrhdr = PEEK(ovrinib + $offsetof_OVRINIB_ovrhdr, $sizeof_OVRHDR) 332 310 333 # ãªã¼ãã©ã³ãã³ãã©ã®å 334 é çªå°ã®ãã§ãã¯ï¼»NGKI2613ï¼½ 311 # オーバランハンドラの先頭番地のチェック[NGKI2613] 335 312 if (ovrhdr & ($CHECK_FUNC_ALIGN - 1)) != 0 336 313 error_wrong("E_PAR", $cfgData[:DEF_OVR][1], :ovrhdr, "not aligned") … … 342 319 343 320 # 344 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ãããã§ãã¯321 # 割込みサービスルーチンに関するチェック 345 322 # 346 323 isrinib = SYMBOL("_kernel_isrinib_table") … … 348 325 isr = PEEK(isrinib + $offsetof_ISRINIB_isr, $sizeof_ISR) 349 326 350 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å 351 é çªå°ã®ãã§ãã¯ï¼»NGKI3004ï¼½ 327 # 割込みサービスルーチンの先頭番地のチェック[NGKI3004] 352 328 if (isr & ($CHECK_FUNC_ALIGN - 1)) != 0 353 329 error_wrong_id("E_PAR", params, :isr, :isrid, "not aligned") … … 361 337 362 338 # 363 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ãããã§ãã¯339 # 非タスクコンテキスト用のスタック領域に関するチェック 364 340 # 365 341 istkAddr = SYMBOL("_kernel_istk") … … 367 343 istk = PEEK(istkAddr, $sizeof_void_ptr) 368 344 369 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®å 370 é çªå°ã®ãã§ãã¯ï¼»NGKI3222ï¼½ 345 # 非タスクコンテキスト用のスタック領域の先頭番地のチェック[NGKI3222] 371 346 if (istk & ($CHECK_STACK_ALIGN - 1)) != 0 372 347 error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "not aligned") … … 378 353 379 354 # 380 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã«é¢ãããã§ãã¯355 # カーネルが割り付けるメモリ領域に関するチェック 381 356 # 382 357 kmmAddr = SYMBOL("_kernel_kmm") … … 384 359 kmm = PEEK(kmmAddr, $sizeof_void_ptr) 385 360 386 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å 387 é çªå°ã®ãã§ã㯠361 # カーネルが割り付けるメモリ領域の先頭番地のチェック 388 362 if (kmm & ($CHECK_MB_ALIGN - 1)) != 0 389 363 error_wrong("E_PAR", $cfgData[:DEF_KMM][1], :kmm, "not aligned") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/kernel_impl.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * TOPPERS/ASPã«ã¼ãã«å 60 é¨åãæ¨æºããããã¡ã¤ã« 61 * 62 * ãã®ããããã¡ã¤ã«ã¯ï¼ã«ã¼ãã«ãæ§æããããã°ã©ã ã®ã½ã¼ã¹ãã¡ã¤ã« 63 * ã§å¿ 64 ãã¤ã³ã¯ã«ã¼ãããã¹ãæ¨æºããããã¡ã¤ã«ã§ããï¼ 65 * 66 * ã¢ã»ã³ããªè¨èªã®ã½ã¼ã¹ãã¡ã¤ã«ãããã®ãã¡ã¤ã«ãã¤ã³ã¯ã«ã¼ãããæ 67 * ã¯ï¼TOPPERS_MACRO_ONLYãå®ç¾©ãã¦ããï¼ããã«ããï¼ãã¯ãå®ç¾©ä»¥å¤ã 68 * é¤ãããã«ãªã£ã¦ããï¼ 44 * TOPPERS/ASPカーネル内部向け標準ヘッダファイル 45 * 46 * このヘッダファイルは,カーネルを構成するプログラムのソースファイル 47 * で必ずインクルードするべき標準ヘッダファイルである. 48 * 49 * アセンブリ言語のソースファイルからこのファイルをインクルードする時 50 * は,TOPPERS_MACRO_ONLYを定義しておく.これにより,マクロ定義以外を 51 * 除くようになっている. 69 52 */ 70 53 … … 73 56 74 57 /* 75 * ã«ã¼ãã«ã®å 76 é¨èå¥åã®ãªãã¼ã 58 * カーネルの内部識別名のリネーム 77 59 */ 78 60 #include "kernel_rename.h" 79 61 80 62 /* 81 * ã¢ããªã±ã¼ã·ã§ã³ã¨å 82 ±éã®ããããã¡ã¤ã« 63 * アプリケーションと共通のヘッダファイル 83 64 */ 84 65 #include <kernel.h> 85 66 86 67 /* 87 * ã·ã¹ãã ãã°æ©è½ã®ããã®å®ç¾©68 * システムログ機能のための定義 88 69 */ 89 70 #include <t_syslog.h> 90 71 91 72 /* 92 * ã¿ã¼ã²ããä¾åæ 93 å ±ã®å®ç¾© 73 * ターゲット依存情報の定義 94 74 */ 95 75 #include "target_kernel_impl.h" 96 76 97 77 /* 98 * ãã¹ã¦ã®é¢æ°ãã³ã³ãã¤ã«ããããã®å®ç¾©78 * すべての関数をコンパイルするための定義 99 79 */ 100 80 #ifdef ALLFUNC … … 103 83 104 84 /* 105 * ããããã£ã¼ã«ãã§ã®ç¬¦å·ç¡ãæ´æ°å 106 * 107 * 8ããã以ä¸ã®å¹ 108 ã®ããããã£ã¼ã«ãã§ï¼ç¬¦å·ç¡ãæ´æ°å¤ãä¿æãããå ´å 109 * ã«ç¨ããã¹ããã¼ã¿åï¼ANSI Cã§ã¯ï¼ããããã£ã¼ã«ãã®ãã¼ã¿åã«ã¯ 110 * intã¨unsigned intãã許ãããªãããï¼ããã©ã«ãã®å®ç¾©ã¯unsigned 111 * intã¨ãã¦ãããï¼ã¿ã¼ã²ããããã³ãã¼ã«ä¾åã§ï¼unsigned charã¾ã㯠112 * unsigned shortã«å®ç¾©ããæ¹ãå¹çãè¯ãå ´åãããï¼ 85 * ビットフィールドでの符号無し整数型 86 * 87 * 8ビット以下の幅のビットフィールドで,符号無し整数値を保持したい場合 88 * に用いるべきデータ型.ANSI Cでは,ビットフィールドのデータ型には 89 * intとunsigned intしか許されないため,デフォルトの定義はunsigned 90 * intとしているが,ターゲットおよびツール依存で,unsigned charまたは 91 * unsigned shortに定義した方が効率が良い場合がある. 113 92 */ 114 93 #ifndef BIT_FIELD_UINT … … 117 96 118 97 /* 119 * ããããã£ã¼ã«ãã§ã®ãã¼ã«å 120 * 121 * 1ãããå¹ 122 ã®ããããã£ã¼ã«ãã§ï¼ãã¼ã«å¤ãä¿æãããå ´åã«ç¨ããã¹ã 123 * ãã¼ã¿åï¼ããã©ã«ãã§ã¯BIT_FIELD_UINTã¨åä¸ã«å®ç¾©ãã¦ãããï¼ãã¼ 124 * ã«å¤ãä¿æãããã¨ãæ示ããããã«å¥ã®å称ã¨ãã¦ããï¼ 98 * ビットフィールドでのブール型 99 * 100 * 1ビット幅のビットフィールドで,ブール値を保持したい場合に用いるべき 101 * データ型.デフォルトではBIT_FIELD_UINTと同一に定義しているが,ブー 102 * ル値を保持することを明示するために別の名称としている. 125 103 */ 126 104 #ifndef BIT_FIELD_BOOL … … 129 107 130 108 /* 131 * ãªãã¸ã§ã¯ãIDã®æå°å¤ã®å®ç¾© 132 */ 133 #define TMIN_TSKID 1 /* ã¿ã¹ã¯IDã®æå°å¤ */ 134 #define TMIN_SEMID 1 /* ã»ããã©IDã®æå°å¤ */ 135 #define TMIN_FLGID 1 /* ãã©ã°IDã®æå°å¤ */ 136 #define TMIN_DTQID 1 /* ãã¼ã¿ãã¥ã¼IDã®æå°å¤ */ 137 #define TMIN_PDQID 1 /* åªå 138 度ãã¼ã¿ãã¥ã¼IDã®æå°å¤ */ 139 #define TMIN_MTXID 1 /* ãã¥ã¼ããã¯ã¹IDã®æå°å¤ */ 140 #define TMIN_MPFID 1 /* åºå®é·ã¡ã¢ãªãã¼ã«IDã®æå°å¤ */ 141 #define TMIN_CYCID 1 /* å¨æéç¥IDã®æå°å¤ */ 142 #define TMIN_ALMID 1 /* ã¢ã©ã¼ã éç¥IDã®æå°å¤ */ 143 #define TMIN_ISRID 1 /* å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³IDã®æå°å¤ */ 144 145 /* 146 * åªå 147 度ã®æ®µéæ°ã®å®ç¾© 109 * オブジェクトIDの最小値の定義 110 */ 111 #define TMIN_TSKID 1 /* タスクIDの最小値 */ 112 #define TMIN_SEMID 1 /* セマフォIDの最小値 */ 113 #define TMIN_FLGID 1 /* フラグIDの最小値 */ 114 #define TMIN_DTQID 1 /* データキューIDの最小値 */ 115 #define TMIN_PDQID 1 /* 優先度データキューIDの最小値 */ 116 #define TMIN_MTXID 1 /* ミューテックスIDの最小値 */ 117 #define TMIN_MPFID 1 /* 固定長メモリプールIDの最小値 */ 118 #define TMIN_CYCID 1 /* 周期通知IDの最小値 */ 119 #define TMIN_ALMID 1 /* アラーム通知IDの最小値 */ 120 #define TMIN_ISRID 1 /* 割込みサービスルーチンIDの最小値 */ 121 122 /* 123 * 優先度の段階数の定義 148 124 */ 149 125 #define TNUM_TPRI (TMAX_TPRI - TMIN_TPRI + 1) … … 152 128 153 129 /* 154 * ã«ã¼ãã«å 155 é¨ã§ä½¿ç¨ããå±æ§ã®å®ç¾© 156 */ 157 #define TA_NOEXS ((ATR)(-1)) /* æªç»é²ç¶æ 158 */ 130 * カーネル内部で使用する属性の定義 131 */ 132 #define TA_NOEXS ((ATR)(-1)) /* 未登録状態 */ 159 133 160 134 #ifndef TA_MEMALLOC 161 #define TA_MEMALLOC UINT_C(0x8000) /* ã¡ã¢ãªé åãã«ã¼ãã«ã§ç¢ºä¿*/135 #define TA_MEMALLOC UINT_C(0x8000) /* メモリ領域をカーネルで確保 */ 162 136 #endif /* TA_MEMALLOC */ 163 137 #ifndef TA_MBALLOC 164 #define TA_MBALLOC UINT_C(0x4000) /* 管çé åãã«ã¼ãã«ã§ç¢ºä¿*/138 #define TA_MBALLOC UINT_C(0x4000) /* 管理領域をカーネルで確保 */ 165 139 #endif /* TA_MBALLOC */ 166 140 167 141 /* 168 * ã¿ã¼ã²ããå®ç¾©ã®ã¨ã©ã¼ãã§ãã¯ãã¯ãã®ããã©ã«ãå¤ã®å®ç¾©142 * ターゲット定義のエラーチェックマクロのデフォルト値の定義 169 143 */ 170 144 #ifndef TARGET_TSKATR 171 #define TARGET_TSKATR 0U /* ã¿ã¼ã²ããå®ç¾©ã®ã¿ã¹ã¯å±æ§*/145 #define TARGET_TSKATR 0U /* ターゲット定義のタスク属性 */ 172 146 #endif /* TARGET_TSKATR */ 173 147 174 148 #ifndef TARGET_ISRATR 175 #define TARGET_ISRATR 0U /* ã¿ã¼ã²ããå®ç¾©ã®ISRå±æ§*/149 #define TARGET_ISRATR 0U /* ターゲット定義のISR属性 */ 176 150 #endif /* TARGET_ISRATR */ 177 151 178 152 /* 179 * ããããã¡ã¤ã«ãæããªãã¢ã¸ã¥ã¼ã«ã®é¢æ°ã»å¤æ°ã®å®£è¨153 * ヘッダファイルを持たないモジュールの関数・変数の宣言 180 154 */ 181 155 #ifndef TOPPERS_MACRO_ONLY 182 156 183 157 /* 184 * TECS ã®åæåï¼init_tecs.cï¼158 * TECSの初期化(init_tecs.c) 185 159 */ 186 160 extern void initialize_tecs(void); 187 161 188 162 /* 189 * åã¢ã¸ã¥ã¼ã«ã®åæåï¼kernel_cfg.cï¼163 * 各モジュールの初期化(kernel_cfg.c) 190 164 */ 191 165 extern void initialize_object(void); 192 166 193 167 /* 194 * åæåã«ã¼ãã³ã®å®è¡ï¼kernel_cfg.cï¼168 * 初期化ルーチンの実行(kernel_cfg.c) 195 169 */ 196 170 extern void call_inirtn(void); 197 171 198 172 /* 199 * çµäºå¦çã«ã¼ãã³ã®å®è¡ï¼kernel_cfg.cï¼173 * 終了処理ルーチンの実行(kernel_cfg.c) 200 174 */ 201 175 extern void call_terrtn(void); 202 176 203 177 /* 204 * éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åï¼kernel_cfg.cï¼ 205 */ 206 extern const size_t istksz; /* ã¹ã¿ãã¯é åã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */ 207 extern STK_T *const istk; /* ã¹ã¿ãã¯é åã®å 208 é çªå° */ 178 * 非タスクコンテキスト用のスタック領域(kernel_cfg.c) 179 */ 180 extern const size_t istksz; /* スタック領域のサイズ(丸めた値) */ 181 extern STK_T *const istk; /* スタック領域の先頭番地 */ 209 182 #ifdef TOPPERS_ISTKPT 210 extern STK_T *const istkpt; /* ã¹ã¿ãã¯ãã¤ã³ã¿ã®åæå¤*/183 extern STK_T *const istkpt; /* スタックポインタの初期値 */ 211 184 #endif /* TOPPERS_ISTKPT */ 212 185 213 186 /* 214 * ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åï¼kernel_cfg.cï¼ 215 */ 216 extern const size_t kmmsz; /* ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®ãµã¤ãº */ 217 extern MB_T *const kmm; /* ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å 218 é çªå° */ 219 220 /* 221 * ã«ã¼ãã«åä½ç¶æ 222 ãã©ã°ï¼startup.cï¼ 187 * カーネルが割り付けるメモリ領域(kernel_cfg.c) 188 */ 189 extern const size_t kmmsz; /* カーネルが割り付けるメモリ領域のサイズ */ 190 extern MB_T *const kmm; /* カーネルが割り付けるメモリ領域の先頭番地 */ 191 192 /* 193 * カーネル動作状態フラグ(startup.c) 223 194 */ 224 195 extern bool_t kerflg; 225 196 226 197 /* 227 * ã«ã¼ãã«ã®èµ·åï¼startup.cï¼198 * カーネルの起動(startup.c) 228 199 */ 229 200 extern void sta_ker(void); 230 201 231 202 /* 232 * ã«ã¼ãã«ã®çµäºå¦çï¼startup.cï¼203 * カーネルの終了処理(startup.c) 233 204 */ 234 205 extern void exit_kernel(void); 235 206 236 207 /* 237 * ã«ã¼ãã«ã®å²ãä»ããã¡ã¢ãªé åã®ç®¡çï¼startup.cï¼208 * カーネルの割り付けるメモリ領域の管理(startup.c) 238 209 */ 239 210 extern void initialize_kmm(void); … … 242 213 243 214 /* 244 * éç¥ãã³ãã©ã®åå®ç¾©215 * 通知ハンドラの型定義 245 216 */ 246 217 typedef void (*NFYHDR)(intptr_t exinf); 247 218 248 219 /* 249 * éç¥æ¹æ³ã®ã¨ã©ã¼ãã§ãã¯220 * 通知方法のエラーチェック 250 221 */ 251 222 extern ER check_nfyinfo(const T_NFYINFO *p_nfyinfo); 252 223 253 224 /* 254 * éç¥ãã³ãã©225 * 通知ハンドラ 255 226 */ 256 227 extern void notify_handler(intptr_t exinf); -
asp3_gr_sakura/trunk/kernel/kernel_int.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * kernel_cfg.c ï¼ããã³cfg1_out.cï¼ç¨ããããã¡ã¤ã«44 * kernel_cfg.c(およびcfg1_out.c)用ヘッダファイル 60 45 */ 61 46 … … 64 49 65 50 /* 66 * ã«ã¼ãã«æ¨æºããããã¡ã¤ã«51 * カーネル標準ヘッダファイル 67 52 */ 68 53 #include "kernel_impl.h" 69 54 70 55 /* 71 * ã«ã¼ãã«ã®åããããã¡ã¤ã«56 * カーネルの各ヘッダファイル 72 57 */ 73 58 #include "task.h" … … 86 71 87 72 /* 88 * ãªãã¼ã ããã·ã³ãã«ãå 89 ã«æ»ãããã®ããããã¡ã¤ã« 73 * リネームしたシンボルを元に戻すためのヘッダファイル 90 74 */ 91 75 #include "kernel_unrename.h" 92 76 93 77 /* 94 * å 95 容ã空ã®é 96 åãçæããããã®ãã¯ã 78 * 内容が空の配列を生成するためのマクロ 97 79 */ 98 80 #ifndef TOPPERS_EMPTY_LABEL -
asp3_gr_sakura/trunk/kernel/kernel_rename.def
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=UTF-8
-
asp3_gr_sakura/trunk/kernel/kernel_rename.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
-
asp3_gr_sakura/trunk/kernel/kernel_sym.def
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/plain
totext/plain; charset=UTF-8
-
asp3_gr_sakura/trunk/kernel/kernel_unrename.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
-
asp3_gr_sakura/trunk/kernel/mempfix.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * åºå®é·ã¡ã¢ãªãã¼ã«æ©è½44 * 固定長メモリプール機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_MPF_ENTER … … 134 119 135 120 /* 136 * åºå®é·ã¡ã¢ãªãã¼ã«ã®æ°121 * 固定長メモリプールの数 137 122 */ 138 123 #define tnum_mpf ((uint_t)(tmax_mpfid - TMIN_MPFID + 1)) … … 140 125 141 126 /* 142 * åºå®é·ã¡ã¢ãªãã¼ã«IDããåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯ãåãåºãã143 * ãã®ãã¯ã127 * 固定長メモリプールIDから固定長メモリプール管理ブロックを取り出すた 128 * めのマクロ 144 129 */ 145 130 #define INDEX_MPF(mpfid) ((uint_t)((mpfid) - TMIN_MPFID)) … … 147 132 148 133 /* 149 * ç¹æ®ãªã¤ã³ããã¯ã¹å¤ã®å®ç¾©150 */ 151 #define INDEX_NULL (~0U) /* 空ããããã¯ãªã¹ãã®æå¾*/152 #define INDEX_ALLOC (~1U) /* å²å½ã¦æ¸ã¿ã®ãããã¯*/134 * 特殊なインデックス値の定義 135 */ 136 #define INDEX_NULL (~0U) /* 空きブロックリストの最後 */ 137 #define INDEX_ALLOC (~1U) /* 割当て済みのブロック */ 153 138 154 139 #ifdef TOPPERS_mpfini 155 140 156 141 /* 157 * 使ç¨ãã¦ããªãåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯ã®ãªã¹ã142 * 使用していない固定長メモリプール管理ブロックのリスト 158 143 */ 159 144 QUEUE free_mpfcb; 160 145 161 146 /* 162 * åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®åæå147 * 固定長メモリプール機能の初期化 163 148 */ 164 149 void … … 190 175 191 176 /* 192 * åºå®é·ã¡ã¢ãªãã¼ã«ãããããã¯ãç²å¾177 * 固定長メモリプールからブロックを獲得 193 178 */ 194 179 #ifdef TOPPERS_mpfget … … 216 201 217 202 /* 218 * åºå®é·ã¡ã¢ãªãã¼ã«ã®çæ203 * 固定長メモリプールの生成 219 204 */ 220 205 #ifdef TOPPERS_acre_mpf … … 301 286 302 287 /* 303 * åºå®é·ã¡ã¢ãªãã¼ã«ã®åé¤288 * 固定長メモリプールの削除 304 289 */ 305 290 #ifdef TOPPERS_del_mpf … … 350 335 351 336 /* 352 * åºå®é·ã¡ã¢ãªãããã¯ã®ç²å¾337 * 固定長メモリブロックの獲得 353 338 */ 354 339 #ifdef TOPPERS_get_mpf … … 396 381 397 382 /* 398 * åºå®é·ã¡ã¢ãªãããã¯ã®ç²å¾ï¼ãã¼ãªã³ã°ï¼383 * 固定長メモリブロックの獲得(ポーリング) 399 384 */ 400 385 #ifdef TOPPERS_pget_mpf … … 432 417 433 418 /* 434 * åºå®é·ã¡ã¢ãªãããã¯ã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼419 * 固定長メモリブロックの獲得(タイムアウトあり) 435 420 */ 436 421 #ifdef TOPPERS_tget_mpf … … 484 469 485 470 /* 486 * åºå®é·ã¡ã¢ãªãããã¯ã®è¿å´471 * 固定長メモリブロックの返却 487 472 */ 488 473 #ifdef TOPPERS_rel_mpf … … 542 527 543 528 /* 544 * åºå®é·ã¡ã¢ãªãã¼ã«ã®ååæå529 * 固定長メモリプールの再初期化 545 530 */ 546 531 #ifdef TOPPERS_ini_mpf … … 581 566 582 567 /* 583 * åºå®é·ã¡ã¢ãªãã¼ã«ã®ç¶æ 584 åç 585 § 568 * 固定長メモリプールの状態参照 586 569 */ 587 570 #ifdef TOPPERS_ref_mpf -
asp3_gr_sakura/trunk/kernel/mempfix.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * åºå®é·ã¡ã¢ãªãã¼ã«æ©è½44 * 固定長メモリプール機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * åºå®é·ã¡ã¢ãªãããã¯ç®¡çãããã¯55 * 固定長メモリブロック管理ブロック 71 56 * 72 * next ãã£ã¼ã«ãã«ã¯ï¼ã¡ã¢ãªãããã¯ãå²å½ã¦æ¸ã¿ã®å ´åã¯INDEX_ALLOCãï¼73 * æªå²å½ã¦ã®å ´åã¯æ¬¡ã®æªå²å½ã¦ãããã¯ã®ã¤ã³ããã¯ã¹çªå·ãæ ¼ç´ããï¼74 * æå¾ã®æªå²å½ã¦ãããã¯ã®å ´åã«ã¯ï¼INDEX_NULLãæ ¼ç´ããï¼57 * nextフィールドには,メモリブロックが割当て済みの場合はINDEX_ALLOCを, 58 * 未割当ての場合は次の未割当てブロックのインデックス番号を格納する. 59 * 最後の未割当てブロックの場合には,INDEX_NULLを格納する. 75 60 */ 76 61 typedef struct fixed_memoryblock_management_block { 77 uint_t next; /* 次ã®æªå²å½ã¦ãããã¯*/62 uint_t next; /* 次の未割当てブロック */ 78 63 } MPFMB; 79 64 80 65 /* 81 * åºå®é·ã¡ã¢ãªãã¼ã«åæåãããã¯66 * 固定長メモリプール初期化ブロック 82 67 * 83 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 84 ±éé¨å 85 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 86 * æåã®ãã£ã¼ã«ããå 87 ±éã«ãªã£ã¦ããï¼ 68 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 69 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 70 * 最初のフィールドが共通になっている. 88 71 */ 89 72 typedef struct fixed_memorypool_initialization_block { 90 ATR mpfatr; /* åºå®é·ã¡ã¢ãªãã¼ã«å±æ§ */ 91 uint_t blkcnt; /* ã¡ã¢ãªãããã¯æ° */ 92 uint_t blksz; /* ã¡ã¢ãªãããã¯ã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */ 93 void *mpf; /* åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 94 é çªå° */ 95 MPFMB *p_mpfmb; /* åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé åã®å 96 é çªå° */ 73 ATR mpfatr; /* 固定長メモリプール属性 */ 74 uint_t blkcnt; /* メモリブロック数 */ 75 uint_t blksz; /* メモリブロックのサイズ(丸めた値) */ 76 void *mpf; /* 固定長メモリプール領域の先頭番地 */ 77 MPFMB *p_mpfmb; /* 固定長メモリプール管理領域の先頭番地 */ 97 78 } MPFINIB; 98 79 99 80 /* 100 * åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯81 * 固定長メモリプール管理ブロック 101 82 * 102 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 103 ±éé¨åï¼WOBJCBï¼ 104 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 105 * ãã£ã¼ã«ããå 106 ±éã«ãªã£ã¦ããï¼ 83 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 84 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 85 * フィールドが共通になっている. 107 86 */ 108 87 typedef struct fixed_memorypool_control_block { 109 QUEUE wait_queue; /* åºå®é·ã¡ã¢ãªãã¼ã«å¾ 110 ã¡ãã¥ã¼ */ 111 const MPFINIB *p_mpfinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 112 uint_t fblkcnt; /* æªå²å½ã¦ãããã¯æ° */ 113 uint_t unused; /* æªä½¿ç¨ãããã¯ã®å 114 é */ 115 uint_t freelist; /* æªå²å½ã¦ãããã¯ã®ãªã¹ã */ 88 QUEUE wait_queue; /* 固定長メモリプール待ちキュー */ 89 const MPFINIB *p_mpfinib; /* 初期化ブロックへのポインタ */ 90 uint_t fblkcnt; /* 未割当てブロック数 */ 91 uint_t unused; /* 未使用ブロックの先頭 */ 92 uint_t freelist; /* 未割当てブロックのリスト */ 116 93 } MPFCB; 117 94 118 95 /* 119 * åºå®é·ã¡ã¢ãªãã¼ã«å¾ 120 ã¡æ 121 å ±ãããã¯ã®å®ç¾© 96 * 固定長メモリプール待ち情報ブロックの定義 122 97 * 123 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 124 ã¡æ 125 å ±ãããã¯ã®å 126 ±éé¨å 127 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 128 * æåã®2ã¤ã®ãã£ã¼ã«ããå 129 ±éã«ãªã£ã¦ããï¼ 98 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 99 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 100 * 最初の2つのフィールドが共通になっている. 130 101 */ 131 102 typedef struct fixed_memorypool_waiting_information { 132 WINFO winfo; /* æ¨æºã®å¾ 133 ã¡æ 134 å ±ããã㯠*/ 135 MPFCB *p_mpfcb; /* å¾ 136 ã£ã¦ããåºå®é·ã¡ã¢ãªãã¼ã«ã®ç®¡çãããã¯*/ 137 void *blk; /* ç²å¾ããã¡ã¢ãªããã㯠*/ 103 WINFO winfo; /* 標準の待ち情報ブロック */ 104 MPFCB *p_mpfcb; /* 待っている固定長メモリプールの管理ブロック*/ 105 void *blk; /* 獲得したメモリブロック */ 138 106 } WINFO_MPF; 139 107 140 108 /* 141 * 使ç¨ãã¦ããªãåºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯ã®ãªã¹ã109 * 使用していない固定長メモリプール管理ブロックのリスト 142 110 */ 143 111 extern QUEUE free_mpfcb; 144 112 145 113 /* 146 * åºå®é·ã¡ã¢ãªãã¼ã«IDã®æ大å¤ï¼kernel_cfg.cï¼114 * 固定長メモリプールIDの最大値(kernel_cfg.c) 147 115 */ 148 116 extern const ID tmax_mpfid; … … 150 118 151 119 /* 152 * åºå®é·ã¡ã¢ãªãã¼ã«åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼120 * 固定長メモリプール初期化ブロックのエリア(kernel_cfg.c) 153 121 */ 154 122 extern const MPFINIB mpfinib_table[]; … … 156 124 157 125 /* 158 * åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼126 * 固定長メモリプール管理ブロックのエリア(kernel_cfg.c) 159 127 */ 160 128 extern MPFCB mpfcb_table[]; 161 129 162 130 /* 163 * åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çãããã¯ããåºå®é·ã¡ã¢ãªãã¼ã«IDãåãåºãã164 * ãã®ãã¯ã131 * 固定長メモリプール管理ブロックから固定長メモリプールIDを取り出すた 132 * めのマクロ 165 133 */ 166 134 #define MPFID(p_mpfcb) ((ID)(((p_mpfcb) - mpfcb_table) + TMIN_MPFID)) 167 135 168 136 /* 169 * åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®åæå137 * 固定長メモリプール機能の初期化 170 138 */ 171 139 extern void initialize_mempfix(void); 172 140 173 141 /* 174 * åºå®é·ã¡ã¢ãªãã¼ã«ãããããã¯ãç²å¾142 * 固定長メモリプールからブロックを獲得 175 143 */ 176 144 extern void get_mpf_block(MPFCB *p_mpfcb, void **p_blk); -
asp3_gr_sakura/trunk/kernel/mempfix.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : mempfix.trb 672 2016-03-05 15:33:08Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # åºå®é·ã¡ã¢ãªãã¼ã«æ©è½ã®çæã¹ã¯ãªãã44 # 固定長メモリプール機能の生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®53 # パラメータが省略された時のデフォルト値の設定 69 54 params[:mpf] ||= "NULL" 70 55 params[:mpfmb] ||= "NULL" 71 56 72 # mpfatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2225ï¼½73 # ï¼TA_TPRI以å¤ã®ããããã»ããããã¦ããå ´åï¼57 # mpfatrが無効の場合(E_RSATR)[NGKI2225] 58 #(TA_TPRI以外のビットがセットされている場合) 74 59 if (params[:mpfatr] & ~($TA_TPRI)) != 0 75 60 error_illegal_id("E_RSATR", params, :mpfatr, :mpfid) 76 61 end 77 62 78 # blkcnt ã0ã®å ´åï¼E_PARï¼ï¼»NGKI2229ï¼½63 # blkcntが0の場合(E_PAR)[NGKI2229] 79 64 if params[:blkcnt] == 0 80 65 error_illegal_id("E_PAR", params, :blkcnt, :mpfid) 81 66 end 82 67 83 # blksz ã0ã®å ´åï¼E_PARï¼ï¼»NGKI2230ï¼½68 # blkszが0の場合(E_PAR)[NGKI2230] 84 69 if params[:blksz] == 0 85 70 error_illegal_id("E_PAR", params, :blksz, :mpfid) 86 71 end 87 72 88 # åºå®é·ã¡ã¢ãªãã¼ã«é å73 # 固定長メモリプール領域 89 74 if params[:mpf] == "NULL" 90 75 mpfName = "_kernel_mpf_#{params[:mpfid]}" … … 96 81 end 97 82 98 # mpfmb ãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0166ï¼½83 # mpfmbがNULLでない場合(E_NOSPT)[ASPS0166] 99 84 if params[:mpfmb] != "NULL" 100 85 error_illegal_id("E_NOSPT", params, :mpfmb, :mpfid) 101 86 end 102 87 103 # åºå®é·ã¡ã¢ãªãã¼ã«ç®¡çé å88 # 固定長メモリプール管理領域 104 89 mpfmbName = "_kernel_mpfmb_#{params[:mpfid]}" 105 90 $kernelCfgC.add("static MPFMB #{mpfmbName}[#{params[:blkcnt]}];") … … 115 100 116 101 # 117 # åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ããæ 118 å ±ã®çæ 102 # 固定長メモリプールに関する情報の生成 119 103 # 120 104 $kernelCfgC.comment_header("Fixed-sized Memorypool Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/mutex.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ãã¥ã¼ããã¯ã¹æ©è½42 * ミューテックス機能 58 43 */ 59 44 … … 66 51 67 52 /* 68 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©53 * トレースログマクロのデフォルト定義 69 54 */ 70 55 #ifndef LOG_ACRE_MTX_ENTER … … 133 118 134 119 /* 135 * ãã¥ã¼ããã¯ã¹ã®æ°120 * ミューテックスの数 136 121 */ 137 122 #define tnum_mtx ((uint_t)(tmax_mtxid - TMIN_MTXID + 1)) … … 139 124 140 125 /* 141 * ãã¥ã¼ããã¯ã¹IDãããã¥ã¼ããã¯ã¹ç®¡çãããã¯ãåãåºãããã®ãã¯ã126 * ミューテックスIDからミューテックス管理ブロックを取り出すためのマクロ 142 127 */ 143 128 #define INDEX_MTX(mtxid) ((uint_t)((mtxid) - TMIN_MTXID)) … … 145 130 146 131 /* 147 * ãã¥ã¼ããã¯ã¹ã®ãããã³ã«ãå¤æãããã¯ã132 * ミューテックスのプロトコルを判断するマクロ 148 133 */ 149 134 #define MTXPROTO_MASK 0x03U … … 154 139 155 140 /* 156 * 使ç¨ãã¦ããªããã¥ã¼ããã¯ã¹ç®¡çãããã¯ã®ãªã¹ã141 * 使用していないミューテックス管理ブロックのリスト 157 142 */ 158 143 QUEUE free_mtxcb; 159 144 160 145 /* 161 * ãã¥ã¼ããã¯ã¹æ©è½ã®åæå146 * ミューテックス機能の初期化 162 147 */ 163 148 void … … 191 176 192 177 /* 193 * ä¸éåªå 194 度éåã®ãã§ã㯠178 * 上限優先度違反のチェック 195 179 */ 196 180 #ifdef TOPPERS_mtxchk … … 202 186 203 187 /* 204 * ã¿ã¹ã¯ãããã¯ãã¦ããåªå 205 度ä¸éãã¥ã¼ããã¯ã¹ã®ä¸ã§ï¼ä¸éåªå 206 207 * 度ãbpriorityãããä½ããã®ãããã°ï¼falseãè¿ãï¼ 188 * タスクがロックしている優先度上限ミューテックスの中で,上限優先 189 * 度がbpriorityよりも低いものがあれば,falseを返す. 208 190 */ 209 191 p_mtxcb = p_tcb->p_lastmtx; … … 216 198 217 199 /* 218 * ã¿ã¹ã¯ãåªå 219 度ä¸éãã¥ã¼ããã¯ã¹ã®ããã¯ãå¾ 220 ã£ã¦ããå ´åã«ï¼ã 221 * ã®ä¸éåªå 222 度ãbpriorityãããä½ãããã°ï¼falseãè¿ãï¼ 200 * タスクが優先度上限ミューテックスのロックを待っている場合に,そ 201 * の上限優先度がbpriorityよりも低くければ,falseを返す. 223 202 */ 224 203 if (TSTAT_WAIT_MTX(p_tcb->tstat)) { … … 230 209 231 210 /* 232 * ãããã®æ¡ä»¶ã«ãå½ã¦ã¯ã¾ããªããã°trueãè¿ãï¼211 * いずれの条件にも当てはまらなければtrueを返す. 233 212 */ 234 213 return(true); … … 238 217 239 218 /* 240 * åªå 241 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ãã¦ãããã®ãã§ã㯠219 * 優先度上限ミューテックスをロックしているかのチェック 242 220 */ 243 221 #ifdef TOPPERS_mtxscan … … 261 239 262 240 /* 263 * ã¿ã¹ã¯ã®ç¾å¨åªå 264 度ã®è¨ç® 241 * タスクの現在優先度の計算 265 242 * 266 * p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¾å¨åªå 267 度ï¼ã«è¨å®ãã¹ãå¤ï¼ãè¨ç®ããï¼ 243 * p_tcbで指定されるタスクの現在優先度(に設定すべき値)を計算する. 268 244 */ 269 245 Inline uint_t … … 285 261 286 262 /* 287 * ãã¥ã¼ããã¯ã¹ã解æ¾ããå ´åã®ç¾å¨åªå 288 度å¤æ´å¦ç 263 * ミューテックスを解放した場合の現在優先度変更処理 289 264 */ 290 265 #ifdef TOPPERS_mtxdrop … … 307 282 308 283 /* 309 * ãã¥ã¼ããã¯ã¹ã®ããã¯284 * ミューテックスのロック 310 285 */ 311 286 #ifdef TOPPERS_mtxacq … … 326 301 327 302 /* 328 * ãã¥ã¼ããã¯ã¹ã®ããã¯è§£é¤303 * ミューテックスのロック解除 329 304 */ 330 305 #ifdef TOPPERS_mtxrel … … 340 315 else { 341 316 /* 342 * ãã¥ã¼ããã¯ã¹å¾ 343 ã¡ãã¥ã¼ã®å 344 é ã¿ã¹ã¯ï¼p_tcbï¼ã«ï¼ãã¥ã¼ãã 345 * ã¯ã¹ãããã¯ãããï¼ 317 * ミューテックス待ちキューの先頭タスク(p_tcb)に,ミューテッ 318 * クスをロックさせる. 346 319 */ 347 320 p_tcb = (TCB *) queue_delete_next(&(p_mtxcb->wait_queue)); … … 364 337 365 338 /* 366 * ã¿ã¹ã¯ãããã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ããã¯ã¹ã®ããã¯è§£é¤339 * タスクがロックしているすべてのミューテックスのロック解除 367 340 */ 368 341 #ifdef TOPPERS_mtxrela … … 382 355 383 356 /* 384 * ãã¥ã¼ããã¯ã¹ã®çæï¼»NGKI2022ï¼½357 * ミューテックスの生成[NGKI2022] 385 358 */ 386 359 #ifdef TOPPERS_acre_mtx … … 396 369 397 370 LOG_ACRE_MTX_ENTER(pk_cmtx); 398 CHECK_TSKCTX_UNL(); /* ï¼»NGKI2023][NGKI2024ï¼½*/371 CHECK_TSKCTX_UNL(); /*[NGKI2023][NGKI2024]*/ 399 372 400 373 mtxatr = pk_cmtx->mtxatr; … … 402 375 403 376 if (mtxatr == TA_CEILING) { 404 CHECK_PAR(VALID_TPRI(ceilpri)); /* ï¼»NGKI2037ï¼½*/405 } 406 else { 407 CHECK_RSATR(mtxatr, TA_TPRI); /* ï¼»NGKI2025ï¼½*/377 CHECK_PAR(VALID_TPRI(ceilpri)); /*[NGKI2037]*/ 378 } 379 else { 380 CHECK_RSATR(mtxatr, TA_TPRI); /*[NGKI2025]*/ 408 381 } 409 382 410 383 lock_cpu(); 411 384 if (tnum_mtx == 0 || queue_empty(&free_mtxcb)) { 412 ercd = E_NOID; /* ï¼»NGKI2031ï¼½*/385 ercd = E_NOID; /*[NGKI2031]*/ 413 386 } 414 387 else { … … 419 392 420 393 queue_initialize(&(p_mtxcb->wait_queue)); 421 p_mtxcb->p_loctsk = NULL; /* ï¼»NGKI2033ï¼½*/394 p_mtxcb->p_loctsk = NULL; /*[NGKI2033]*/ 422 395 ercd = MTXID(p_mtxcb); 423 396 } … … 432 405 433 406 /* 434 * ãã¥ã¼ããã¯ã¹ã®åé¤ï¼»NGKI2056ï¼½407 * ミューテックスの削除[NGKI2056] 435 408 */ 436 409 #ifdef TOPPERS_del_mtx … … 445 418 446 419 LOG_DEL_MTX_ENTER(mtxid); 447 CHECK_TSKCTX_UNL(); /* ï¼»NGKI2057][NGKI2058ï¼½*/448 CHECK_ID(VALID_MTXID(mtxid)); /* ï¼»NGKI2059ï¼½*/420 CHECK_TSKCTX_UNL(); /*[NGKI2057][NGKI2058]*/ 421 CHECK_ID(VALID_MTXID(mtxid)); /*[NGKI2059]*/ 449 422 p_mtxcb = get_mtxcb(mtxid); 450 423 451 424 lock_cpu(); 452 425 if (p_mtxcb->p_mtxinib->mtxatr == TA_NOEXS) { 453 ercd = E_NOEXS; /* ï¼»NGKI2060ï¼½*/426 ercd = E_NOEXS; /*[NGKI2060]*/ 454 427 } 455 428 else if (mtxid <= tmax_smtxid) { 456 ercd = E_OBJ; /* ï¼»NGKI2062ï¼½*/457 } 458 else { 459 init_wait_queue(&(p_mtxcb->wait_queue)); /* ï¼»NGKI2065ï¼½*/429 ercd = E_OBJ; /*[NGKI2062]*/ 430 } 431 else { 432 init_wait_queue(&(p_mtxcb->wait_queue)); /*[NGKI2065]*/ 460 433 p_loctsk = p_mtxcb->p_loctsk; 461 434 if (p_loctsk != NULL) { 462 435 /* 463 * p_loctskãããã¯ãã¦ãããã¥ã¼ããã¯ã¹ã®ãªã¹ããã対象 464 * ãã¥ã¼ã¯ã¹ãåé¤ãï¼å¿ 465 è¦ãªå ´åã«ã¯p_loctskã®ç¾å¨åªå 466 度 467 * ãå¤æ´ããï¼»NGKI2064ï¼½ï¼ 436 * p_loctskがロックしているミューテックスのリストから対象 437 * ミュークスを削除し,必要な場合にはp_loctskの現在優先度 438 * を変更する[NGKI2064]. 468 439 */ 469 440 pp_prevmtx = &(p_loctsk->p_lastmtx); … … 478 449 } 479 450 p_mtxinib = (MTXINIB *)(p_mtxcb->p_mtxinib); 480 p_mtxinib->mtxatr = TA_NOEXS; /* ï¼»NGKI2063ï¼½*/451 p_mtxinib->mtxatr = TA_NOEXS; /*[NGKI2063]*/ 481 452 queue_insert_prev(&free_mtxcb, &(p_mtxcb->wait_queue)); 482 453 if (p_runtsk != p_schedtsk) { … … 495 466 496 467 /* 497 * ãã¥ã¼ããã¯ã¹ã®ããã¯468 * ミューテックスのロック 498 469 */ 499 470 #ifdef TOPPERS_loc_mtx … … 525 496 mutex_acquire(p_runtsk, p_mtxcb); 526 497 /* 527 * åªå 528 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ããå ´åï¼p_runtskã®åªå 529 度 530 * ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿ 531 è¦ã«ãªããã¨ã¯ãªãï¼ 498 * 優先度上限ミューテックスをロックした場合,p_runtskの優先度 499 * が上がる可能性があるが,ディスパッチが必要になることはない. 532 500 */ 533 501 assert(p_runtsk == p_schedtsk); … … 553 521 554 522 /* 555 * ãã¥ã¼ããã¯ã¹ã®ããã¯ï¼ãã¼ãªã³ã°ï¼523 * ミューテックスのロック(ポーリング) 556 524 */ 557 525 #ifdef TOPPERS_ploc_mtx … … 579 547 mutex_acquire(p_runtsk, p_mtxcb); 580 548 /* 581 * åªå 582 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ããå ´åï¼p_runtskã®åªå 583 度 584 * ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿ 585 è¦ã«ãªããã¨ã¯ãªãï¼ 549 * 優先度上限ミューテックスをロックした場合,p_runtskの優先度 550 * が上がる可能性があるが,ディスパッチが必要になることはない. 586 551 */ 587 552 assert(p_runtsk == p_schedtsk); … … 604 569 605 570 /* 606 * ãã¥ã¼ããã¯ã¹ã®ããã¯ï¼ã¿ã¤ã ã¢ã¦ãããï¼571 * ミューテックスのロック(タイムアウトあり) 607 572 */ 608 573 #ifdef TOPPERS_tloc_mtx … … 636 601 mutex_acquire(p_runtsk, p_mtxcb); 637 602 /* 638 * åªå 639 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ããå ´åï¼p_runtskã®åªå 640 度 641 * ãä¸ããå¯è½æ§ããããï¼ãã£ã¹ããããå¿ 642 è¦ã«ãªããã¨ã¯ãªãï¼ 603 * 優先度上限ミューテックスをロックした場合,p_runtskの優先度 604 * が上がる可能性があるが,ディスパッチが必要になることはない. 643 605 */ 644 606 assert(p_runtsk == p_schedtsk); … … 668 630 669 631 /* 670 * ãã¥ã¼ããã¯ã¹ã®ããã¯è§£é¤632 * ミューテックスのロック解除 671 633 */ 672 634 #ifdef TOPPERS_unl_mtx … … 709 671 710 672 /* 711 * ãã¥ã¼ããã¯ã¹ã®ååæå673 * ミューテックスの再初期化 712 674 */ 713 675 #ifdef TOPPERS_ini_mtx … … 759 721 760 722 /* 761 * ãã¥ã¼ããã¯ã¹ã®ç¶æ 762 åç 763 § 723 * ミューテックスの状態参照 764 724 */ 765 725 #ifdef TOPPERS_ref_mtx -
asp3_gr_sakura/trunk/kernel/mutex.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ãã¥ã¼ããã¯ã¹æ©è½42 * ミューテックス機能 58 43 */ 59 44 … … 66 51 67 52 /* 68 * ãã¥ã¼ããã¯ã¹åæåãããã¯53 * ミューテックス初期化ブロック 69 54 * 70 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 71 ±éé¨å 72 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 73 * æåã®ãã£ã¼ã«ããå 74 ±éã«ãªã£ã¦ããï¼ 55 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 56 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 57 * 最初のフィールドが共通になっている. 75 58 */ 76 59 typedef struct mutex_initialization_block { 77 ATR mtxatr; /* ãã¥ã¼ããã¯ã¹å±æ§ */ 78 uint_t ceilpri; /* ãã¥ã¼ããã¯ã¹ã®ä¸éåªå 79 度ï¼å 80 é¨è¡¨ç¾ï¼*/ 60 ATR mtxatr; /* ミューテックス属性 */ 61 uint_t ceilpri; /* ミューテックスの上限優先度(内部表現)*/ 81 62 } MTXINIB; 82 63 83 64 /* 84 * ãã¥ã¼ããã¯ã¹ç®¡çãããã¯65 * ミューテックス管理ブロック 85 66 * 86 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 87 ±éé¨åï¼WOBJCBï¼ 88 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 89 * ãã£ã¼ã«ããå 90 ±éã«ãªã£ã¦ããï¼ 67 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 68 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 69 * フィールドが共通になっている. 91 70 */ 92 71 struct mutex_control_block { 93 QUEUE wait_queue; /* ãã¥ã¼ããã¯ã¹å¾ 94 ã¡ãã¥ã¼ */ 95 const MTXINIB *p_mtxinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 96 TCB *p_loctsk; /* ãã¥ã¼ããã¯ã¹ãããã¯ãã¦ããã¿ã¹ã¯ */ 97 MTXCB *p_prevmtx; /* ãã®åã«ããã¯ãããã¥ã¼ããã¯ã¹ */ 72 QUEUE wait_queue; /* ミューテックス待ちキュー */ 73 const MTXINIB *p_mtxinib; /* 初期化ブロックへのポインタ */ 74 TCB *p_loctsk; /* ミューテックスをロックしているタスク */ 75 MTXCB *p_prevmtx; /* この前にロックしたミューテックス */ 98 76 }; 99 77 100 78 /* 101 * ãã¥ã¼ããã¯ã¹å¾ 102 ã¡æ 103 å ±ãããã¯ã®å®ç¾© 79 * ミューテックス待ち情報ブロックの定義 104 80 * 105 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 106 ã¡æ 107 å ±ãããã¯ã®å 108 ±éé¨å 109 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 110 * ãã¹ã¦ã®ãã£ã¼ã«ããå 111 ±éã«ãªã£ã¦ããï¼ 81 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 82 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 83 * すべてのフィールドが共通になっている. 112 84 */ 113 85 typedef struct mutex_waiting_information { 114 WINFO winfo; /* æ¨æºã®å¾ 115 ã¡æ 116 å ±ããã㯠*/ 117 MTXCB *p_mtxcb; /* å¾ 118 ã£ã¦ãããã¥ã¼ããã¯ã¹ã®ç®¡çããã㯠*/ 86 WINFO winfo; /* 標準の待ち情報ブロック */ 87 MTXCB *p_mtxcb; /* 待っているミューテックスの管理ブロック */ 119 88 } WINFO_MTX; 120 89 121 90 /* 122 * 使ç¨ãã¦ããªããã¥ã¼ããã¯ã¹ç®¡çãããã¯ã®ãªã¹ã91 * 使用していないミューテックス管理ブロックのリスト 123 92 */ 124 93 extern QUEUE free_mtxcb; 125 94 126 95 /* 127 * ãã¥ã¼ããã¯ã¹IDã®æ大å¤ï¼kernel_cfg.cï¼96 * ミューテックスIDの最大値(kernel_cfg.c) 128 97 */ 129 98 extern const ID tmax_mtxid; … … 131 100 132 101 /* 133 * ãã¥ã¼ããã¯ã¹åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼102 * ミューテックス初期化ブロックのエリア(kernel_cfg.c) 134 103 */ 135 104 extern const MTXINIB mtxinib_table[]; … … 137 106 138 107 /* 139 * ãã¥ã¼ããã¯ã¹ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼108 * ミューテックス管理ブロックのエリア(kernel_cfg.c) 140 109 */ 141 110 extern MTXCB mtxcb_table[]; 142 111 143 112 /* 144 * ãã¥ã¼ããã¯ã¹ç®¡çãããã¯ãããã¥ã¼ããã¯ã¹IDãåãåºãããã®ãã¯ã113 * ミューテックス管理ブロックからミューテックスIDを取り出すためのマクロ 145 114 */ 146 115 #define MTXID(p_mtxcb) ((ID)(((p_mtxcb) - mtxcb_table) + TMIN_MTXID)) 147 116 148 117 /* 149 * ãã¥ã¼ããã¯ã¹æ©è½ã®åæå118 * ミューテックス機能の初期化 150 119 */ 151 120 extern void initialize_mutex(void); 152 121 153 122 /* 154 * ä¸éåªå 155 度éåã®ãã§ã㯠123 * 上限優先度違反のチェック 156 124 * 157 * chg_priã®ä¸ã§ä¸éåªå 158 度éåã®ãã§ãã¯ãè¡ãããã«ç¨ããé¢æ°ã§ããï¼ 159 * p_tcbã§æå®ãããã¿ã¹ã¯ãããã¯ãã¦ããåªå 160 度ä¸éãã¥ã¼ããã¯ã¹ã¨ï¼ 161 * ããã¯ãå¾ 162 ã£ã¦ããåªå 163 度ä¸éãã¥ã¼ããã¯ã¹ã®ä¸ã§ï¼ä¸éåªå 164 度ã 165 * bpriorityãããä½ããã®ãããã°falseãï¼ããã§ãªããã°trueãè¿ãï¼ 125 * chg_priの中で上限優先度違反のチェックを行うために用いる関数であり, 126 * p_tcbで指定されるタスクがロックしている優先度上限ミューテックスと, 127 * ロックを待っている優先度上限ミューテックスの中で,上限優先度が 128 * bpriorityよりも低いものがあればfalseを,そうでなければtrueを返す. 166 129 */ 167 130 extern bool_t mutex_check_ceilpri(TCB *p_tcb, uint_t bpriority); 168 131 169 132 /* 170 * åªå 171 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ãã¦ãããã®ãã§ã㯠133 * 優先度上限ミューテックスをロックしているかのチェック 172 134 * 173 * p_tcbã§æå®ãããã¿ã¹ã¯ãåªå 174 度ä¸éãã¥ã¼ããã¯ã¹ãããã¯ãã¦ããã° 175 * trueï¼ããã§ãªããã°falseãè¿ãï¼ 135 * p_tcbで指定されるタスクが優先度上限ミューテックスをロックしていれば 136 * true,そうでなければfalseを返す. 176 137 */ 177 138 extern bool_t mutex_scan_ceilmtx(TCB *p_tcb); 178 139 179 140 /* 180 * ãã¥ã¼ããã¯ã¹ãããã¯è§£é¤ããå ´åã®ç¾å¨åªå 181 度å¤æ´å¦ç 141 * ミューテックスをロック解除した場合の現在優先度変更処理 182 142 * 183 * p_tcbã§æå®ãããã¿ã¹ã¯ãï¼p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ããã 184 * ã¯è§£é¤ããéã®ç¾å¨åªå 185 度å¤æ´å¦çãè¡ãï¼ 143 * p_tcbで指定されるタスクが,p_mtxcbで指定されるミューテックスをロッ 144 * ク解除した際の現在優先度変更処理を行う. 186 145 */ 187 146 extern void mutex_drop_priority(TCB *p_tcb, MTXCB *p_mtxcb); 188 147 189 148 /* 190 * ãã¥ã¼ããã¯ã¹ã®ããã¯149 * ミューテックスのロック 191 150 * 192 * p_tcb ã§æå®ãããã¿ã¹ã¯ã«ï¼p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ããã193 * ã¯ãããï¼151 * p_tcbで指定されるタスクに,p_mtxcbで指定されるミューテックスをロッ 152 * クさせる. 194 153 */ 195 154 extern void mutex_acquire(TCB *p_tcb, MTXCB *p_mtxcb); 196 155 197 156 /* 198 * ãã¥ã¼ããã¯ã¹ã®ããã¯è§£é¤157 * ミューテックスのロック解除 199 158 * 200 * p_mtxcbã§æå®ããããã¥ã¼ããã¯ã¹ãããã¯è§£é¤ããï¼ããã¯è§£é¤ãã 201 * ãã¥ã¼ããã¯ã¹ã«ï¼ããã¯å¾ 202 ã¡ç¶æ 203 ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®ã¿ã¹ã¯ 204 * ã«ãã¥ã¼ããã¯ã¹ãããã¯ãããï¼ 159 * p_mtxcbで指定されるミューテックスをロック解除する.ロック解除した 160 * ミューテックスに,ロック待ち状態のタスクがある場合には,そのタスク 161 * にミューテックスをロックさせる. 205 162 */ 206 163 extern void mutex_release(MTXCB *p_mtxcb); 207 164 208 165 /* 209 * ã¿ã¹ã¯ãããã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ããã¯ã¹ã®ããã¯è§£é¤166 * タスクがロックしているすべてのミューテックスのロック解除 210 167 * 211 * p_tcbã§æå®ãããã¿ã¹ã¯ã«ï¼ãããããã¯ãã¦ãããã¹ã¦ã®ãã¥ã¼ãã㯠212 * ã¹ãããã¯è§£é¤ãããï¼ããã¯è§£é¤ãããã¥ã¼ããã¯ã¹ã«ï¼ããã¯å¾ 213 ã¡ç¶ 214 * æ 215 ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®ã¿ã¹ã¯ã«ãã¥ã¼ããã¯ã¹ãããã¯ãããï¼ 168 * p_tcbで指定されるタスクに,それがロックしているすべてのミューテック 169 * スをロック解除させる.ロック解除したミューテックスに,ロック待ち状 170 * 態のタスクがある場合には,そのタスクにミューテックスをロックさせる. 216 171 * 217 * ãã®é¢æ°ã¯ï¼ã¿ã¹ã¯ã®çµäºæã«ä½¿ããããã®ã§ããããï¼p_tcbã§æå®ãã 218 * ãã¿ã¹ã¯ã®åªå 219 度ãå¤æ´ããå¦çã¯è¡ããªãï¼ãã ãï¼ãã®é¢æ°ã®ä¸ã§ä» 220 * ã®ã¿ã¹ã¯ã®åªå 221 度ãå¤åãï¼å®è¡ãã¹ãã¿ã¹ã¯ãå¤ãããã¨ãããï¼ãã® 222 * ããï¼ãã®é¢æ°ããæ»ã£ãå¾ã«ï¼ãã£ã¹ããããå¿ 223 è¦ãå¤å¥ãã¦ï¼å¿ 224 è¦ãª 225 * å ´åã«ã¯ãã£ã¹ããããè¡ããªããã°ãªããªãï¼ 172 * この関数は,タスクの終了時に使われるものであるため,p_tcbで指定され 173 * るタスクの優先度を変更する処理は行わない.ただし,この関数の中で他 174 * のタスクの優先度が変化し,実行すべきタスクが変わることがある.その 175 * ため,この関数から戻った後に,ディスパッチが必要か判別して,必要な 176 * 場合にはディスパッチを行わなければならない. 226 177 */ 227 178 extern void mutex_release_all(TCB *p_tcb); -
asp3_gr_sakura/trunk/kernel/mutex.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : mutex.trb 630 2016-02-14 11:30:17Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ãã¥ã¼ããã¯ã¹æ©è½ã®çæã¹ã¯ãªãã44 # ミューテックス機能の生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # mtxatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2025ï¼½69 # ï¼TA_NULLï¼TA_TPRIï¼TA_CEILINGã®ãããã§ããªãå ´åï¼53 # mtxatrが無効の場合(E_RSATR)[NGKI2025] 54 # (TA_NULL,TA_TPRI,TA_CEILINGのいずれでもない場合) 70 55 if !(params[:mtxatr] == $TA_NULL || params[:mtxatr] == $TA_TPRI \ 71 56 || params[:mtxatr] == $TA_CEILING) … … 74 59 75 60 if params[:mtxatr] == $TA_CEILING 76 # åªå 77 度ä¸éãã¥ã¼ããã¯ã¹ã®å ´å 78 # ceilpriãæªæå®ã®å ´åã¯ã¨ã©ã¼ã¨ãã 61 # 優先度上限ミューテックスの場合 62 # ceilpriが未指定の場合はエラーとする 79 63 if params[:ceilpri].nil? 80 64 error_api(params, "ceilpri must be specified in %apiname of %mtxid") 81 65 82 # (TMIN_TPRI <= ceilpri && ceilpri <= TMAX_TPRI) ã§ãªãå ´åï¼E_PARï¼83 # ï¼»NGKI2037ï¼½66 # (TMIN_TPRI <= ceilpri && ceilpri <= TMAX_TPRI)でない場合(E_PAR) 67 # [NGKI2037] 84 68 elsif !($TMIN_TPRI <= params[:ceilpri] && params[:ceilpri] <= $TMAX_TPRI) 85 69 error_illegal_id("E_PAR", params, :ceilpri, :mtxid) 86 70 end 87 71 else 88 # åªå 89 度ä¸éãã¥ã¼ããã¯ã¹ã§ãªãå ´å 90 # ceilpriãæå®ããã¦ããå ´åã¯è¦åã¡ãã»ã¼ã¸ãåºã 72 # 優先度上限ミューテックスでない場合 73 # ceilpriが指定されている場合は警告メッセージを出す 91 74 if !params[:ceilpri].nil? 92 75 warning_api(params, "%%ceilpri is ignored in %apiname of %mtxid") … … 102 85 103 86 # 104 # ãã¥ã¼ããã¯ã¹ã«é¢ããæ 105 å ±ã®çæ 87 # ミューテックスに関する情報の生成 106 88 # 107 89 $kernelCfgC.comment_header("Mutex Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/overrun.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ãªã¼ãã©ã³ãã³ãã©æ©è½42 * オーバランハンドラ機能 58 43 */ 59 44 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_OVR_ENTER … … 104 89 105 90 /* 106 * ãªã¼ãã©ã³ã¿ã¤ããåä½ä¸ãã示ããã©ã°91 * オーバランタイマが動作中かを示すフラグ 107 92 */ 108 93 bool_t ovrtimer_flag; 109 94 110 95 /* 111 * ãªã¼ãã©ã³ãã³ãã©æ©è½ã®åæå96 * オーバランハンドラ機能の初期化 112 97 */ 113 98 void … … 120 105 121 106 /* 122 * ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ãã®åä½éå§107 * オーバランハンドラ用タイマの動作開始 123 108 */ 124 109 #ifdef TOPPERS_ovrsta … … 138 123 139 124 /* 140 * ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ãã®åæ¢125 * オーバランハンドラ用タイマの停止 141 126 */ 142 127 #ifdef TOPPERS_ovrstp … … 157 142 158 143 /* 159 * ãªã¼ãã©ã³ãã³ãã©ã®åä½éå§144 * オーバランハンドラの動作開始 160 145 */ 161 146 #ifdef TOPPERS_sta_ovr … … 200 185 201 186 /* 202 * ãªã¼ãã©ã³ãã³ãã©ã®åä½åæ¢187 * オーバランハンドラの動作停止 203 188 */ 204 189 #ifdef TOPPERS_stp_ovr … … 240 225 241 226 /* 242 * ãªã¼ãã©ã³ãã³ãã©ã®ç¶æ 243 åç 244 § 227 * オーバランハンドラの状態参照 245 228 */ 246 229 #ifdef TOPPERS_ref_ovr … … 287 270 288 271 /* 289 * ãªã¼ãã©ã³ãã³ãã©èµ·åã«ã¼ãã³272 * オーバランハンドラ起動ルーチン 290 273 * 291 * ãªã¼ãã©ã³ãã³ãã©ã®å¼åºãå¾ã«ï¼å¼åºãåã®ç¶æ 292 ï¼CPUããã¯ãã©ã°ï¼å² 293 * è¾¼ã¿åªå 294 度ãã¹ã¯ï¼ã«æ»ããªãã®ã¯ï¼ãã®ã«ã¼ãã³ããã®ãªã¿ã¼ã³å¾ã«ï¼ 295 * å²è¾¼ã¿åºå£å¦çã§å 296 ã®ç¶æ 297 ã«æ»ãããã§ããï¼ 274 * オーバランハンドラの呼出し後に,呼出し前の状態(CPUロックフラグ,割 275 * 込み優先度マスク)に戻さないのは,このルーチンからのリターン後に, 276 * 割込み出口処理で元の状態に戻すためである. 298 277 */ 299 278 #ifdef TOPPERS_ovrcal … … 318 297 else { 319 298 /* 320 * ãã®ã«ã¼ãã³ãå¼ã³åºãããåã«ï¼ãªã¼ãã©ã³ãã³ãã©ã®èµ·åã321 * ãã£ã³ã»ã«ãããå ´å299 * このルーチンが呼び出される前に,オーバランハンドラの起動が 300 * キャンセルされた場合 322 301 */ 323 302 unlock_cpu(); -
asp3_gr_sakura/trunk/kernel/overrun.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ãªã¼ãã©ã³ãã³ãã©æ©è½42 * オーバランハンドラ機能 58 43 */ 59 44 … … 65 50 66 51 /* 67 * ãªã¼ãã©ã³ãã³ãã©åæåãããã¯52 * オーバランハンドラ初期化ブロック 68 53 */ 69 54 typedef struct overrun_handler_initialization_block { 70 ATR ovratr; /* ãªã¼ãã©ã³ãã³ãã©å±æ§*/71 OVRHDR ovrhdr; /* ãªã¼ãã©ã³ãã³ãã©ã®èµ·åçªå°*/55 ATR ovratr; /* オーバランハンドラ属性 */ 56 OVRHDR ovrhdr; /* オーバランハンドラの起動番地 */ 72 57 } OVRINIB; 73 58 74 59 /* 75 * ãªã¼ãã©ã³ãã³ãã©åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼60 * オーバランハンドラ初期化ブロックのエリア(kernel_cfg.c) 76 61 */ 77 62 extern const OVRINIB ovrinib[]; 78 63 79 64 /* 80 * ãªã¼ãã©ã³ã¿ã¤ããåä½ä¸ãã示ããã©ã°65 * オーバランタイマが動作中かを示すフラグ 81 66 */ 82 67 extern bool_t ovrtimer_flag; 83 68 84 69 /* 85 * ãªã¼ãã©ã³ãã³ãã©æ©è½ã®åæå70 * オーバランハンドラ機能の初期化 86 71 */ 87 72 extern void initialize_overrun(void); 88 73 89 74 /* 90 * ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ãã®åä½éå§75 * オーバランハンドラ用タイマの動作開始 91 76 */ 92 77 extern void ovrtimer_start(void); 93 78 94 79 /* 95 * ãªã¼ãã©ã³ãã³ãã©ç¨ã¿ã¤ãã®åæ¢80 * オーバランハンドラ用タイマの停止 96 81 */ 97 82 extern void ovrtimer_stop(uint_t int_num); 98 83 99 84 /* 100 * ãªã¼ãã©ã³ãã³ãã©èµ·åã«ã¼ãã³85 * オーバランハンドラ起動ルーチン 101 86 */ 102 87 extern void call_ovrhdr(void); -
asp3_gr_sakura/trunk/kernel/overrun.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : overrun.trb 581 2016-02-04 06:23:23Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ãªã¼ãã©ã³ãã³ãã©æ©è½ã®çæã¹ã¯ãªãã44 # オーバランハンドラ機能の生成スクリプト 60 45 # 61 46 62 47 # 63 # ãªã¼ãã©ã³ãã³ãã©ããµãã¼ãããã¦ããªãå ´åã®ã¨ã©ã¼ãã§ãã¯48 # オーバランハンドラがサポートされていない場合のエラーチェック 64 49 # 65 50 if !$TOPPERS_SUPPORT_OVRHDR … … 70 55 71 56 # 72 # ãªã¼ãã©ã³ãã³ãã©æ©è½ã«é¢ããæ 73 å ±ã®çæ 57 # オーバランハンドラ機能に関する情報の生成 74 58 # 75 59 $kernelCfgC.comment_header("Overrun Handler Functions") 76 60 77 61 if $cfgData[:DEF_OVR].size() > 0 78 # éçAPIãDEF_OVRããè¤æ°ããï¼E_OBJï¼ï¼»NGKI2619ï¼½62 # 静的API「DEF_OVR」が複数ある(E_OBJ)[NGKI2619] 79 63 if $cfgData[:DEF_OVR].size() > 1 80 64 error("E_OBJ: too many DEF_OVR") … … 83 67 params = $cfgData[:DEF_OVR][1] 84 68 85 # ovratr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI2612ï¼½86 # ï¼TA_NULLã§ãªãå ´åï¼69 # ovratrが無効の場合(E_RSATR)[NGKI2612] 70 #(TA_NULLでない場合) 87 71 if params[:ovratr] != $TA_NULL 88 72 error_illegal("E_RSATR", params, :ovratr) 89 73 end 90 74 91 # ãªã¼ãã©ã³ãã³ãã©åæåãããã¯ã®çæ75 # オーバランハンドラ初期化ブロックの生成 92 76 $kernelCfgC.add("const OVRINIB _kernel_ovrinib[1] = {") 93 77 $kernelCfgC.add("\t{ (#{params[:ovratr]}), (OVRHDR)(#{params[:ovrhdr]}) }") 94 78 $kernelCfgC.add2("};") 95 79 96 # ãªã¼ãã©ã³ãã³ãã©æ©è½åæåé¢æ°ã®è¿½å80 # オーバランハンドラ機能初期化関数の追加 97 81 $initializeFunctions.push("_kernel_initialize_overrun();") 98 82 else -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/pridataq.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * åªå 60 度ãã¼ã¿ãã¥ã¼æ©è½ 44 * 優先度データキュー機能 61 45 */ 62 46 … … 68 52 69 53 /* 70 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 71 55 */ 72 56 #ifndef LOG_ACRE_PDQ_ENTER … … 151 135 152 136 /* 153 * åªå 154 度ãã¼ã¿ãã¥ã¼ã®æ° 137 * 優先度データキューの数 155 138 */ 156 139 #define tnum_pdq ((uint_t)(tmax_pdqid - TMIN_PDQID + 1)) … … 158 141 159 142 /* 160 * åªå 161 度ãã¼ã¿ãã¥ã¼IDããåªå 162 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ãåãåºãã 163 * ãã®ãã¯ã 143 * 優先度データキューIDから優先度データキュー管理ブロックを取り出すた 144 * めのマクロ 164 145 */ 165 146 #define INDEX_PDQ(pdqid) ((uint_t)((pdqid) - TMIN_PDQID)) … … 169 150 170 151 /* 171 * 使ç¨ãã¦ããªãåªå 172 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ãªã¹ã 152 * 使用していない優先度データキュー管理ブロックのリスト 173 153 */ 174 154 QUEUE free_pdqcb; 175 155 176 156 /* 177 * åªå 178 度ãã¼ã¿ãã¥ã¼æ©è½ã®åæå 157 * 優先度データキュー機能の初期化 179 158 */ 180 159 void … … 208 187 209 188 /* 210 * åªå 211 度ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´ 189 * 優先度データキュー管理領域へのデータの格納 212 190 */ 213 191 #ifdef TOPPERS_pdqenq … … 246 224 247 225 /* 248 * åªå 249 度ãã¼ã¿ãã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã 226 * 優先度データキュー管理領域からのデータの取出し 250 227 */ 251 228 #ifdef TOPPERS_pdqdeq … … 270 247 271 248 /* 272 * åªå 273 度ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿éä¿¡ 249 * 優先度データキューへのデータ送信 274 250 */ 275 251 #ifdef TOPPERS_pdqsnd … … 299 275 300 276 /* 301 * åªå 302 度ãã¼ã¿ãã¥ã¼ããã®ãã¼ã¿åä¿¡ 277 * 優先度データキューからのデータ受信 303 278 */ 304 279 #ifdef TOPPERS_pdqrcv … … 337 312 338 313 /* 339 * åªå 340 度ãã¼ã¿ãã¥ã¼ã®çæ 314 * 優先度データキューの生成 341 315 */ 342 316 #ifdef TOPPERS_acre_pdq … … 403 377 404 378 /* 405 * åªå 406 度ãã¼ã¿ãã¥ã¼ã®åé¤ 379 * 優先度データキューの削除 407 380 */ 408 381 #ifdef TOPPERS_del_pdq … … 451 424 452 425 /* 453 * åªå 454 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ 426 * 優先度データキューへの送信 455 427 */ 456 428 #ifdef TOPPERS_snd_pdq … … 503 475 504 476 /* 505 * åªå 506 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ãã¼ãªã³ã°ï¼ 477 * 優先度データキューへの送信(ポーリング) 507 478 */ 508 479 #ifdef TOPPERS_psnd_pdq … … 551 522 552 523 /* 553 * åªå 554 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 524 * 優先度データキューへの送信(タイムアウトあり) 555 525 */ 556 526 #ifdef TOPPERS_tsnd_pdq … … 609 579 610 580 /* 611 * åªå 612 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ 581 * 優先度データキューからの受信 613 582 */ 614 583 #ifdef TOPPERS_rcv_pdq … … 662 631 663 632 /* 664 * åªå 665 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ãã¼ãªã³ã°ï¼ 633 * 優先度データキューからの受信(ポーリング) 666 634 */ 667 635 #ifdef TOPPERS_prcv_pdq … … 701 669 702 670 /* 703 * åªå 704 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 671 * 優先度データキューからの受信(タイムアウトあり) 705 672 */ 706 673 #ifdef TOPPERS_trcv_pdq … … 759 726 760 727 /* 761 * åªå 762 度ãã¼ã¿ãã¥ã¼ã®ååæå 728 * 優先度データキューの再初期化 763 729 */ 764 730 #ifdef TOPPERS_ini_pdq … … 801 767 802 768 /* 803 * åªå 804 度ãã¼ã¿ãã¥ã¼ã®ç¶æ 805 åç 806 § 769 * 優先度データキューの状態参照 807 770 */ 808 771 #ifdef TOPPERS_ref_pdq -
asp3_gr_sakura/trunk/kernel/pridataq.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * åªå 60 度ãã¼ã¿ãã¥ã¼æ©è½ 44 * 優先度データキュー機能 61 45 */ 62 46 … … 69 53 70 54 /* 71 * åªå 72 度ãã¼ã¿ç®¡çããã㯠55 * 優先度データ管理ブロック 73 56 */ 74 57 typedef struct pridata_management_block PDQMB; 75 58 76 59 struct pridata_management_block { 77 PDQMB *p_next; /* 次ã®ãã¼ã¿ */ 78 intptr_t data; /* ãã¼ã¿æ¬ä½ */ 79 PRI datapri; /* ãã¼ã¿åªå 80 度 */ 60 PDQMB *p_next; /* 次のデータ */ 61 intptr_t data; /* データ本体 */ 62 PRI datapri; /* データ優先度 */ 81 63 }; 82 64 83 65 /* 84 * åªå 85 度ãã¼ã¿ãã¥ã¼åæåããã㯠66 * 優先度データキュー初期化ブロック 86 67 * 87 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 88 ±éé¨å 89 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 90 * æåã®ãã£ã¼ã«ããå 91 ±éã«ãªã£ã¦ããï¼ 68 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 69 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 70 * 最初のフィールドが共通になっている. 92 71 */ 93 72 typedef struct pridataq_initialization_block { 94 ATR pdqatr; /* åªå 95 度ãã¼ã¿ãã¥ã¼å±æ§ */ 96 uint_t pdqcnt; /* åªå 97 度ãã¼ã¿ãã¥ã¼ã®å®¹é */ 98 PRI maxdpri; /* ãã¼ã¿åªå 99 度ã®æå¤§å¤ */ 100 PDQMB *p_pdqmb; /* åªå 101 度ãã¼ã¿ãã¥ã¼ç®¡çé åã®å 102 é çªå° */ 73 ATR pdqatr; /* 優先度データキュー属性 */ 74 uint_t pdqcnt; /* 優先度データキューの容量 */ 75 PRI maxdpri; /* データ優先度の最大値 */ 76 PDQMB *p_pdqmb; /* 優先度データキュー管理領域の先頭番地 */ 103 77 } PDQINIB; 104 78 105 79 /* 106 * åªå 107 度ãã¼ã¿ãã¥ã¼ç®¡çããã㯠80 * 優先度データキュー管理ブロック 108 81 * 109 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 110 ±éé¨åï¼WOBJCBï¼ 111 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 112 * ãã£ã¼ã«ããå 113 ±éã«ãªã£ã¦ããï¼ 82 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 83 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 84 * フィールドが共通になっている. 114 85 */ 115 86 typedef struct pridataq_control_block { 116 QUEUE swait_queue; /* åªå 117 度ãã¼ã¿ãã¥ã¼éä¿¡å¾ 118 ã¡ãã¥ã¼ */ 119 const PDQINIB *p_pdqinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 120 QUEUE rwait_queue; /* åªå 121 度ãã¼ã¿ãã¥ã¼åä¿¡å¾ 122 ã¡ãã¥ã¼ */ 123 uint_t count; /* åªå 124 度ãã¼ã¿ãã¥ã¼ä¸ã®ãã¼ã¿ã®æ° */ 125 PDQMB *p_head; /* æåã®ãã¼ã¿ */ 126 uint_t unused; /* æªä½¿ç¨ãã¼ã¿ç®¡çãããã¯ã®å 127 é */ 128 PDQMB *p_freelist; /* æªå²å½ã¦ãã¼ã¿ç®¡çãããã¯ã®ãªã¹ã */ 87 QUEUE swait_queue; /* 優先度データキュー送信待ちキュー */ 88 const PDQINIB *p_pdqinib; /* 初期化ブロックへのポインタ */ 89 QUEUE rwait_queue; /* 優先度データキュー受信待ちキュー */ 90 uint_t count; /* 優先度データキュー中のデータの数 */ 91 PDQMB *p_head; /* 最初のデータ */ 92 uint_t unused; /* 未使用データ管理ブロックの先頭 */ 93 PDQMB *p_freelist; /* 未割当てデータ管理ブロックのリスト */ 129 94 } PDQCB; 130 95 131 96 /* 132 * åªå 133 度ãã¼ã¿ãã¥ã¼å¾ 134 ã¡æ 135 å ±ãããã¯ã®å®ç¾© 97 * 優先度データキュー待ち情報ブロックの定義 136 98 * 137 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 138 ã¡æ 139 å ±ãããã¯ã®å 140 ±éé¨å 141 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 142 * æåã®2ã¤ã®ãã£ã¼ã«ããå 143 ±éã«ãªã£ã¦ããï¼ 99 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 100 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 101 * 最初の2つのフィールドが共通になっている. 144 102 */ 145 103 typedef struct pridataq_send_waiting_information { 146 WINFO winfo; /* æ¨æºã®å¾ 147 ã¡æ 148 å ±ããã㯠*/ 149 PDQCB *p_pdqcb; /* å¾ 150 ã£ã¦ããåªå 151 度ãã¼ã¿ãã¥ã¼ã®ç®¡çãããã¯*/ 152 intptr_t data; /* éä¿¡ãã¼ã¿ */ 153 PRI datapri; /* ãã¼ã¿åªå 154 度 */ 104 WINFO winfo; /* 標準の待ち情報ブロック */ 105 PDQCB *p_pdqcb; /* 待っている優先度データキューの管理ブロック*/ 106 intptr_t data; /* 送信データ */ 107 PRI datapri; /* データ優先度 */ 155 108 } WINFO_SPDQ; 156 109 157 110 typedef struct pridataq_receive_waiting_information { 158 WINFO winfo; /* æ¨æºã®å¾ 159 ã¡æ 160 å ±ããã㯠*/ 161 PDQCB *p_pdqcb; /* å¾ 162 ã£ã¦ããåªå 163 度ãã¼ã¿ãã¥ã¼ã®ç®¡çãããã¯*/ 164 intptr_t data; /* åä¿¡ãã¼ã¿ */ 165 PRI datapri; /* ãã¼ã¿åªå 166 度 */ 111 WINFO winfo; /* 標準の待ち情報ブロック */ 112 PDQCB *p_pdqcb; /* 待っている優先度データキューの管理ブロック*/ 113 intptr_t data; /* 受信データ */ 114 PRI datapri; /* データ優先度 */ 167 115 } WINFO_RPDQ; 168 116 169 117 /* 170 * 使ç¨ãã¦ããªãåªå 171 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ãªã¹ã 118 * 使用していない優先度データキュー管理ブロックのリスト 172 119 */ 173 120 extern QUEUE free_pdqcb; 174 121 175 122 /* 176 * åªå 177 度ãã¼ã¿ãã¥ã¼IDã®æ大å¤ï¼kernel_cfg.cï¼ 123 * 優先度データキューIDの最大値(kernel_cfg.c) 178 124 */ 179 125 extern const ID tmax_pdqid; … … 181 127 182 128 /* 183 * åªå 184 度ãã¼ã¿ãã¥ã¼åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼ 129 * 優先度データキュー初期化ブロックのエリア(kernel_cfg.c) 185 130 */ 186 131 extern const PDQINIB pdqinib_table[]; … … 188 133 189 134 /* 190 * åªå 191 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼ 135 * 優先度データキュー管理ブロックのエリア(kernel_cfg.c) 192 136 */ 193 137 extern PDQCB pdqcb_table[]; 194 138 195 139 /* 196 * åªå 197 度ãã¼ã¿ãã¥ã¼ç®¡çãããã¯ããåªå 198 度ãã¼ã¿ãã¥ã¼IDãåãåºãã 199 * ãã®ãã¯ã 140 * 優先度データキュー管理ブロックから優先度データキューIDを取り出すた 141 * めのマクロ 200 142 */ 201 143 #define PDQID(p_pdqcb) ((ID)(((p_pdqcb) - pdqcb_table) + TMIN_PDQID)) 202 144 203 145 /* 204 * åªå 205 度ãã¼ã¿ãã¥ã¼æ©è½ã®åæå 146 * 優先度データキュー機能の初期化 206 147 */ 207 148 extern void initialize_pridataq(void); 208 149 209 150 /* 210 * åªå 211 度ãã¼ã¿ãã¥ã¼ç®¡çé åã¸ã®ãã¼ã¿ã®æ ¼ç´ 151 * 優先度データキュー管理領域へのデータの格納 212 152 */ 213 153 extern void enqueue_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri); 214 154 215 155 /* 216 * åªå 217 度ãã¼ã¿ãã¥ã¼ç®¡çé åããã®ãã¼ã¿ã®ååºã 156 * 優先度データキュー管理領域からのデータの取出し 218 157 */ 219 158 extern void dequeue_pridata(PDQCB *p_pdqcb, intptr_t *p_data, PRI *p_datapri); 220 159 221 160 /* 222 * åªå 223 度ãã¼ã¿ãã¥ã¼ã¸ã®ãã¼ã¿éä¿¡ 161 * 優先度データキューへのデータ送信 224 162 */ 225 163 extern bool_t send_pridata(PDQCB *p_pdqcb, intptr_t data, PRI datapri); 226 164 227 165 /* 228 * åªå 229 度ãã¼ã¿ãã¥ã¼ããã®ãã¼ã¿åä¿¡ 166 * 優先度データキューからのデータ受信 230 167 */ 231 168 extern bool_t receive_pridata(PDQCB *p_pdqcb, intptr_t *p_data, -
asp3_gr_sakura/trunk/kernel/pridataq.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : pridataq.trb 668 2016-03-03 13:57:53Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # åªå 60 度ãã¼ã¿ãã¥ã¼æ©è½ã®çæã¹ã¯ãªãã 44 # 優先度データキュー機能の生成スクリプト 61 45 # 62 46 … … 67 51 68 52 def prepare(key, params) 69 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®53 # パラメータが省略された時のデフォルト値の設定 70 54 params[:pdqmb] ||= "NULL" 71 55 72 # pdqatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1804ï¼½73 # ï¼TA_TPRI以å¤ã®ããããã»ããããã¦ããå ´åï¼56 # pdqatrが無効の場合(E_RSATR)[NGKI1804] 57 #(TA_TPRI以外のビットがセットされている場合) 74 58 if (params[:pdqatr] & ~($TA_TPRI)) != 0 75 59 error_illegal_id("E_RSATR", params, :pdqatr, :pdqid) 76 60 end 77 61 78 # (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI) ã§ãªãå ´åï¼E_PARï¼79 # ï¼»NGKI1819ï¼½62 # (TMIN_DPRI <= maxdpri && maxdpri <= TMAX_DPRI)でない場合(E_PAR) 63 # [NGKI1819] 80 64 if !($TMIN_DPRI <= params[:maxdpri] && params[:maxdpri] <= $TMAX_DPRI) 81 65 error_illegal_id("E_PAR", params, :maxdpri, :pdqid) 82 66 end 83 67 84 # pdqmb ãNULLã§ãªãå ´åï¼E_NOSPTï¼ï¼»ASPS0142ï¼½68 # pdqmbがNULLでない場合(E_NOSPT)[ASPS0142] 85 69 if params[:pdqmb] != "NULL" 86 70 error_illegal_id("E_NOSPT", params, :pdqmb, :pdqid) 87 71 end 88 72 89 # åªå 90 度ãã¼ã¿ãã¥ã¼ç®¡çé å 73 # 優先度データキュー管理領域 91 74 if params[:pdqcnt] > 0 92 75 pdqmbName = "_kernel_pdqmb_#{params[:pdqid]}" … … 105 88 106 89 # 107 # åªå 108 度ãã¼ã¿ãã¥ã¼ã«é¢ããæ 109 å ±ã®çæ 90 # 優先度データキューに関する情報の生成 110 91 # 111 92 $kernelCfgC.comment_header("Priority Dataqueue Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/semaphore.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã»ããã©æ©è½44 * セマフォ機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_SEM_ENTER … … 134 119 135 120 /* 136 * ã»ããã©ã®æ°121 * セマフォの数 137 122 */ 138 123 #define tnum_sem ((uint_t)(tmax_semid - TMIN_SEMID + 1)) … … 140 125 141 126 /* 142 * ã»ããã©IDããã»ããã©ç®¡çãããã¯ãåãåºãããã®ãã¯ã127 * セマフォIDからセマフォ管理ブロックを取り出すためのマクロ 143 128 */ 144 129 #define INDEX_SEM(semid) ((uint_t)((semid) - TMIN_SEMID)) … … 148 133 149 134 /* 150 * 使ç¨ãã¦ããªãã»ããã©ç®¡çãããã¯ã®ãªã¹ã135 * 使用していないセマフォ管理ブロックのリスト 151 136 */ 152 137 QUEUE free_semcb; 153 138 154 139 /* 155 * ã»ããã©æ©è½ã®åæå140 * セマフォ機能の初期化 156 141 */ 157 142 void … … 181 166 182 167 /* 183 * ã»ããã©ã®çæ168 * セマフォの生成 184 169 */ 185 170 #ifdef TOPPERS_acre_sem … … 230 215 231 216 /* 232 * ã»ããã©ã®åé¤217 * セマフォの削除 233 218 */ 234 219 #ifdef TOPPERS_del_sem … … 273 258 274 259 /* 275 * ã»ããã©è³æºã®è¿å´260 * セマフォ資源の返却 276 261 */ 277 262 #ifdef TOPPERS_sig_sem … … 323 308 324 309 /* 325 * ã»ããã©è³æºã®ç²å¾310 * セマフォ資源の獲得 326 311 */ 327 312 #ifdef TOPPERS_wai_sem … … 366 351 367 352 /* 368 * ã»ããã©è³æºã®ç²å¾ï¼ãã¼ãªã³ã°ï¼353 * セマフォ資源の獲得(ポーリング) 369 354 */ 370 355 #ifdef TOPPERS_pol_sem … … 402 387 403 388 /* 404 * ã»ããã©è³æºã®ç²å¾ï¼ã¿ã¤ã ã¢ã¦ãããï¼389 * セマフォ資源の獲得(タイムアウトあり) 405 390 */ 406 391 #ifdef TOPPERS_twai_sem … … 451 436 452 437 /* 453 * ã»ããã©ã®ååæå438 * セマフォの再初期化 454 439 */ 455 440 #ifdef TOPPERS_ini_sem … … 488 473 489 474 /* 490 * ã»ããã©ã®ç¶æ 491 åç 492 § 475 * セマフォの状態参照 493 476 */ 494 477 #ifdef TOPPERS_ref_sem -
asp3_gr_sakura/trunk/kernel/semaphore.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã»ããã©æ©è½44 * セマフォ機能 60 45 */ 61 46 … … 68 53 69 54 /* 70 * ã»ããã©åæåãããã¯55 * セマフォ初期化ブロック 71 56 * 72 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 73 ±éé¨å 74 * ï¼WOBJINIBï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 75 * æåã®ãã£ã¼ã«ããå 76 ±éã«ãªã£ã¦ããï¼ 57 * この構造体は,同期・通信オブジェクトの初期化ブロックの共通部分 58 * (WOBJINIB)を拡張(オブジェクト指向言語の継承に相当)したもので, 59 * 最初のフィールドが共通になっている. 77 60 */ 78 61 typedef struct semaphore_initialization_block { 79 ATR sematr; /* ã»ããã©å±æ§*/80 uint_t isemcnt; /* ã»ããã©ã®è³æºæ°ã®åæå¤*/81 uint_t maxsem; /* ã»ããã©ã®æ大è³æºæ°*/62 ATR sematr; /* セマフォ属性 */ 63 uint_t isemcnt; /* セマフォの資源数の初期値 */ 64 uint_t maxsem; /* セマフォの最大資源数 */ 82 65 } SEMINIB; 83 66 84 67 /* 85 * ã»ããã©ç®¡çãããã¯68 * セマフォ管理ブロック 86 69 * 87 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 88 ±éé¨åï¼WOBJCBï¼ 89 * ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼æåã®2ã¤ã® 90 * ãã£ã¼ã«ããå 91 ±éã«ãªã£ã¦ããï¼ 70 * この構造体は,同期・通信オブジェクトの管理ブロックの共通部分(WOBJCB) 71 * を拡張(オブジェクト指向言語の継承に相当)したもので,最初の2つの 72 * フィールドが共通になっている. 92 73 */ 93 74 typedef struct semaphore_control_block { 94 QUEUE wait_queue; /* ã»ããã©å¾ 95 ã¡ãã¥ã¼ */ 96 const SEMINIB *p_seminib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 97 uint_t semcnt; /* ã»ããã©ç¾å¨ã«ã¦ã³ãå¤ */ 75 QUEUE wait_queue; /* セマフォ待ちキュー */ 76 const SEMINIB *p_seminib; /* 初期化ブロックへのポインタ */ 77 uint_t semcnt; /* セマフォ現在カウント値 */ 98 78 } SEMCB; 99 79 100 80 /* 101 * ã»ããã©å¾ 102 ã¡æ 103 å ±ãããã¯ã®å®ç¾© 81 * セマフォ待ち情報ブロックの定義 104 82 * 105 * ãã®æ§é ä½ã¯ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 106 ã¡æ 107 å ±ãããã¯ã®å 108 ±éé¨å 109 * ï¼WINFO_WOBJï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ï¼ 110 * ãã¹ã¦ã®ãã£ã¼ã«ããå 111 ±éã«ãªã£ã¦ããï¼ 83 * この構造体は,同期・通信オブジェクトの待ち情報ブロックの共通部分 84 * (WINFO_WOBJ)を拡張(オブジェクト指向言語の継承に相当)したもので, 85 * すべてのフィールドが共通になっている. 112 86 */ 113 87 typedef struct semaphore_waiting_information { 114 WINFO winfo; /* æ¨æºã®å¾ 115 ã¡æ 116 å ±ããã㯠*/ 117 SEMCB *p_semcb; /* å¾ 118 ã£ã¦ããã»ããã©ã®ç®¡çããã㯠*/ 88 WINFO winfo; /* 標準の待ち情報ブロック */ 89 SEMCB *p_semcb; /* 待っているセマフォの管理ブロック */ 119 90 } WINFO_SEM; 120 91 121 92 /* 122 * 使ç¨ãã¦ããªãã»ããã©ç®¡çãããã¯ã®ãªã¹ã93 * 使用していないセマフォ管理ブロックのリスト 123 94 */ 124 95 extern QUEUE free_semcb; 125 96 126 97 /* 127 * ã»ããã©IDã®æ大å¤ï¼kernel_cfg.cï¼98 * セマフォIDの最大値(kernel_cfg.c) 128 99 */ 129 100 extern const ID tmax_semid; … … 131 102 132 103 /* 133 * ã»ããã©åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼104 * セマフォ初期化ブロックのエリア(kernel_cfg.c) 134 105 */ 135 106 extern const SEMINIB seminib_table[]; … … 137 108 138 109 /* 139 * ã»ããã©ç®¡çãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼110 * セマフォ管理ブロックのエリア(kernel_cfg.c) 140 111 */ 141 112 extern SEMCB semcb_table[]; 142 113 143 114 /* 144 * ã»ããã©ç®¡çãããã¯ããã»ããã©IDãåãåºãããã®ãã¯ã115 * セマフォ管理ブロックからセマフォIDを取り出すためのマクロ 145 116 */ 146 117 #define SEMID(p_semcb) ((ID)(((p_semcb) - semcb_table) + TMIN_SEMID)) 147 118 148 119 /* 149 * ã»ããã©æ©è½ã®åæå120 * セマフォ機能の初期化 150 121 */ 151 122 extern void initialize_semaphore(void); -
asp3_gr_sakura/trunk/kernel/semaphore.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : semaphore.trb 588 2016-02-05 12:54:58Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã»ããã©æ©è½ã®çæã¹ã¯ãªãã44 # セマフォ機能の生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # sematr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1456ï¼½69 # ï¼TA_TPRI以å¤ã®ããããã»ããããã¦ããå ´åï¼53 # sematrが無効の場合(E_RSATR)[NGKI1456] 54 #(TA_TPRI以外のビットがセットされている場合) 70 55 if (params[:sematr] & ~($TA_TPRI)) != 0 71 56 error_illegal_id("E_RSATR", params, :sematr, :semid) 72 57 end 73 58 74 # (1 <= maxsem && maxsem <= TMAX_MAXSEM) ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI1468ï¼½59 # (1 <= maxsem && maxsem <= TMAX_MAXSEM)でない場合(E_PAR)[NGKI1468] 75 60 if !(1 <= params[:maxsem] && params[:maxsem] <= $TMAX_MAXSEM) 76 61 error_illegal_id("E_PAR", params, :maxsem, :semid) 77 62 end 78 63 79 # (0 <= isemcnt && isemcnt <= maxsem) ã§ãªãå ´åï¼E_PARï¼ï¼»NGKI1466ï¼½64 # (0 <= isemcnt && isemcnt <= maxsem)でない場合(E_PAR)[NGKI1466] 80 65 if !(0 <= params[:isemcnt] && params[:isemcnt] <= params[:maxsem]) 81 66 error_wrong_id("E_PAR", params, :isemcnt, :semid, "too large") … … 89 74 90 75 # 91 # ã»ããã©ã«é¢ããæ 92 å ±ã®çæ 76 # セマフォに関する情報の生成 93 77 # 94 78 $kernelCfgC.comment_header("Semaphore Functions") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/startup.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã«ã¼ãã«ã®åæåã¨çµäºå¦ç44 * カーネルの初期化と終了処理 60 45 */ 61 46 … … 65 50 66 51 /* 67 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©52 * トレースログマクロのデフォルト定義 68 53 */ 69 54 #ifndef LOG_KER_ENTER … … 86 71 87 72 /* 88 * ã«ã¼ãã«åä½ç¶æ 89 ãã©ã° 73 * カーネル動作状態フラグ 90 74 * 91 * ã¹ã¿ã¼ãã¢ããã«ã¼ãã³ã§ï¼falseï¼ï¼0ï¼ã«åæåããããã¨ãæå¾ 92 ã㦠93 * ããï¼ 75 * スタートアップルーチンで,false(=0)に初期化されることを期待して 76 * いる. 94 77 */ 95 78 bool_t kerflg = false; 96 79 97 80 /* 98 * ã«ã¼ãã«ã®èµ·å81 * カーネルの起動 99 82 */ 100 83 void … … 102 85 { 103 86 /* 104 * TECS ã®åæå87 * TECSの初期化 105 88 */ 106 89 #ifndef TOPPERS_OMIT_TECS … … 109 92 110 93 /* 111 * ã¿ã¼ã²ããä¾åã®åæå94 * ターゲット依存の初期化 112 95 */ 113 96 target_initialize(); 114 97 115 98 /* 116 * åã¢ã¸ã¥ã¼ã«ã®åæå99 * 各モジュールの初期化 117 100 * 118 * ã¿ã¤ã ã¤ãã³ã管çã¢ã¸ã¥ã¼ã«ã¯ä»ã®ã¢ã¸ã¥ã¼ã«ããå 119 ã«åæå 120 * ããå¿ 121 è¦ãããï¼ 101 * タイムイベント管理モジュールは他のモジュールより先に初期化 102 * する必要がある. 122 103 */ 123 104 initialize_kmm(); 124 initialize_tmevt(); /* ï¼»ASPD1061ï¼½*/105 initialize_tmevt(); /*[ASPD1061]*/ 125 106 initialize_object(); 126 107 127 108 /* 128 * åæåã«ã¼ãã³ã®å®è¡109 * 初期化ルーチンの実行 129 110 */ 130 111 call_inirtn(); 131 112 132 113 /* 133 * é«å解è½ã¿ã¤ãã®è¨å®134 */ 135 current_hrtcnt = target_hrt_get_current(); /* ï¼»ASPD1063ï¼½*/136 set_hrt_event(); /* ï¼»ASPD1064ï¼½*/137 138 /* 139 * ã«ã¼ãã«åä½ã®éå§114 * 高分解能タイマの設定 115 */ 116 current_hrtcnt = target_hrt_get_current(); /*[ASPD1063]*/ 117 set_hrt_event(); /*[ASPD1064]*/ 118 119 /* 120 * カーネル動作の開始 140 121 */ 141 122 kerflg = true; … … 148 129 149 130 /* 150 * ã«ã¼ãã«ã®çµäº131 * カーネルの終了 151 132 */ 152 133 #ifdef TOPPERS_ext_ker … … 160 141 161 142 /* 162 * å²è¾¼ã¿ããã¯ç¶æ 163 ã«ç§»è¡ 143 * 割込みロック状態に移行 164 144 */ 165 145 SIL_LOC_INT(); 166 146 167 147 /* 168 * ã«ã¼ãã«åä½ã®çµäº148 * カーネル動作の終了 169 149 */ 170 150 LOG_KER_LEAVE(); … … 172 152 173 153 /* 174 * ã«ã¼ãã«ã®çµäºå¦çã®å¼åºã154 * カーネルの終了処理の呼出し 175 155 * 176 * éã¿ã¹ã¯ã³ã³ããã¹ãã«åãæãã¦ï¼exit_kernelãå¼ã³åºãï¼156 * 非タスクコンテキストに切り換えて,exit_kernelを呼び出す. 177 157 */ 178 158 call_exit_kernel(); 179 159 180 160 /* 181 * ã³ã³ãã¤ã©ã®è¦å対çï¼ããã¸æ¥ããã¨ã¯ãªãã¯ãï¼161 * コンパイラの警告対策(ここへ来ることはないはず) 182 162 */ 183 163 SIL_UNL_INT(); … … 187 167 188 168 /* 189 * ã«ã¼ãã«ã®çµäºå¦ç169 * カーネルの終了処理 190 170 */ 191 171 void … … 193 173 { 194 174 /* 195 * çµäºå¦çã«ã¼ãã³ã®å®è¡175 * 終了処理ルーチンの実行 196 176 */ 197 177 call_terrtn(); 198 178 199 179 /* 200 * ã¿ã¼ã²ããä¾åã®çµäºå¦ç180 * ターゲット依存の終了処理 201 181 */ 202 182 target_exit(); … … 207 187 208 188 /* 209 * ã«ã¼ãã«ã®å²ãä»ããã¡ã¢ãªé åã®ç®¡ç189 * カーネルの割り付けるメモリ領域の管理 210 190 * 211 * ã¡ã¢ãªé åãå 212 é ããé ã«å²ãå½ã¦ï¼è§£æ¾ãããã¡ã¢ãªé åãåå©ç¨ã㪠213 * ãã¡ã¢ãªç®¡çã¢ã¸ã¥ã¼ã«ï¼ 191 * メモリ領域を先頭から順に割り当て,解放されたメモリ領域を再利用しな 192 * いメモリ管理モジュール. 214 193 */ 215 194 #ifdef TOPPERS_kermem -
asp3_gr_sakura/trunk/kernel/sys_manage.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã·ã¹ãã ç¶æ 60 管çæ©è½ 44 * システム状態管理機能 61 45 */ 62 46 … … 67 51 68 52 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©53 * トレースログマクロのデフォルト定義 70 54 */ 71 55 #ifndef LOG_ROT_RDQ_ENTER … … 174 158 175 159 /* 176 * ã¿ã¹ã¯ã®åªå 177 é ä½ã®å転[NGKI3548ï¼½ 160 * タスクの優先順位の回転[NGKI3548] 178 161 */ 179 162 #ifdef TOPPERS_rot_rdq … … 186 169 187 170 LOG_ROT_RDQ_ENTER(tskpri); 188 CHECK_UNL(); /* ï¼»NGKI2684ï¼½*/171 CHECK_UNL(); /*[NGKI2684]*/ 189 172 if (tskpri == TPRI_SELF && !sense_context()) { 190 pri = p_runtsk->bpriority; /* ï¼»NGKI2689ï¼½*/173 pri = p_runtsk->bpriority; /*[NGKI2689]*/ 191 174 } 192 175 else { 193 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI2685ï¼½*/176 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI2685]*/ 194 177 pri = INT_PRIORITY(tskpri); 195 178 } … … 216 199 217 200 /* 218 * å®è¡ç¶æ 219 ã®ã¿ã¹ã¯IDã®åç 220 §ï¼»NGKI3550ï¼½ 201 * 実行状態のタスクIDの参照[NGKI3550] 221 202 */ 222 203 #ifdef TOPPERS_get_tid … … 228 209 229 210 LOG_GET_TID_ENTER(p_tskid); 230 CHECK_UNL(); /* ï¼»NGKI2707ï¼½*/211 CHECK_UNL(); /*[NGKI2707]*/ 231 212 232 213 lock_cpu(); … … 243 224 244 225 /* 245 * å®è¡ã§ããã¿ã¹ã¯ã®æ°ã®åç 246 §ï¼»NGKI3623ï¼½ 226 * 実行できるタスクの数の参照[NGKI3623] 247 227 */ 248 228 #ifdef TOPPERS_get_lod … … 256 236 257 237 LOG_GET_LOD_ENTER(p_tskid, p_load); 258 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3624][NGKI3625ï¼½*/238 CHECK_TSKCTX_UNL(); /*[NGKI3624][NGKI3625]*/ 259 239 if (tskpri == TPRI_SELF) { 260 pri = p_runtsk->bpriority; /* ï¼»NGKI3631ï¼½*/240 pri = p_runtsk->bpriority; /*[NGKI3631]*/ 261 241 } 262 242 else { 263 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI3626ï¼½*/243 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI3626]*/ 264 244 pri = INT_PRIORITY(tskpri); 265 245 } … … 284 264 285 265 /* 286 * æå®ããåªå 287 é ä½ã®ã¿ã¹ã¯IDã®åç 288 §ï¼»NGKI3641ï¼½ 266 * 指定した優先順位のタスクIDの参照[NGKI3641] 289 267 */ 290 268 #ifdef TOPPERS_get_nth … … 299 277 300 278 LOG_GET_NTH_ENTER(p_tskid, nth, p_tskid); 301 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3642][NGKI3643ï¼½*/279 CHECK_TSKCTX_UNL(); /*[NGKI3642][NGKI3643]*/ 302 280 if (tskpri == TPRI_SELF) { 303 pri = p_runtsk->bpriority; /* ï¼»NGKI3650ï¼½*/281 pri = p_runtsk->bpriority; /*[NGKI3650]*/ 304 282 } 305 283 else { 306 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI3644ï¼½*/284 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI3644]*/ 307 285 pri = INT_PRIORITY(tskpri); 308 286 } … … 331 309 332 310 /* 333 * CPUããã¯ç¶æ 334 ã¸ã®é·ç§»ï¼»NGKI3538ï¼½ 311 * CPUロック状態への遷移[NGKI3538] 335 312 */ 336 313 #ifdef TOPPERS_loc_cpu … … 343 320 LOG_LOC_CPU_ENTER(); 344 321 345 if (!sense_lock()) { /* ï¼»NGKI2731ï¼½*/346 lock_cpu(); /* ï¼»NGKI2730ï¼½*/322 if (!sense_lock()) { /*[NGKI2731]*/ 323 lock_cpu(); /*[NGKI2730]*/ 347 324 } 348 325 ercd = E_OK; … … 355 332 356 333 /* 357 * CPUããã¯ç¶æ 358 ã®è§£é¤ï¼»NGKI3539ï¼½ 334 * CPUロック状態の解除[NGKI3539] 359 335 * 360 * CPUããã¯ä¸ã¯ï¼ãã£ã¹ããããå¿ 361 è¦ã¨ãªããµã¼ãã¹ã³ã¼ã«ãå¼ã³åºãã 362 * ã¨ã¯ã§ããªãããï¼CPUããã¯ç¶æ 363 ã®è§£é¤æã«ãã£ã¹ãããã£ãèµ·åãã 364 * å¿ 365 è¦ã¯ãªãï¼ 336 * CPUロック中は,ディスパッチが必要となるサービスコールを呼び出すこ 337 * とはできないため,CPUロック状態の解除時にディスパッチャを起動する 338 * 必要はない. 366 339 */ 367 340 #ifdef TOPPERS_unl_cpu … … 374 347 LOG_UNL_CPU_ENTER(); 375 348 376 if (sense_lock()) { /* ï¼»NGKI2738ï¼½*/377 unlock_cpu(); /* ï¼»NGKI2737ï¼½*/349 if (sense_lock()) { /*[NGKI2738]*/ 350 unlock_cpu(); /*[NGKI2737]*/ 378 351 } 379 352 ercd = E_OK; … … 386 359 387 360 /* 388 * ãã£ã¹ãããã®ç¦æ¢ï¼»NGKI2740ï¼½361 * ディスパッチの禁止[NGKI2740] 389 362 */ 390 363 #ifdef TOPPERS_dis_dsp … … 396 369 397 370 LOG_DIS_DSP_ENTER(); 398 CHECK_TSKCTX_UNL(); /* ï¼»NGKI2741][NGKI2742ï¼½*/371 CHECK_TSKCTX_UNL(); /*[NGKI2741][NGKI2742]*/ 399 372 400 373 lock_cpu(); … … 412 385 413 386 /* 414 * ãã£ã¹ãããã®è¨±å¯ï¼»NGKI2746ï¼½387 * ディスパッチの許可[NGKI2746] 415 388 */ 416 389 #ifdef TOPPERS_ena_dsp … … 422 395 423 396 LOG_ENA_DSP_ENTER(); 424 CHECK_TSKCTX_UNL(); /* ï¼»NGKI2747][NGKI2748ï¼½*/397 CHECK_TSKCTX_UNL(); /*[NGKI2747][NGKI2748]*/ 425 398 426 399 lock_cpu(); … … 460 433 461 434 /* 462 * ã³ã³ããã¹ãã®åç 463 §ï¼»NGKI2752ï¼½ 435 * コンテキストの参照[NGKI2752] 464 436 */ 465 437 #ifdef TOPPERS_sns_ctx … … 479 451 480 452 /* 481 * CPUããã¯ç¶æ 482 ã®åç 483 §ï¼»NGKI2754ï¼½ 453 * CPUロック状態の参照[NGKI2754] 484 454 */ 485 455 #ifdef TOPPERS_sns_loc … … 499 469 500 470 /* 501 * ãã£ã¹ãããç¦æ¢ç¶æ 502 ã®åç 503 §ï¼»NGKI2756ï¼½ 471 * ディスパッチ禁止状態の参照[NGKI2756] 504 472 */ 505 473 #ifdef TOPPERS_sns_dsp … … 519 487 520 488 /* 521 * ãã£ã¹ãããä¿çç¶æ 522 ã®åç 523 §ï¼»NGKI2758ï¼½ 489 * ディスパッチ保留状態の参照[NGKI2758] 524 490 */ 525 491 #ifdef TOPPERS_sns_dpn … … 539 505 540 506 /* 541 * ã«ã¼ãã«éåä½ç¶æ 542 ã®åç 543 §ï¼»NGKI2760ï¼½ 507 * カーネル非動作状態の参照[NGKI2760] 544 508 */ 545 509 #ifdef TOPPERS_sns_ker -
asp3_gr_sakura/trunk/kernel/task.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«44 * タスク管理モジュール 60 45 */ 61 46 … … 68 53 69 54 /* 70 * å®è¡ç¶æ 71 ã®ã¿ã¹ã¯ 55 * 実行状態のタスク 72 56 */ 73 57 TCB *p_runtsk; 74 58 75 59 /* 76 * å®è¡ãã¹ãã¿ã¹ã¯60 * 実行すべきタスク 77 61 */ 78 62 TCB *p_schedtsk; 79 63 80 64 /* 81 * ãã£ã¹ããã許å¯ç¶æ 82 65 * ディスパッチ許可状態 83 66 */ 84 67 bool_t enadsp; 85 68 86 69 /* 87 * ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ 88 70 * タスクディスパッチ可能状態 89 71 */ 90 72 bool_t dspflg; 91 73 92 74 /* 93 * ã¬ãã£ãã¥ã¼75 * レディキュー 94 76 */ 95 77 QUEUE ready_queue[TNUM_TPRI]; 96 78 97 79 /* 98 * ã¬ãã£ãã¥ã¼ãµã¼ãã®ããã®ãããããã80 * レディキューサーチのためのビットマップ 99 81 */ 100 82 uint16_t ready_primap; 101 83 102 84 /* 103 * 使ç¨ãã¦ããªãTCBã®ãªã¹ã85 * 使用していないTCBのリスト 104 86 */ 105 87 QUEUE free_tcb; 106 88 107 89 /* 108 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå90 * タスク管理モジュールの初期化 109 91 */ 110 92 void … … 148 130 149 131 /* 150 * ãããããããµã¼ãé¢æ° 151 * 152 * bitmapå 153 ã®1ã®ãããã®å 154 ï¼æãä¸ä½ï¼å³ï¼ã®ãã®ããµã¼ããï¼ãã®ãã 155 * ãçªå·ãè¿ãï¼ãããçªå·ã¯ï¼æä¸ä½ãããã0ã¨ããï¼bitmapã«0ãæå® 156 * ãã¦ã¯ãªããªãï¼ãã®é¢æ°ã§ã¯ï¼bitmapã16ãããã§ãããã¨ãä»®å®ãï¼ 157 * uint16_tåã¨ãã¦ããï¼ 158 * 159 * ããããµã¼ãå½ä»¤ãæã¤ããã»ããµã§ã¯ï¼ããããµã¼ãå½ä»¤ã使ãããã« 160 * æ¸ãç´ããæ¹ãå¹çãè¯ãå ´åãããï¼ãã®ãããªå ´åã«ã¯ï¼ã¿ã¼ã²ãã 161 * ä¾åé¨ã§ããããµã¼ãå½ä»¤ã使ã£ãbitmap_searchãå®ç¾©ãï¼ 162 * OMIT_BITMAP_SEARCHããã¯ãå®ç¾©ããã°ããï¼ã¾ãï¼ããããµã¼ãå½ä»¤ã® 163 * ãµã¼ãæ¹åãéãªã©ã®çç±ã§åªå 164 度ã¨ãããã¨ã®å¯¾å¿ãå¤æ´ãããå ´åã« 165 * ã¯ï¼PRIMAP_BITããã¯ãå®ç¾©ããã°ããï¼ 166 * 167 * ã¾ãï¼ã©ã¤ãã©ãªã«ffsããããªãï¼æ¬¡ã®ããã«å®ç¾©ãã¦ã©ã¤ãã©ãªé¢æ°ã 168 * 使ã£ãæ¹ãå¹çãè¯ãå¯è½æ§ãããï¼ 132 * ビットマップサーチ関数 133 * 134 * bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ 135 * ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定 136 * してはならない.この関数では,bitmapが16ビットであることを仮定し, 137 * uint16_t型としている. 138 * 139 * ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように 140 * 書き直した方が効率が良い場合がある.このような場合には,ターゲット 141 * 依存部でビットサーチ命令を使ったbitmap_searchを定義し, 142 * OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の 143 * サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に 144 * は,PRIMAP_BITをマクロ定義すればよい. 145 * 146 * また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を 147 * 使った方が効率が良い可能性もある. 169 148 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 170 149 */ … … 198 177 199 178 /* 200 * åªå 201 度ããããããã空ãã®ãã§ã㯠179 * 優先度ビットマップが空かのチェック 202 180 */ 203 181 Inline bool_t … … 208 186 209 187 /* 210 * åªå 211 度ããããããã®ãµã¼ã 188 * 優先度ビットマップのサーチ 212 189 */ 213 190 Inline uint_t … … 218 195 219 196 /* 220 * åªå 221 度ããããããã®ã»ãã 197 * 優先度ビットマップのセット 222 198 */ 223 199 Inline void … … 228 204 229 205 /* 230 * åªå 231 度ããããããã®ã¯ãªã¢ 206 * 優先度ビットマップのクリア 232 207 */ 233 208 Inline void … … 238 213 239 214 /* 240 * æé«åªå 241 é ä½ã¿ã¹ã¯ã®ãµã¼ã 215 * 最高優先順位タスクのサーチ 242 216 */ 243 217 #ifdef TOPPERS_tsksched … … 255 229 256 230 /* 257 * å®è¡ã§ããç¶æ 258 ã¸ã®é·ç§» 259 * 260 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ã§ããã¿ã¹ã¯ããªãã£ãå ´åã¨ï¼ 261 * p_tcbã®åªå 262 度ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå 263 度ãããé«ãå ´åã§ããï¼ 231 * 実行できる状態への遷移 232 * 233 * 実行すべきタスクを更新するのは,実行できるタスクがなかった場合と, 234 * p_tcbの優先度が実行すべきタスクの優先度よりも高い場合である. 264 235 */ 265 236 #ifdef TOPPERS_tskrun … … 283 254 284 255 /* 285 * å®è¡ã§ããç¶æ 286 ããä»ã®ç¶æ 287 ã¸ã®é·ç§» 288 * 289 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ãå ´å 290 * ã§ããï¼p_tcbã¨åãåªå 291 度ã®ã¿ã¹ã¯ãä»ã«ããå ´åã¯ï¼p_tcbã®æ¬¡ã®ã¿ã¹ 292 * ã¯ãå®è¡ãã¹ãã¿ã¹ã¯ã«ãªãï¼ããã§ãªãå ´åã¯ï¼ã¬ãã£ãã¥ã¼ããµã¼ã 293 * ããå¿ 294 è¦ãããï¼ 256 * 実行できる状態から他の状態への遷移 257 * 258 * 実行すべきタスクを更新するのは,p_tcbが実行すべきタスクであった場合 259 * である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcbの次のタス 260 * クが実行すべきタスクになる.そうでない場合は,レディキューをサーチ 261 * する必要がある. 295 262 */ 296 263 #ifdef TOPPERS_tsknrun … … 321 288 322 289 /* 323 * ä¼æ¢ç¶æ 324 ã¸ã®é·ç§» 290 * 休止状態への遷移 325 291 */ 326 292 #ifdef TOPPERS_tskdmt … … 344 310 345 311 /* 346 * ä¼æ¢ç¶æ 347 ããå®è¡ã§ããç¶æ 348 ã¸ã®é·ç§» 312 * 休止状態から実行できる状態への遷移 349 313 */ 350 314 #ifdef TOPPERS_tskact … … 362 326 363 327 /* 364 * ã¿ã¹ã¯ã®åªå 365 度ã®å¤æ´ 366 * 367 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 368 ã®å ´åã«ã¯ï¼ã¬ãã£ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ã 369 * ãï¼ãªãã¸ã§ã¯ãã®å¾ 370 ã¡ãã¥ã¼ã®ä¸ã§å¾ 371 ã¡ç¶æ 372 ã«ãªã£ã¦ããå ´åã«ã¯ï¼å¾ 373 374 * ã¡ãã¥ã¼ã®ä¸ã§ã®ä½ç½®ãå¤æ´ããï¼ 375 * 376 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼(1) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ã¦ï¼ 377 * ãã®åªå 378 度ãä¸ããå ´åï¼(2) p_tcbãå®è¡ãã¹ãã¿ã¹ã¯ã§ã¯ãªãï¼å¤æ´å¾ 379 * ã®åªå 380 度ãå®è¡ãã¹ãã¿ã¹ã¯ã®åªå 381 度ãããé«ãå ´åã§ããï¼(1)ã®å ´åã« 382 * ã¯ï¼ã¬ãã£ãã¥ã¼ããµã¼ãããå¿ 383 è¦ãããï¼ 328 * タスクの優先度の変更 329 * 330 * タスクが実行できる状態の場合には,レディキューの中での位置を変更す 331 * る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待 332 * ちキューの中での位置を変更する. 333 * 334 * 実行すべきタスクを更新するのは,(1) p_tcbが実行すべきタスクであって, 335 * その優先度を下げた場合,(2) p_tcbが実行すべきタスクではなく,変更後 336 * の優先度が実行すべきタスクの優先度よりも高い場合である.(1)の場合に 337 * は,レディキューをサーチする必要がある. 384 338 */ 385 339 #ifdef TOPPERS_tskpri … … 395 349 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 396 350 /* 397 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 398 ã®å ´å 351 * タスクが実行できる状態の場合 399 352 */ 400 353 queue_delete(&(p_tcb->task_queue)); … … 427 380 if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) { 428 381 /* 429 * ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 430 ±éé¨ 431 * åï¼WOBJCBï¼ã®å¾ 432 ã¡ãã¥ã¼ã«ã¤ãªããã¦ããå ´å 382 * タスクが,同期・通信オブジェクトの管理ブロックの共通部 383 * 分(WOBJCB)の待ちキューにつながれている場合 433 384 */ 434 385 wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb, … … 441 392 442 393 /* 443 * ã¬ãã£ãã¥ã¼ã®å転444 * 445 * å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããã®ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãã¿ã¹ã¯ãã¥ã¼ã®æ«446 * å°¾ã«ç§»åããå ´åã§ããï¼394 * レディキューの回転 395 * 396 * 実行すべきタスクを更新するのは,実行すべきタスクがタスクキューの末 397 * 尾に移動した場合である. 447 398 */ 448 399 #ifdef TOPPERS_tskrot … … 467 418 468 419 /* 469 * ã¿ã¹ã¯ã®çµäºå¦ç420 * タスクの終了処理 470 421 */ 471 422 #ifdef TOPPERS_tskterm -
asp3_gr_sakura/trunk/kernel/task.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«44 * タスク管理モジュール 60 45 */ 61 46 … … 68 53 69 54 /* 70 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©55 * トレースログマクロのデフォルト定義 71 56 */ 72 57 #ifndef LOG_TSKSTAT … … 75 60 76 61 /* 77 * ã¿ã¹ã¯åªå 78 度ã®å 79 é¨è¡¨ç¾ã»å¤é¨è¡¨ç¾å¤æãã¯ã 62 * タスク優先度の内部表現・外部表現変換マクロ 80 63 */ 81 64 #define INT_PRIORITY(x) ((uint_t)((x) - TMIN_TPRI)) … … 83 66 84 67 /* 85 * ã¿ã¹ã¯ç¶æ 86 ã®å 87 é¨è¡¨ç¾ 88 * 89 * TCBä¸ã®ã¿ã¹ã¯ç¶æ 90 ã®ãã£ã¼ã«ãã§ã¯ï¼ã¿ã¹ã¯ã®ç¶æ 91 ã¨ï¼ã¿ã¹ã¯ãå¾ 92 ã¡ç¶æ 93 94 * ã®æã®å¾ 95 ã¡è¦å ã表ãï¼ãã ãï¼å®è¡ç¶æ 96 ï¼RUNNINGï¼ã¨å®è¡å¯è½ç¶æ 97 98 * ï¼READYï¼ã¯åºå¥ããï¼ä¸¡ç¶æ 99 ããããã¦å®è¡ã§ããç¶æ 100 ï¼RUNNABLEï¼ã¨ã 101 * ã¦ç®¡çããï¼äºéå¾ 102 ã¡ç¶æ 103 ã¯ï¼(TS_WAITING_??? | TS_SUSPENDED)ã§è¡¨ãï¼ 104 * 105 * ã¿ã¹ã¯ãå¾ 106 ã¡ç¶æ 107 ï¼äºéå¾ 108 ã¡ç¶æ 109 ãå«ãï¼ã®æã¯ï¼TS_WAITING_???ã§å¾ 110 ã¡ 111 * è¦å ã表ãï¼å¾ 112 ã¡è¦å ï¼5ãããã§è¡¨ç¾ãããï¼ã®ä¸ä½2ãããã§ï¼åæã» 113 * éä¿¡ãªãã¸ã§ã¯ãã®å¾ 114 ã¡ãã¥ã¼ã«ã¤ãªãã£ã¦ãããã©ããã表ãï¼åæã» 115 * éä¿¡ãªãã¸ã§ã¯ãã®å¾ 116 ã¡ãã¥ã¼ã«ã¤ãªãããªããã®ã¯ä¸ä½2ãããã00ï¼å 117 * æã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 118 ±éé¨åï¼WOBJCBï¼ã®å¾ 119 ã¡ãã¥ã¼ 120 * ã«ã¤ãªãããã®ã¯10ã¾ãã¯11ï¼ãã以å¤ã®å¾ 121 ã¡ãã¥ã¼ã«ã¤ãªãããã®ã¯01 122 * ã¨ããï¼ 123 */ 124 #define TS_DORMANT 0x00U /* ä¼æ¢ç¶æ 125 */ 126 #define TS_RUNNABLE 0x01U /* å®è¡ã§ããç¶æ 127 */ 128 #define TS_SUSPENDED 0x02U /* å¼·å¶å¾ 129 ã¡ç¶æ 130 */ 131 132 #define TS_WAITING_SLP (0x01U << 2) /* èµ·åºå¾ 133 ã¡ */ 134 #define TS_WAITING_DLY (0x02U << 2) /* æéçµéå¾ 135 ã¡ */ 136 #define TS_WAITING_RDTQ (0x08U << 2) /* ãã¼ã¿ãã¥ã¼ããã®åä¿¡å¾ 137 ã¡ */ 138 #define TS_WAITING_RPDQ (0x09U << 2) /* åªå 139 度ãã¼ã¿ãã¥ã¼ããã®åä¿¡å¾ 140 ã¡ */ 141 #define TS_WAITING_SEM (0x10U << 2) /* ã»ããã©è³æºã®ç²å¾å¾ 142 ã¡ */ 143 #define TS_WAITING_FLG (0x11U << 2) /* ã¤ãã³ããã©ã°å¾ 144 ã¡ */ 145 #define TS_WAITING_SDTQ (0x12U << 2) /* ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡å¾ 146 ã¡ */ 147 #define TS_WAITING_SPDQ (0x13U << 2) /* åªå 148 度ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡å¾ 149 ã¡ */ 150 #define TS_WAITING_MTX (0x14U << 2) /* ãã¥ã¼ããã¯ã¹ã®ããã¯å¾ 151 ã¡ */ 152 #define TS_WAITING_MPF (0x15U << 2) /* åºå®é·ã¡ã¢ãªãããã¯ã®ç²å¾å¾ 153 ã¡ */ 154 155 #define TS_WAITING_MASK (0x1fU << 2) /* å¾ 156 ã¡ç¶æ 157 ã®å¤å¥ç¨ãã¹ã¯ */ 158 159 /* 160 * ã¿ã¹ã¯ç¶æ 161 å¤å¥ãã¯ã 162 * 163 * TSTAT_DORMANTã¯ã¿ã¹ã¯ãä¼æ¢ç¶æ 164 ã§ãããã©ãããï¼TSTAT_RUNNABLE㯠165 * ã¿ã¹ã¯ãå®è¡ã§ããç¶æ 166 ã§ãããã©ãããå¤å¥ããï¼TSTAT_WAITINGã¯å¾ 167 168 * ã¡ç¶æ 169 ã¨äºéå¾ 170 ã¡ç¶æ 171 ã®ããããã§ãããã©ãããï¼TSTAT_SUSPENDED㯠172 * å¼·å¶å¾ 173 ã¡ç¶æ 174 ã¨äºéå¾ 175 ã¡ç¶æ 176 ã®ããããã§ãããã©ãããå¤å¥ããï¼ 68 * タスク状態の内部表現 69 * 70 * TCB中のタスク状態のフィールドでは,タスクの状態と,タスクが待ち状態 71 * の時の待ち要因を表す.ただし,実行状態(RUNNING)と実行可能状態 72 * (READY)は区別せず,両状態をあわせて実行できる状態(RUNNABLE)とし 73 * て管理する.二重待ち状態は,(TS_WAITING_??? | TS_SUSPENDED)で表す. 74 * 75 * タスクが待ち状態(二重待ち状態を含む)の時は,TS_WAITING_???で待ち 76 * 要因を表す.待ち要因(5ビットで表現される)の上位2ビットで,同期・ 77 * 通信オブジェクトの待ちキューにつながっているかどうかを表す.同期・ 78 * 通信オブジェクトの待ちキューにつながらないものは上位2ビットを00,同 79 * 期・通信オブジェクトの管理ブロックの共通部分(WOBJCB)の待ちキュー 80 * につながるものは10または11,それ以外の待ちキューにつながるものは01 81 * とする. 82 */ 83 #define TS_DORMANT 0x00U /* 休止状態 */ 84 #define TS_RUNNABLE 0x01U /* 実行できる状態 */ 85 #define TS_SUSPENDED 0x02U /* 強制待ち状態 */ 86 87 #define TS_WAITING_SLP (0x01U << 2) /* 起床待ち */ 88 #define TS_WAITING_DLY (0x02U << 2) /* 時間経過待ち */ 89 #define TS_WAITING_RDTQ (0x08U << 2) /* データキューからの受信待ち */ 90 #define TS_WAITING_RPDQ (0x09U << 2) /* 優先度データキューからの受信待ち */ 91 #define TS_WAITING_SEM (0x10U << 2) /* セマフォ資源の獲得待ち */ 92 #define TS_WAITING_FLG (0x11U << 2) /* イベントフラグ待ち */ 93 #define TS_WAITING_SDTQ (0x12U << 2) /* データキューへの送信待ち */ 94 #define TS_WAITING_SPDQ (0x13U << 2) /* 優先度データキューへの送信待ち */ 95 #define TS_WAITING_MTX (0x14U << 2) /* ミューテックスのロック待ち */ 96 #define TS_WAITING_MPF (0x15U << 2) /* 固定長メモリブロックの獲得待ち */ 97 98 #define TS_WAITING_MASK (0x1fU << 2) /* 待ち状態の判別用マスク */ 99 100 /* 101 * タスク状態判別マクロ 102 * 103 * TSTAT_DORMANTはタスクが休止状態であるかどうかを,TSTAT_RUNNABLEは 104 * タスクが実行できる状態であるかどうかを判別する.TSTAT_WAITINGは待 105 * ち状態と二重待ち状態のいずれかであるかどうかを,TSTAT_SUSPENDEDは 106 * 強制待ち状態と二重待ち状態のいずれかであるかどうかを判別する. 177 107 */ 178 108 #define TSTAT_DORMANT(tstat) ((tstat) == TS_DORMANT) … … 182 112 183 113 /* 184 * ã¿ã¹ã¯å¾ 185 ã¡è¦å å¤å¥ãã¯ã 186 * 187 * TSTAT_WAIT_SLPã¯ã¿ã¹ã¯ãèµ·åºå¾ 188 ã¡ã§ãããã©ãããï¼TSTAT_WAIT_MTX㯠189 * ã¿ã¹ã¯ããã¥ã¼ããã¯ã¹å¾ 190 ã¡ã§ãããã©ãããå¤å¥ããï¼ 191 * 192 * ã¾ãï¼TSTAT_WAIT_WOBJ ã¯ã¿ã¹ã¯ãåæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 193 ã¡ 194 * ã§ãããï¼è¨ãæããã¨ï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 195 ã¡ãã¥ã¼ã«ã¤ãªã 196 * ãã¦ãããï¼ã©ãããï¼TSTAT_WAIT_WOBJCBã¯ã¿ã¹ã¯ãåæã»éä¿¡ãªãã¸ã§ 197 * ã¯ãã®ç®¡çãããã¯ã®å 198 ±éé¨åï¼WOBJCBï¼ã®å¾ 199 ã¡ãã¥ã¼ã«ã¤ãªããã¦ãã 200 * ãã©ãããå¤å¥ããï¼ 114 * タスク待ち要因判別マクロ 115 * 116 * TSTAT_WAIT_SLPはタスクが起床待ちであるかどうかを,TSTAT_WAIT_MTXは 117 * タスクがミューテックス待ちであるかどうかを判別する. 118 * 119 * また,TSTAT_WAIT_WOBJ はタスクが同期・通信オブジェクトに対する待ち 120 * であるか(言い換えると,同期・通信オブジェクトの待ちキューにつなが 121 * れているか)どうかを,TSTAT_WAIT_WOBJCBはタスクが同期・通信オブジェ 122 * クトの管理ブロックの共通部分(WOBJCB)の待ちキューにつながれている 123 * かどうかを判別する. 201 124 */ 202 125 #define TSTAT_WAIT_SLP(tstat) (((tstat) & ~TS_SUSPENDED) == TS_WAITING_SLP) … … 207 130 208 131 /* 209 * å¾ 210 ã¡æ 211 å ±ãããã¯ï¼WINFOï¼ã®å®ç¾© 212 * 213 * ã¿ã¹ã¯ãå¾ 214 ã¡ç¶æ 215 ã®éã¯ï¼TCBããã³ãã®p_winfoã§æãããWINFOã次㮠216 * ããã«è¨å®ããªããã°ãªããªãï¼ 217 * 218 * (a) TCBã®ã¿ã¹ã¯ç¶æ 219 ãå¾ 220 ã¡ç¶æ 221 ï¼TS_WAITING_???ï¼ã«ããï¼ 222 * 223 * (b) ã¿ã¤ã ã¢ã¦ããç£è¦ããããã«ï¼ã¿ã¤ã ã¤ãã³ããããã¯ãç»é²ããï¼ 224 * ç»é²ããã¿ã¤ã ã¤ãã³ããããã¯ã¯ï¼å¾ 225 ã¡ã«å 226 ¥ããµã¼ãã¹ã³ã¼ã«å¦çé¢æ° 227 * ã®ãã¼ã«ã«å¤æ°ã¨ãã¦ç¢ºä¿ãï¼ããã¸ã®ãã¤ã³ã¿ãWINFOã®p_tmevtbã«è¨ 228 * æ¶ããï¼ã¿ã¤ã ã¢ã¦ãã®ç£è¦ãå¿ 229 è¦ãªãå ´åï¼æ°¸ä¹ 230 å¾ 231 ã¡ã®å ´åï¼ã«ã¯ï¼ 232 * p_tmevtbãNULLã«ããï¼ 233 * 234 * åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 235 ã¡ç¶æ 236 ã®å ´åã«ã¯ï¼æ¨æºã®WINFOã« 237 * p_wobjcbãã£ã¼ã«ãã追å ããæ§é ä½ï¼WINFO_WOBJï¼wait.hã§å®ç¾©ï¼ã«ï¼ 238 * å¾ 239 ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã«ä¾åãã¦è¨æ¶ãããã¨ãå¿ 240 è¦ãªæ 241 å ± 242 * ã®ããã®ãã£ã¼ã«ãã追å ããæ§é ä½ï¼WINFO_???ï¼ãå®ç¾©ãï¼WINFOã®ä»£ 243 * ããã«ç¨ããï¼ã¾ãï¼ä»¥ä¸ã®(c)ï½(e)ã®è¨å®ãè¡ãå¿ 244 è¦ãããï¼åæã»é 245 * ä¿¡ãªãã¸ã§ã¯ãã«é¢ä¿ããªãå¾ 246 ã¡ï¼èµ·åºå¾ 247 ã¡ï¼æéçµéå¾ 248 ã¡ï¼ã®å ´åã«ã¯ï¼ 249 * ãããã¯å¿ 250 è¦ãªãï¼ 251 * 252 * (c) TCBãå¾ 253 ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 254 ã¡ãã¥ã¼ã«ã¤ãªãï¼å¾ 255 256 * ã¡ãã¥ã¼ã«ã¤ãªãããã«ï¼task_queueã使ãï¼ 257 * 258 * (d) å¾ 259 ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã¸ã®ãã¤ã³ã¿ãï¼ 260 * WINFO_WOBJã®p_wobjcbã«è¨æ¶ããï¼ 261 * 262 * (e) å¾ 263 ã¡å¯¾è±¡ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã«ä¾åãã¦è¨æ¶ãããã¨ãå¿ 264 è¦ãª 265 * æ 266 å ±ãããå ´åã«ã¯ï¼WINFO_???å 267 ã®ãã£ã¼ã«ãã«è¨æ¶ããï¼ 268 * 269 * å¾ 270 ã¡ç¶æ 271 ã解é¤ããéã«ã¯ï¼å¾ 272 ã¡è§£é¤ããã¿ã¹ã¯ã«å¯¾ããè¿å¤ãWINFOã® 273 * wercdã«è¨å®ããï¼wercdãå¿ 274 è¦ãªã®ã¯å¾ 275 ã¡è§£é¤ä»¥éã§ããã®ã«å¯¾ãã¦ï¼ 276 * p_tmevtbã¯å¾ 277 ã¡è§£é¤å¾ã¯å¿ 278 è¦ãªãããï¼ã¡ã¢ãªç¯ç´ã®ããã«å 279 ±ç¨ä½ã使㣠280 * ã¦ããï¼ãã®ããï¼wercdã¸ã¨ã©ã¼ã³ã¼ããè¨å®ããã®ã¯ï¼ã¿ã¤ã ã¤ãã³ã 281 * ãããã¯ãç»é²è§£é¤ããå¾ã«ããªããã°ãªããªãï¼ 132 * 待ち情報ブロック(WINFO)の定義 133 * 134 * タスクが待ち状態の間は,TCBおよびそのp_winfoで指されるWINFOを次の 135 * ように設定しなければならない. 136 * 137 * (a) TCBのタスク状態を待ち状態(TS_WAITING_???)にする. 138 * 139 * (b) タイムアウトを監視するために,タイムイベントブロックを登録する. 140 * 登録するタイムイベントブロックは,待ちに入るサービスコール処理関数 141 * のローカル変数として確保し,それへのポインタをWINFOのp_tmevtbに記 142 * 憶する.タイムアウトの監視が必要ない場合(永久待ちの場合)には, 143 * p_tmevtbをNULLにする. 144 * 145 * 同期・通信オブジェクトに対する待ち状態の場合には,標準のWINFOに 146 * p_wobjcbフィールドを追加した構造体(WINFO_WOBJ,wait.hで定義)に, 147 * 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な情報 148 * のためのフィールドを追加した構造体(WINFO_???)を定義し,WINFOの代 149 * わりに用いる.また,以下の(c)~(e)の設定を行う必要がある.同期・通 150 * 信オブジェクトに関係しない待ち(起床待ち,時間経過待ち)の場合には, 151 * これらは必要ない. 152 * 153 * (c) TCBを待ち対象の同期・通信オブジェクトの待ちキューにつなぐ.待 154 * ちキューにつなぐために,task_queueを使う. 155 * 156 * (d) 待ち対象の同期・通信オブジェクトの管理ブロックへのポインタを, 157 * WINFO_WOBJのp_wobjcbに記憶する. 158 * 159 * (e) 待ち対象の同期・通信オブジェクトに依存して記憶することが必要な 160 * 情報がある場合には,WINFO_???内のフィールドに記憶する. 161 * 162 * 待ち状態を解除する際には,待ち解除したタスクに対する返値をWINFOの 163 * wercdに設定する.wercdが必要なのは待ち解除以降であるのに対して, 164 * p_tmevtbは待ち解除後は必要ないため,メモリ節約のために共用体を使っ 165 * ている.そのため,wercdへエラーコードを設定するのは,タイムイベント 166 * ブロックを登録解除した後にしなければならない. 282 167 */ 283 168 typedef union waiting_information { 284 ER wercd; /* å¾ 285 ã¡è§£é¤æã®ã¨ã©ã¼ã³ã¼ã */ 286 TMEVTB *p_tmevtb; /* å¾ 287 ã¡ç¶æ 288 ç¨ã®ã¿ã¤ã ã¤ãã³ãããã㯠*/ 169 ER wercd; /* 待ち解除時のエラーコード */ 170 TMEVTB *p_tmevtb; /* 待ち状態用のタイムイベントブロック */ 289 171 } WINFO; 290 172 291 173 /* 292 * ãã¥ã¼ããã¯ã¹ç®¡çãããã¯ã®åã®åæ¹åç 293 § 174 * ミューテックス管理ブロックの型の前方参照 294 175 */ 295 176 typedef struct mutex_control_block MTXCB; 296 177 297 178 /* 298 * ã¿ã¹ã¯åæåããã㯠299 * 300 * ã¿ã¹ã¯ã«é¢ããæ 301 å ±ãï¼å¤ãå¤ãããªãããã«ROMã«ç½®ããé¨åï¼ã¿ã¹ã¯ 302 * åæåãããã¯ï¼ã¨ï¼å¤ãå¤åããããã«RAMã«ç½®ããªããã°ãªããªãé¨ 303 * åï¼ã¿ã¹ã¯ç®¡çãããã¯ï¼TCBï¼ã«åé¢ãï¼TCBå 304 ã«å¯¾å¿ããã¿ã¹ã¯åæå 305 * ãããã¯ãæããã¤ã³ã¿ãå 306 ¥ããï¼ã¿ã¹ã¯åæåãããã¯å 307 ã«å¯¾å¿ãã 308 * TCBãæããã¤ã³ã¿ãå 309 ¥ããæ¹æ³ã®æ¹ãï¼RAMã®ç¯ç´ã®è¦³ç¹ããã¯æã¾ãã 310 * ãï¼å®è¡å¹çãæªããªãããã«æ¡ç¨ãã¦ããªãï¼ä»ã®ãªãã¸ã§ã¯ãã«ã¤ã 311 * ã¦ãåæ§ã«æ±ãï¼ 312 * 313 * ã¿ã¹ã¯åæåãããã¯ã«ã¯ï¼DEF_TEXã§å®ç¾©ãããã¿ã¹ã¯ä¾å¤å¦çã«ã¼ã 314 * ã³ã«é¢ããæ 315 å ±ãå«ãï¼ 179 * タスク初期化ブロック 180 * 181 * タスクに関する情報を,値が変わらないためにROMに置ける部分(タスク 182 * 初期化ブロック)と,値が変化するためにRAMに置かなければならない部 183 * 分(タスク管理ブロック,TCB)に分離し,TCB内に対応するタスク初期化 184 * ブロックを指すポインタを入れる.タスク初期化ブロック内に対応する 185 * TCBを指すポインタを入れる方法の方が,RAMの節約の観点からは望ましい 186 * が,実行効率が悪くなるために採用していない.他のオブジェクトについ 187 * ても同様に扱う. 188 * 189 * タスク初期化ブロックには,DEF_TEXで定義されるタスク例外処理ルーチ 190 * ンに関する情報も含む. 316 191 */ 317 192 typedef struct task_initialization_block { 318 ATR tskatr; /* ã¿ã¹ã¯å±æ§ */ 319 intptr_t exinf; /* ã¿ã¹ã¯ã®æ¡å¼µæ 320 å ± */ 321 TASK task; /* ã¿ã¹ã¯ã®èµ·åçªå° */ 322 uint_t ipriority; /* ã¿ã¹ã¯ã®èµ·åæåªå 323 度ï¼å 324 é¨è¡¨ç¾ï¼ */ 193 ATR tskatr; /* タスク属性 */ 194 intptr_t exinf; /* タスクの拡張情報 */ 195 TASK task; /* タスクの起動番地 */ 196 uint_t ipriority; /* タスクの起動時優先度(内部表現) */ 325 197 326 198 #ifdef USE_TSKINICTXB 327 TSKINICTXB tskinictxb; /* ã¿ã¹ã¯åæåã³ã³ããã¹ããããã¯*/199 TSKINICTXB tskinictxb; /* タスク初期化コンテキストブロック */ 328 200 #else /* USE_TSKINICTXB */ 329 size_t stksz; /* ã¹ã¿ãã¯é åã®ãµã¤ãºï¼ä¸¸ããå¤ï¼ */ 330 void *stk; /* ã¹ã¿ãã¯é åã®å 331 é çªå° */ 201 size_t stksz; /* スタック領域のサイズ(丸めた値) */ 202 void *stk; /* スタック領域の先頭番地 */ 332 203 #endif /* USE_TSKINICTXB */ 333 204 } TINIB; 334 205 335 206 /* 336 * ã¿ã¹ã¯ç®¡çãããã¯ï¼TCBï¼ 337 * 338 * ASPã«ã¼ãã«ã§ã¯ï¼ã¿ã¹ã¯ã®èµ·åè¦æ±ãã¥ã¼ã¤ã³ã°æ°ã®æ大å¤ï¼TMAX_ACTCNTï¼ 339 * ã¨èµ·åºè¦æ±ãã¥ã¼ã¤ã³ã°æ°ã®æ大å¤ï¼TMAX_WUPCNTï¼ã¯1ã«åºå®ããã¦ãã 340 * ããï¼ãã¥ã¼ã¤ã³ã°ããã¦ãããã©ããã®çå½å¤ã§è¡¨ç¾ãããã¨ãã§ããï¼ 341 * ã¾ãï¼å¼·å¶å¾ 342 ã¡è¦æ±ãã¹ãæ°ã®æ大å¤ï¼TMAX_SUSCNTï¼ã1ã«åºå®ããã¦ã 343 * ãã®ã§ï¼å¼·å¶å¾ 344 ã¡è¦æ±ãã¹ãæ°ï¼suscntï¼ã¯å¿ 345 è¦ãªãï¼ 346 * 347 * TCBã®ããã¤ãã®ãã£ã¼ã«ãã¯ï¼ç¹å®ã®ã¿ã¹ã¯ç¶æ 348 ã§ã®ã¿æå¹ãªå¤ãä¿æãï¼ 349 * ãã以å¤ã®å ´åã¯å¤ãä¿è¨¼ãããªãï¼ãã£ã¦ï¼åç 350 §ãã¦ã¯ãªããªãï¼ï¼å 351 * ãã£ã¼ã«ããæå¹ãªå¤ãä¿æããæ¡ä»¶ã¯æ¬¡ã®éãï¼ 352 * 353 * ã»åæåå¾ã¯å¸¸ã«æå¹ï¼ 354 * p_tinibï¼tstatï¼actque, staovr, leftotm 355 * ã»ä¼æ¢ç¶æ 356 以å¤ã§æå¹ï¼ä¼æ¢ç¶æ 357 ã§ã¯åæå¤ã«ãªã£ã¦ããï¼ï¼ 358 * bpriorityï¼priorityï¼wupqueï¼rasterï¼enaterï¼p_lastmtx 359 * ã»å¾ 360 ã¡ç¶æ 361 ï¼äºéå¾ 362 ã¡ç¶æ 363 ãå«ãï¼ã§æå¹ï¼ 207 * タスク管理ブロック(TCB) 208 * 209 * ASPカーネルでは,タスクの起動要求キューイング数の最大値(TMAX_ACTCNT) 210 * と起床要求キューイング数の最大値(TMAX_WUPCNT)は1に固定されている 211 * ため,キューイングされているかどうかの真偽値で表現することができる. 212 * また,強制待ち要求ネスト数の最大値(TMAX_SUSCNT)が1に固定されてい 213 * るので,強制待ち要求ネスト数(suscnt)は必要ない. 214 * 215 * TCBのいくつかのフィールドは,特定のタスク状態でのみ有効な値を保持し, 216 * それ以外の場合は値が保証されない(よって,参照してはならない).各 217 * フィールドが有効な値を保持する条件は次の通り. 218 * 219 * ・初期化後は常に有効: 220 * p_tinib,tstat,actque, staovr, leftotm 221 * ・休止状態以外で有効(休止状態では初期値になっている): 222 * bpriority,priority,wupque,raster,enater,p_lastmtx 223 * ・待ち状態(二重待ち状態を含む)で有効: 364 224 * p_winfo 365 * ã»å®è¡ã§ããç¶æ 366 ã¨åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 367 ã¡ç¶æ 368 ã§æå¹ï¼ 225 * ・実行できる状態と同期・通信オブジェクトに対する待ち状態で有効: 369 226 * task_queue 370 * ã»å®è¡å¯è½ç¶æ 371 ï¼å¾ 372 ã¡ç¶æ 373 ï¼å¼·å¶å¾ 374 ã¡ç¶æ 375 ï¼äºéå¾ 376 ã¡ç¶æ 377 ã§æå¹ï¼ 227 * ・実行可能状態,待ち状態,強制待ち状態,二重待ち状態で有効: 378 228 * tskctxb 379 229 */ 380 230 typedef struct task_control_block { 381 QUEUE task_queue; /* ã¿ã¹ã¯ãã¥ã¼*/382 const TINIB *p_tinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿*/231 QUEUE task_queue; /* タスクキュー */ 232 const TINIB *p_tinib; /* 初期化ブロックへのポインタ */ 383 233 384 234 #ifdef UINT8_MAX 385 uint8_t tstat; /* ã¿ã¹ã¯ç¶æ 386 ï¼å 387 é¨è¡¨ç¾ï¼*/ 388 uint8_t bpriority; /* ãã¼ã¹åªå 389 度ï¼å 390 é¨è¡¨ç¾ï¼*/ 391 uint8_t priority; /* ç¾å¨ã®åªå 392 度ï¼å 393 é¨è¡¨ç¾ï¼*/ 235 uint8_t tstat; /* タスク状態(内部表現)*/ 236 uint8_t bpriority; /* ベース優先度(内部表現)*/ 237 uint8_t priority; /* 現在の優先度(内部表現)*/ 394 238 #else /* UINT8_MAX */ 395 BIT_FIELD_UINT tstat : 8; /* ã¿ã¹ã¯ç¶æ 396 ï¼å 397 é¨è¡¨ç¾ï¼*/ 398 BIT_FIELD_UINT bpriority : 8; /* ãã¼ã¹åªå 399 度ï¼å 400 é¨è¡¨ç¾ï¼*/ 401 BIT_FIELD_UINT priority : 8 /* ç¾å¨ã®åªå 402 度ï¼å 403 é¨è¡¨ç¾ï¼*/; 239 BIT_FIELD_UINT tstat : 8; /* タスク状態(内部表現)*/ 240 BIT_FIELD_UINT bpriority : 8; /* ベース優先度(内部表現)*/ 241 BIT_FIELD_UINT priority : 8 /* 現在の優先度(内部表現)*/; 404 242 #endif /* UINT8_MAX */ 405 BIT_FIELD_BOOL actque : 1; /* èµ·åè¦æ±ãã¥ã¼ã¤ã³ã° */ 406 BIT_FIELD_BOOL wupque : 1; /* èµ·åºè¦æ±ãã¥ã¼ã¤ã³ã° */ 407 BIT_FIELD_BOOL raster : 1; /* ã¿ã¹ã¯çµäºè¦æ±ç¶æ 408 */ 409 BIT_FIELD_BOOL enater : 1; /* ã¿ã¹ã¯çµäºè¨±å¯ç¶æ 410 */ 243 BIT_FIELD_BOOL actque : 1; /* 起動要求キューイング */ 244 BIT_FIELD_BOOL wupque : 1; /* 起床要求キューイング */ 245 BIT_FIELD_BOOL raster : 1; /* タスク終了要求状態 */ 246 BIT_FIELD_BOOL enater : 1; /* タスク終了許可状態 */ 411 247 #ifdef TOPPERS_SUPPORT_OVRHDR 412 BIT_FIELD_BOOL staovr : 1; /* ãªã¼ãã©ã³ãã³ãã©åä½ç¶æ 413 */ 248 BIT_FIELD_BOOL staovr : 1; /* オーバランハンドラ動作状態 */ 414 249 #endif /* TOPPERS_SUPPORT_OVRHDR */ 415 250 416 WINFO *p_winfo; /* å¾ 417 ã¡æ 418 å ±ãããã¯ã¸ã®ãã¤ã³ã¿ */ 419 MTXCB *p_lastmtx; /* æå¾ã«ããã¯ãããã¥ã¼ããã¯ã¹ */ 251 WINFO *p_winfo; /* 待ち情報ブロックへのポインタ */ 252 MTXCB *p_lastmtx; /* 最後にロックしたミューテックス */ 420 253 #ifdef TOPPERS_SUPPORT_OVRHDR 421 PRCTIM leftotm; /* æ®ãããã»ããµæé*/254 PRCTIM leftotm; /* 残りプロセッサ時間 */ 422 255 #endif /* TOPPERS_SUPPORT_OVRHDR */ 423 TSKCTXB tskctxb; /* ã¿ã¹ã¯ã³ã³ããã¹ããããã¯*/256 TSKCTXB tskctxb; /* タスクコンテキストブロック */ 424 257 } TCB; 425 258 426 259 /* 427 * å®è¡ç¶æ 428 ã®ã¿ã¹ã¯ 429 * 430 * å®è¡ç¶æ 431 ã®ã¿ã¹ã¯ï¼ï¼ããã»ããµãã³ã³ããã¹ããæã£ã¦ããã¿ã¹ã¯ï¼ã® 432 * TCBãæããã¤ã³ã¿ï¼å®è¡ç¶æ 433 ã®ã¿ã¹ã¯ããªãå ´åã¯NULLã«ããï¼ 434 * 435 * ãµã¼ãã¹ã³ã¼ã«ã®å¦çä¸ã§ï¼èªã¿ã¹ã¯ï¼ãµã¼ãã¹ã³ã¼ã«ãå¼ã³åºããã¿ã¹ 436 * ã¯ï¼ã«é¢ããæ 437 å ±ãåç 438 §ããå ´åã¯p_runtskã使ãï¼p_runtskãæ¸ãæã 439 * ãã®ã¯ï¼ãã£ã¹ãããã£ï¼ã¨åæåå¦çï¼ã®ã¿ã§ããï¼ 260 * 実行状態のタスク 261 * 262 * 実行状態のタスク(=プロセッサがコンテキストを持っているタスク)の 263 * TCBを指すポインタ.実行状態のタスクがない場合はNULLにする. 264 * 265 * サービスコールの処理中で,自タスク(サービスコールを呼び出したタス 266 * ク)に関する情報を参照する場合はp_runtskを使う.p_runtskを書き換え 267 * るのは,ディスパッチャ(と初期化処理)のみである. 440 268 */ 441 269 extern TCB *p_runtsk; 442 270 443 271 /* 444 * å®è¡ãã¹ãã¿ã¹ã¯ 445 * 446 * å®è¡ãã¹ãã¿ã¹ã¯ã®TCBãæããã¤ã³ã¿ï¼å®è¡ã§ããã¿ã¹ã¯ããªãå ´å㯠447 * NULLã«ããï¼ 448 * 449 * p_runtskã¯ï¼é常ã¯p_schedtskã¨ä¸è´ãã¦ãããï¼éã¿ã¹ã¯ã³ã³ããã¹ã 450 * å®è¡ä¸ã¯ï¼ä¸è´ãã¦ããã¨ã¯éããªãï¼å²è¾¼ã¿åªå 451 度ãã¹ã¯å 452 ¨è§£é¤ã§ãªã 453 * ç¶æ 454 ã®éã¨ãã£ã¹ãããç¦æ¢ç¶æ 455 ã®éï¼ããªãã¡ï¼dspflgãfalseã§ããéï¼ 456 * ã¯ï¼p_schedtskãæ´æ°ããªãï¼ 272 * 実行すべきタスク 273 * 274 * 実行すべきタスクのTCBを指すポインタ.実行できるタスクがない場合は 275 * NULLにする. 276 * 277 * p_runtskは,通常はp_schedtskと一致しているが,非タスクコンテキスト 278 * 実行中は,一致しているとは限らない.割込み優先度マスク全解除でない 279 * 状態の間とディスパッチ禁止状態の間(すなわち,dspflgがfalseである間) 280 * は,p_schedtskを更新しない. 457 281 */ 458 282 extern TCB *p_schedtsk; 459 283 460 284 /* 461 * ãã£ã¹ããã許å¯ç¶æ 462 463 * 464 * ãã£ã¹ããã許å¯ç¶æ 465 ã§ãããã¨ã示ããã©ã°ï¼ 285 * ディスパッチ許可状態 286 * 287 * ディスパッチ許可状態であることを示すフラグ. 466 288 */ 467 289 extern bool_t enadsp; 468 290 469 291 /* 470 * ã¿ã¹ã¯ãã£ã¹ãããå¯è½ç¶æ 471 472 * 473 * å²è¾¼ã¿åªå 474 度ãã¹ã¯å 475 ¨è§£é¤ç¶æ 476 ã§ããï¼ãã£ã¹ããã許å¯ç¶æ 477 ã§ããï¼ã㣠478 * ã¹ãããç¦æ¢ç¶æ 479 ã§ãªãï¼ãã¨ã示ããã©ã°ï¼ãã£ã¹ãããä¿çç¶æ 480 ã§ãª 481 * ããã¨ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãå®è¡ä¸ã§ï¼CPUããã¯ç¶æ 482 ã§ãªãï¼dspflgã 483 * trueã§ãããã¨ã§å¤å¥ãããã¨ãã§ããï¼ 292 * タスクディスパッチ可能状態 293 * 294 * 割込み優先度マスク全解除状態であり,ディスパッチ許可状態である(ディ 295 * スパッチ禁止状態でない)ことを示すフラグ.ディスパッチ保留状態でな 296 * いことは,タスクコンテキスト実行中で,CPUロック状態でなく,dspflgが 297 * trueであることで判別することができる. 484 298 */ 485 299 extern bool_t dspflg; 486 300 487 301 /* 488 * ã¬ãã£ãã¥ã¼ 489 * 490 * ã¬ãã£ãã¥ã¼ã¯ï¼å®è¡ã§ããç¶æ 491 ã®ã¿ã¹ã¯ã管çããããã®ãã¥ã¼ã§ããï¼ 492 * å®è¡ç¶æ 493 ã®ã¿ã¹ã¯ã管çãã¦ããããï¼ã¬ãã£ï¼å®è¡å¯è½ï¼ãã¥ã¼ã¨ãã 494 * å称ã¯æ£ç¢ºã§ã¯ãªããï¼ã¬ãã£ãã¥ã¼ã¨ããå称ãå®çãã¦ããããï¼ã 495 * ã®å称ã§å¼ã¶ãã¨ã«ããï¼ 496 * 497 * ã¬ãã£ãã¥ã¼ã¯ï¼åªå 498 度ãã¨ã®ã¿ã¹ã¯ãã¥ã¼ã§æ§æããã¦ããï¼ã¿ã¹ã¯ã® 499 * TCBã¯ï¼è©²å½ããåªå 500 度ã®ãã¥ã¼ã«ç»é²ãããï¼ 302 * レディキュー 303 * 304 * レディキューは,実行できる状態のタスクを管理するためのキューである. 305 * 実行状態のタスクも管理しているため,レディ(実行可能)キューという 306 * 名称は正確ではないが,レディキューという名称が定着しているため,こ 307 * の名称で呼ぶことにする. 308 * 309 * レディキューは,優先度ごとのタスクキューで構成されている.タスクの 310 * TCBは,該当する優先度のキューに登録される. 501 311 */ 502 312 extern QUEUE ready_queue[TNUM_TPRI]; 503 313 504 314 /* 505 * ã¬ãã£ãã¥ã¼ãµã¼ãã®ããã®ãããããã 506 * 507 * ã¬ãã£ãã¥ã¼ã®ãµã¼ããå¹çããè¡ãããã«ï¼åªå 508 度ãã¨ã®ã¿ã¹ã¯ãã¥ã¼ 509 * ã«ã¿ã¹ã¯ãå 510 ¥ã£ã¦ãããã©ããã示ããããããããç¨æãã¦ããï¼ãã 511 * ããããã使ããã¨ã§ï¼ã¡ã¢ãªã¢ã¯ã»ã¹ã®åæ°ãæ¸ãããã¨ãã§ãããï¼ 512 * ãããæä½å½ä»¤ãå 513 514 å®ãã¦ããªãããã»ããµã§ï¼åªå 515 度ã®æ®µéæ°ãå°ãªã 516 * å ´åã«ã¯ï¼ããããããæä½ã®ãªã¼ãã¼ãããã®ããã«ï¼éã«å¹çãè½ã¡ 517 * ãå¯è½æ§ãããï¼ 518 * 519 * åªå 520 度ã16段éã§ãããã¨ãä»®å®ãã¦ããããï¼uint16_tåã¨ãã¦ããï¼ 315 * レディキューサーチのためのビットマップ 316 * 317 * レディキューのサーチを効率よく行うために,優先度ごとのタスクキュー 318 * にタスクが入っているかどうかを示すビットマップを用意している.ビッ 319 * トマップを使うことで,メモリアクセスの回数を減らすことができるが, 320 * ビット操作命令が充実していないプロセッサで,優先度の段階数が少ない 321 * 場合には,ビットマップ操作のオーバーヘッドのために,逆に効率が落ち 322 * る可能性もある. 323 * 324 * 優先度が16段階であることを仮定しているため,uint16_t型としている. 521 325 */ 522 326 extern uint16_t ready_primap; 523 327 524 328 /* 525 * 使ç¨ãã¦ããªãTCBã®ãªã¹ã329 * 使用していないTCBのリスト 526 330 */ 527 331 extern QUEUE free_tcb; 528 332 529 333 /* 530 * ã¿ã¹ã¯IDã®æ大å¤ï¼kernel_cfg.cï¼334 * タスクIDの最大値(kernel_cfg.c) 531 335 */ 532 336 extern const ID tmax_tskid; … … 534 338 535 339 /* 536 * ã¿ã¹ã¯åæåãããã¯ã®ã¨ãªã¢ï¼kernel_cfg.cï¼340 * タスク初期化ブロックのエリア(kernel_cfg.c) 537 341 */ 538 342 extern const TINIB tinib_table[]; … … 540 344 541 345 /* 542 * ã¿ã¹ã¯çæé åºãã¼ãã«ï¼kernel_cfg.cï¼346 * タスク生成順序テーブル(kernel_cfg.c) 543 347 */ 544 348 extern const ID torder_table[]; 545 349 546 350 /* 547 * TCB ã®ã¨ãªã¢ï¼kernel_cfg.cï¼351 * TCBのエリア(kernel_cfg.c) 548 352 */ 549 353 extern TCB tcb_table[]; 550 354 551 355 /* 552 * ã¿ã¹ã¯ã®æ°356 * タスクの数 553 357 */ 554 358 #define tnum_tsk ((uint_t)(tmax_tskid - TMIN_TSKID + 1)) … … 556 360 557 361 /* 558 * ã¿ã¹ã¯IDããTCBãåãåºãããã®ãã¯ã362 * タスクIDからTCBを取り出すためのマクロ 559 363 */ 560 364 #define INDEX_TSK(tskid) ((uint_t)((tskid) - TMIN_TSKID)) … … 562 366 563 367 /* 564 * TCB ããã¿ã¹ã¯IDãåãåºãããã®ãã¯ã368 * TCBからタスクIDを取り出すためのマクロ 565 369 */ 566 370 #define TSKID(p_tcb) ((ID)(((p_tcb) - tcb_table) + TMIN_TSKID)) 567 371 568 372 /* 569 * ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®åæå373 * タスク管理モジュールの初期化 570 374 */ 571 375 extern void initialize_task(void); 572 376 573 377 /* 574 * æé«åªå 575 é ä½ã¿ã¹ã¯ã®ãµã¼ã 576 * 577 * ã¬ãã£ãã¥ã¼ä¸ã®æé«åªå 578 é ä½ã®ã¿ã¹ã¯ããµã¼ããï¼ãã®TCBã¸ã®ãã¤ã³ã¿ 579 * ãè¿ãï¼ã¬ãã£ãã¥ã¼ã空ã®å ´åã«ã¯ï¼ãã®é¢æ°ãå¼ã³åºãã¦ã¯ãªããªãï¼ 378 * 最高優先順位タスクのサーチ 379 * 380 * レディキュー中の最高優先順位のタスクをサーチし,そのTCBへのポインタ 381 * を返す.レディキューが空の場合には,この関数を呼び出してはならない. 580 382 */ 581 383 extern TCB *search_schedtsk(void); 582 384 583 385 /* 584 * å®è¡ã§ããç¶æ 585 ã¸ã®é·ç§» 586 * 587 * p_tcbã§æå®ãããã¿ã¹ã¯ãã¬ãã£ãã¥ã¼ã«æ¿å 588 ¥ããï¼ã¬ãã£ãã¥ã¼ã«æ¿å 589 ¥ 590 * ããã¿ã¹ã¯ã®åªå 591 度ãï¼å®è¡ãã¹ãã¿ã¹ã¯ã®åªå 592 度ãããé«ãå ´åã¯ï¼å® 593 * è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼ 386 * 実行できる状態への遷移 387 * 388 * p_tcbで指定されるタスクをレディキューに挿入する.レディキューに挿入 389 * したタスクの優先度が,実行すべきタスクの優先度よりも高い場合は,実 390 * 行すべきタスクを更新する. 594 391 */ 595 392 extern void make_runnable(TCB *p_tcb); 596 393 597 394 /* 598 * å®è¡ã§ããç¶æ 599 ããä»ã®ç¶æ 600 ã¸ã®é·ç§» 601 * 602 * p_tcbã§æå®ãããã¿ã¹ã¯ãã¬ãã£ãã¥ã¼ããåé¤ããï¼p_tcbã§æå®ãã 603 * ã¿ã¹ã¯ãå®è¡ãã¹ãã¿ã¹ã¯ã§ãã£ãå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ã 604 * ãï¼ 395 * 実行できる状態から他の状態への遷移 396 * 397 * p_tcbで指定されるタスクをレディキューから削除する.p_tcbで指定した 398 * タスクが実行すべきタスクであった場合には,実行すべきタスクを更新す 399 * る. 605 400 */ 606 401 extern void make_non_runnable(TCB *p_tcb); 607 402 608 403 /* 609 * ä¼æ¢ç¶æ 610 ã¸ã®é·ç§» 611 * 612 * p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¶æ 613 ãä¼æ¢ç¶æ 614 ã¨ããï¼ã¾ãï¼ã¿ã¹ã¯ã®èµ·å 615 * æã«åæåãã¹ãå¤æ°ã®åæåã¨ï¼ã¿ã¹ã¯èµ·åã®ããã®ã³ã³ããã¹ããè¨ 616 * å®ããï¼ 404 * 休止状態への遷移 405 * 406 * p_tcbで指定されるタスクの状態を休止状態とする.また,タスクの起動 407 * 時に初期化すべき変数の初期化と,タスク起動のためのコンテキストを設 408 * 定する. 617 409 */ 618 410 extern void make_dormant(TCB *p_tcb); 619 411 620 412 /* 621 * ä¼æ¢ç¶æ 622 ããå®è¡ã§ããç¶æ 623 ã¸ã®é·ç§» 624 * 625 * p_tcbã§æå®ãããã¿ã¹ã¯ã®ç¶æ 626 ãä¼æ¢ç¶æ 627 ããå®è¡ã§ããç¶æ 628 ã¨ããï¼ 413 * 休止状態から実行できる状態への遷移 414 * 415 * p_tcbで指定されるタスクの状態を休止状態から実行できる状態とする. 629 416 */ 630 417 extern void make_active(TCB *p_tcb); 631 418 632 419 /* 633 * ã¿ã¹ã¯ã®åªå 634 度ã®å¤æ´ 635 * 636 * p_tcbã§æå®ãããã¿ã¹ã¯ã®åªå 637 度ãnewpriï¼å 638 é¨è¡¨ç¾ï¼ã«å¤æ´ããï¼ã¾ãï¼ 639 * å¿ 640 è¦ãªå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼ 641 * 642 * p_tcbã§æå®ãããã¿ã¹ã¯ã®åªå 643 é ä½ã¯ï¼åªå 644 度ãåãã¿ã¹ã¯ã®ä¸ã§ï¼ 645 * mtxmodeãfalseã®æã¯æä½ï¼mtxmodeãtrueã®æã¯æé«ã¨ããï¼ 420 * タスクの優先度の変更 421 * 422 * p_tcbで指定されるタスクの優先度をnewpri(内部表現)に変更する.また, 423 * 必要な場合には,実行すべきタスクを更新する. 424 * 425 * p_tcbで指定されるタスクの優先順位は,優先度が同じタスクの中で, 426 * mtxmodeがfalseの時は最低,mtxmodeがtrueの時は最高とする. 646 427 */ 647 428 extern void change_priority(TCB *p_tcb, uint_t newpri, bool_t mtxmode); 648 429 649 430 /* 650 * ã¬ãã£ãã¥ã¼ã®å転 651 * 652 * ã¬ãã£ãã¥ã¼ä¸ã®ï¼p_queueã§æå®ãããã¿ã¹ã¯ãã¥ã¼ãå転ãããï¼ã¾ãï¼ 653 * å¿ 654 è¦ãªå ´åã«ã¯ï¼å®è¡ãã¹ãã¿ã¹ã¯ãæ´æ°ããï¼ 431 * レディキューの回転 432 * 433 * レディキュー中の,p_queueで指定されるタスクキューを回転させる.また, 434 * 必要な場合には,実行すべきタスクを更新する. 655 435 */ 656 436 extern void rotate_ready_queue(QUEUE *p_queue); 657 437 658 438 /* 659 * ã¿ã¹ã¯ã®çµäºå¦ç660 * 661 * p_tcb ã§æå®ãããã¿ã¹ã¯ãçµäºãããå¦çãè¡ãï¼ã¿ã¹ã¯ã®èµ·åè¦æ±ãã¥ã¼662 * ã¤ã³ã°æ°ã0ã§ãªãå ´åã«ã¯ï¼å度起åããããã®å¦çãè¡ãï¼439 * タスクの終了処理 440 * 441 * p_tcbで指定されるタスクを終了させる処理を行う.タスクの起動要求キュー 442 * イング数が0でない場合には,再度起動するための処理を行う. 663 443 */ 664 444 extern void task_terminate(TCB *p_tcb); -
asp3_gr_sakura/trunk/kernel/task.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby; charset=UTF-8
r317 r318 9 9 # Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 # 11 # ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 # å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 # ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 # è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 # ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 # ã¨ï¼ 30 # (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 # (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 # å ±åãããã¨ï¼ 38 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 # 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 # å 46 責ãããã¨ï¼ 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 # 免責すること. 47 33 # 48 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 # ã®è²¬ä»»ãè² ããªãï¼ 34 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 # の責任を負わない. 54 39 # 55 # $Id : task.trb 668 2016-03-03 13:57:53Z ertl-hiro$40 # $Id$ 56 41 # 57 42 58 43 # 59 # ã¿ã¹ã¯ç®¡çã¢ã¸ã¥ã¼ã«ã®çæã¹ã¯ãªãã44 # タスク管理モジュールの生成スクリプト 60 45 # 61 46 … … 66 51 67 52 def prepare(key, params) 68 # ãã©ã¡ã¼ã¿ãçç¥ãããæã®ããã©ã«ãå¤ã®è¨å®53 # パラメータが省略された時のデフォルト値の設定 69 54 params[:stk] ||= "NULL" 70 55 71 # tskatr ãç¡å¹ã®å ´åï¼E_RSATRï¼ï¼»NGKI1028ï¼½72 # ï¼TA_ACTï¼TA_NOACTQUEï¼TARGET_TSKATR以å¤ã®ããããã»ããããã¦ããå ´åï¼56 # tskatrが無効の場合(E_RSATR)[NGKI1028] 57 #(TA_ACT,TA_NOACTQUE,TARGET_TSKATR以外のビットがセットされている場合) 73 58 if (params[:tskatr] & ~($TA_ACT|$TA_NOACTQUE|$TARGET_TSKATR)) != 0 74 59 error_illegal_id("E_RSATR", params, :tskatr, :tskid) 75 60 end 76 61 77 # (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI) ã§ãªãå ´åï¼»NGKI1034ï¼½62 # (TMIN_TPRI <= itskpri && itskpri <= TMAX_TPRI)でない場合[NGKI1034] 78 63 if !($TMIN_TPRI <= params[:itskpri] && params[:itskpri] <= $TMAX_TPRI) 79 64 error_illegal_id("E_PAR", params, :itskpri, :tskid) 80 65 end 81 66 82 # stksz ãã¿ã¼ã²ããå®ç¾©ã®æå°å¤ï¼TARGET_MIN_STKSZï¼æªå®ç¾©ã®å ´åã¯1ï¼83 # ãããå°ããå ´åï¼»NGKI1042ï¼½67 # stkszがターゲット定義の最小値(TARGET_MIN_STKSZ,未定義の場合は1) 68 # よりも小さい場合[NGKI1042] 84 69 if params[:stksz] < $TARGET_MIN_STKSZ 85 70 error_wrong_id("E_PAR", params, :stksz, :tskid, "too small") 86 71 end 87 72 88 # ã¹ã¿ãã¯é åã®è¨å®ï¼»NGKI1041ï¼½73 # スタック領域の設定[NGKI1041] 89 74 if params[:stk] == "NULL" 90 # ã¹ã¿ãã¯é åã®çæï¼»NGKI1049ï¼½75 # スタック領域の生成[NGKI1049] 91 76 stkName = "_kernel_stack_#{params[:tskid]}" 92 77 params[:tinib_stksz] = AllocStack(stkName, params[:stksz]) 93 78 params[:tinib_stk] = stkName 94 79 else 95 # stksz ãã¹ã¿ãã¯é åã®ãµã¤ãºã¨ãã¦æ£ãããªãå ´åï¼»NGKI1056ï¼½80 # stkszがスタック領域のサイズとして正しくない場合[NGKI1056] 96 81 if (params[:stksz] & ($CHECK_STKSZ_ALIGN - 1)) != 0 97 82 error_wrong_id("E_PAR", params, :stksz, :tskid, "not aligned") … … 116 101 117 102 # 118 # ã¿ã¹ã¯ç®¡çã«é¢ããæ 119 å ±ã®çæ 103 # タスク管理に関する情報の生成 120 104 # 121 105 $kernelCfgC.comment_header("Task Management Functions") … … 125 109 TaskObject.new.generate() 126 110 127 # ã¿ã¹ã¯çæé åºãã¼ãã«ã®çæ111 # タスク生成順序テーブルの生成 128 112 $kernelCfgC.add("const ID _kernel_torder_table[TNUM_STSKID] = { ") 129 113 $kernelCfgC.append("\t") -
Property svn:mime-type
changed from
-
asp3_gr_sakura/trunk/kernel/task_manage.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯ç®¡çæ©è½44 * タスク管理機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_ACRE_TSK_ENTER … … 134 119 135 120 /* 136 * ã¿ã¹ã¯ã®çæ121 * タスクの生成 137 122 * 138 * pk_ctsk->exinfã¯ï¼ã¨ã©ã¼ãã§ãã¯ãããï¼ä¸åº¦ããåç 139 §ããªãããï¼ãã¼ 140 * ã«ã«å¤æ°ã«ã³ãã¼ããå¿ 141 è¦ããªãï¼éä¸ã§æ¸ãæãã£ã¦ãæ¯éããªãï¼ï¼ 123 * pk_ctsk->exinfは,エラーチェックをせず,一度しか参照しないため,ロー 124 * カル変数にコピーする必要がない(途中で書き換わっても支障がない). 142 125 */ 143 126 #ifdef TOPPERS_acre_tsk 144 127 145 128 #ifndef TARGET_MIN_STKSZ 146 #define TARGET_MIN_STKSZ 1U /* æªå®ç¾©ã®å ´åã¯0ã§ãªããã¨ããã§ãã¯*/129 #define TARGET_MIN_STKSZ 1U /* 未定義の場合は0でないことをチェック */ 147 130 #endif /* TARGET_MIN_STKSZ */ 148 131 … … 226 209 227 210 /* 228 * ã¿ã¹ã¯ã®åé¤ï¼»NGKI1100ï¼½211 * タスクの削除[NGKI1100] 229 212 */ 230 213 #ifdef TOPPERS_del_tsk … … 238 221 239 222 LOG_DEL_TSK_ENTER(tskid); 240 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1101][NGKI1102ï¼½*/241 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1103ï¼½*/223 CHECK_TSKCTX_UNL(); /*[NGKI1101][NGKI1102]*/ 224 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1103]*/ 242 225 p_tcb = get_tcb(tskid); 243 226 244 227 lock_cpu(); 245 228 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 246 ercd = E_NOEXS; /* ï¼»NGKI1104ï¼½*/229 ercd = E_NOEXS; /*[NGKI1104]*/ 247 230 } 248 231 else if (tskid <= tmax_stskid || !TSTAT_DORMANT(p_tcb->tstat)) { 249 ercd = E_OBJ; /* ï¼»NGKI1106][NGKI1107ï¼½*/232 ercd = E_OBJ; /*[NGKI1106][NGKI1107]*/ 250 233 } 251 234 else { … … 254 237 term_tskinictxb(&(p_tinib->tskinictxb)); 255 238 #else /* USE_TSKINICTXB */ 256 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /* ï¼»NGKI1109ï¼½*/239 if ((p_tinib->tskatr & TA_MEMALLOC) != 0U) { /*[NGKI1109]*/ 257 240 kernel_free(p_tinib->stk); 258 241 } 259 242 #endif /* USE_TSKINICTXB */ 260 p_tinib->tskatr = TA_NOEXS; /* ï¼»NGKI1108ï¼½*/243 p_tinib->tskatr = TA_NOEXS; /*[NGKI1108]*/ 261 244 queue_insert_prev(&free_tcb, &(p_tcb->task_queue)); 262 245 ercd = E_OK; … … 272 255 273 256 /* 274 * ã¿ã¹ã¯ã®èµ·åï¼»NGKI3529ï¼½257 * タスクの起動[NGKI3529] 275 258 */ 276 259 #ifdef TOPPERS_act_tsk … … 283 266 284 267 LOG_ACT_TSK_ENTER(tskid); 285 CHECK_UNL(); /* ï¼»NGKI1114ï¼½*/268 CHECK_UNL(); /*[NGKI1114]*/ 286 269 if (tskid == TSK_SELF && !sense_context()) { 287 p_tcb = p_runtsk; /* ï¼»NGKI1121ï¼½*/288 } 289 else { 290 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1115ï¼½*/270 p_tcb = p_runtsk; /*[NGKI1121]*/ 271 } 272 else { 273 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1115]*/ 291 274 p_tcb = get_tcb(tskid); 292 275 } … … 294 277 lock_cpu(); 295 278 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 296 ercd = E_NOEXS; /* ï¼»NGKI1116ï¼½*/279 ercd = E_NOEXS; /*[NGKI1116]*/ 297 280 } 298 281 else if (TSTAT_DORMANT(p_tcb->tstat)) { 299 make_active(p_tcb); /* ï¼»NGKI1118ï¼½*/282 make_active(p_tcb); /*[NGKI1118]*/ 300 283 if (p_runtsk != p_schedtsk) { 301 284 if (!sense_context()) { … … 309 292 } 310 293 else if ((p_tcb->p_tinib->tskatr & TA_NOACTQUE) != 0U || p_tcb->actque) { 311 ercd = E_QOVR; /* ï¼»NGKI3528ï¼½*/312 } 313 else { 314 p_tcb->actque = true; /* ï¼»NGKI3527ï¼½*/294 ercd = E_QOVR; /*[NGKI3528]*/ 295 } 296 else { 297 p_tcb->actque = true; /*[NGKI3527]*/ 315 298 ercd = E_OK; 316 299 } … … 325 308 326 309 /* 327 * ã¿ã¹ã¯èµ·åè¦æ±ã®ãã£ã³ã»ã«ï¼»NGKI1138ï¼½310 * タスク起動要求のキャンセル[NGKI1138] 328 311 */ 329 312 #ifdef TOPPERS_can_act … … 336 319 337 320 LOG_CAN_ACT_ENTER(tskid); 338 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1139][NGKI1140ï¼½*/321 CHECK_TSKCTX_UNL(); /*[NGKI1139][NGKI1140]*/ 339 322 if (tskid == TSK_SELF) { 340 p_tcb = p_runtsk; /* ï¼»NGKI1146ï¼½*/341 } 342 else { 343 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1141ï¼½*/323 p_tcb = p_runtsk; /*[NGKI1146]*/ 324 } 325 else { 326 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1141]*/ 344 327 p_tcb = get_tcb(tskid); 345 328 } … … 347 330 lock_cpu(); 348 331 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 349 ercd = E_NOEXS; /* ï¼»NGKI1142ï¼½*/350 } 351 else { 352 ercd = p_tcb->actque ? 1 : 0; /* ï¼»NGKI1144ï¼½*/353 p_tcb->actque = false; /* ï¼»NGKI1144ï¼½*/332 ercd = E_NOEXS; /*[NGKI1142]*/ 333 } 334 else { 335 ercd = p_tcb->actque ? 1 : 0; /*[NGKI1144]*/ 336 p_tcb->actque = false; /*[NGKI1144]*/ 354 337 } 355 338 unlock_cpu(); … … 363 346 364 347 /* 365 * ã¿ã¹ã¯ç¶æ 366 ã®åç 367 §ï¼»NGKI3613ï¼½ 348 * タスク状態の参照[NGKI3613] 368 349 */ 369 350 #ifdef TOPPERS_get_tst … … 377 358 378 359 LOG_GET_TST_ENTER(tskid, p_tskstat); 379 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3614][NGKI3615ï¼½*/360 CHECK_TSKCTX_UNL(); /*[NGKI3614][NGKI3615]*/ 380 361 if (tskid == TSK_SELF) { 381 p_tcb = p_runtsk; /* ï¼»NGKI3621ï¼½*/382 } 383 else { 384 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI3616ï¼½*/362 p_tcb = p_runtsk; /*[NGKI3621]*/ 363 } 364 else { 365 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI3616]*/ 385 366 p_tcb = get_tcb(tskid); 386 367 } … … 389 370 tstat = p_tcb->tstat; 390 371 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 391 ercd = E_NOEXS; /* ï¼»NGKI3617ï¼½*/392 } 393 else { 394 if (TSTAT_DORMANT(tstat)) { /* ï¼»NGKI3620ï¼½*/372 ercd = E_NOEXS; /*[NGKI3617]*/ 373 } 374 else { 375 if (TSTAT_DORMANT(tstat)) { /*[NGKI3620]*/ 395 376 *p_tskstat = TTS_DMT; 396 377 } … … 424 405 425 406 /* 426 * ã¿ã¹ã¯ã®ãã¼ã¹åªå 427 度ã®å¤æ´ï¼»NGKI1183ï¼½ 407 * タスクのベース優先度の変更[NGKI1183] 428 408 */ 429 409 #ifdef TOPPERS_chg_pri … … 437 417 438 418 LOG_CHG_PRI_ENTER(tskid, tskpri); 439 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1184][NGKI1185ï¼½*/419 CHECK_TSKCTX_UNL(); /*[NGKI1184][NGKI1185]*/ 440 420 if (tskid == TSK_SELF) { 441 p_tcb = p_runtsk; /* ï¼»NGKI1198ï¼½*/442 } 443 else { 444 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1187ï¼½*/421 p_tcb = p_runtsk; /*[NGKI1198]*/ 422 } 423 else { 424 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1187]*/ 445 425 p_tcb = get_tcb(tskid); 446 426 } 447 427 if (tskpri == TPRI_INI) { 448 newbpri = p_tcb->p_tinib->ipriority; /* ï¼»NGKI1199ï¼½*/449 } 450 else { 451 CHECK_PAR(VALID_TPRI(tskpri)); /* ï¼»NGKI1188ï¼½*/428 newbpri = p_tcb->p_tinib->ipriority; /*[NGKI1199]*/ 429 } 430 else { 431 CHECK_PAR(VALID_TPRI(tskpri)); /*[NGKI1188]*/ 452 432 newbpri = INT_PRIORITY(tskpri); 453 433 } … … 455 435 lock_cpu(); 456 436 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 457 ercd = E_NOEXS; /* ï¼»NGKI1189ï¼½*/437 ercd = E_NOEXS; /*[NGKI1189]*/ 458 438 } 459 439 else if (TSTAT_DORMANT(p_tcb->tstat)) { 460 ercd = E_OBJ; /* ï¼»NGKI1191ï¼½*/440 ercd = E_OBJ; /*[NGKI1191]*/ 461 441 } 462 442 else if ((p_tcb->p_lastmtx != NULL || TSTAT_WAIT_MTX(p_tcb->tstat)) 463 443 && !((*mtxhook_check_ceilpri)(p_tcb, newbpri))) { 464 ercd = E_ILUSE; /* ï¼»NGKI1201ï¼½*/465 } 466 else { 467 p_tcb->bpriority = newbpri; /* ï¼»NGKI1192ï¼½*/444 ercd = E_ILUSE; /*[NGKI1201]*/ 445 } 446 else { 447 p_tcb->bpriority = newbpri; /*[NGKI1192]*/ 468 448 if (p_tcb->p_lastmtx == NULL || !((*mtxhook_scan_ceilmtx)(p_tcb))) { 469 change_priority(p_tcb, newbpri, false); /* ï¼»NGKI1193ï¼½*/449 change_priority(p_tcb, newbpri, false); /*[NGKI1193]*/ 470 450 if (p_runtsk != p_schedtsk) { 471 451 dispatch(); 472 } /* ï¼»NGKI1197ï¼½*/452 } /*[NGKI1197]*/ 473 453 } 474 454 ercd = E_OK; … … 484 464 485 465 /* 486 * ã¿ã¹ã¯åªå 487 度ã®åç 488 §ï¼»NGKI1202ï¼½ 466 * タスク優先度の参照[NGKI1202] 489 467 */ 490 468 #ifdef TOPPERS_get_pri … … 497 475 498 476 LOG_GET_PRI_ENTER(tskid, p_tskpri); 499 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1203][NGKI1204ï¼½*/477 CHECK_TSKCTX_UNL(); /*[NGKI1203][NGKI1204]*/ 500 478 if (tskid == TSK_SELF) { 501 p_tcb = p_runtsk; /* ï¼»NGKI1211ï¼½*/502 } 503 else { 504 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1205ï¼½*/479 p_tcb = p_runtsk; /*[NGKI1211]*/ 480 } 481 else { 482 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1205]*/ 505 483 p_tcb = get_tcb(tskid); 506 484 } … … 508 486 lock_cpu(); 509 487 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 510 ercd = E_NOEXS; /* ï¼»NGKI1206ï¼½*/488 ercd = E_NOEXS; /*[NGKI1206]*/ 511 489 } 512 490 else if (TSTAT_DORMANT(p_tcb->tstat)) { 513 ercd = E_OBJ; /* ï¼»NGKI1209ï¼½*/514 } 515 else { 516 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /* ï¼»NGKI1210ï¼½*/491 ercd = E_OBJ; /*[NGKI1209]*/ 492 } 493 else { 494 *p_tskpri = EXT_TSKPRI(p_tcb->priority); /*[NGKI1210]*/ 517 495 ercd = E_OK; 518 496 } … … 527 505 528 506 /* 529 * èªã¿ã¹ã¯ã®æ¡å¼µæ 530 å ±ã®åç 531 §ï¼»NGKI1212ï¼½ 507 * 自タスクの拡張情報の参照[NGKI1212] 532 508 */ 533 509 #ifdef TOPPERS_get_inf … … 539 515 540 516 LOG_GET_INF_ENTER(p_exinf); 541 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1213][NGKI1214ï¼½*/542 543 lock_cpu(); 544 *p_exinf = p_runtsk->p_tinib->exinf; /* ï¼»NGKI1216ï¼½*/517 CHECK_TSKCTX_UNL(); /*[NGKI1213][NGKI1214]*/ 518 519 lock_cpu(); 520 *p_exinf = p_runtsk->p_tinib->exinf; /*[NGKI1216]*/ 545 521 ercd = E_OK; 546 522 unlock_cpu(); -
asp3_gr_sakura/trunk/kernel/task_refer.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 45 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ã¿ã¹ã¯ã®ç¶æ 58 åç 59 §æ©è½ 42 * タスクの状態参照機能 60 43 */ 61 44 … … 73 56 74 57 /* 75 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©58 * トレースログマクロのデフォルト定義 76 59 */ 77 60 #ifndef LOG_REF_TSK_ENTER … … 84 67 85 68 /* 86 * ã¿ã¹ã¯ã®ç¶æ 87 åç 88 § 69 * タスクの状態参照 89 70 */ 90 71 #ifdef TOPPERS_ref_tsk … … 115 96 if (TSTAT_DORMANT(tstat)) { 116 97 /* 117 * 対象ã¿ã¹ã¯ãä¼æ¢ç¶æ 118 ã®å ´å 98 * 対象タスクが休止状態の場合 119 99 */ 120 100 pk_rtsk->tskstat = TTS_DMT; … … 122 102 else { 123 103 /* 124 * ã¿ã¹ã¯ç¶æ 125 ã®ååºã 104 * タスク状態の取出し 126 105 */ 127 106 if (TSTAT_SUSPENDED(tstat)) { … … 144 123 145 124 /* 146 * ç¾å¨åªå 147 度ã¨ãã¼ã¹åªå 148 度ã®ååºã 125 * 現在優先度とベース優先度の取出し 149 126 */ 150 127 pk_rtsk->tskpri = EXT_TSKPRI(p_tcb->priority); … … 153 130 if (TSTAT_WAITING(tstat)) { 154 131 /* 155 * å¾ 156 ã¡è¦å ã¨å¾ 157 ã¡å¯¾è±¡ã®ãªãã¸ã§ã¯ãã®IDã®ååºã 132 * 待ち要因と待ち対象のオブジェクトのIDの取出し 158 133 */ 159 134 switch (tstat) { … … 207 182 208 183 /* 209 * ã¿ã¤ã ã¢ã¦ãããã¾ã§ã®æéã®ååºã184 * タイムアウトするまでの時間の取出し 210 185 */ 211 186 if (p_tcb->p_winfo->p_tmevtb != NULL) { … … 219 194 220 195 /* 221 * èµ·åºè¦æ±ãã¥ã¼ã¤ã³ã°æ°ã®ååºã196 * 起床要求キューイング数の取出し 222 197 */ 223 198 pk_rtsk->wupcnt = p_tcb->wupque ? 1U : 0U; 224 199 225 200 /* 226 * ã¿ã¹ã¯çµäºè¦æ±ç¶æ 227 ã®ååºã 201 * タスク終了要求状態の取出し 228 202 */ 229 203 pk_rtsk->raster = p_tcb->raster; 230 204 231 205 /* 232 * ã¿ã¹ã¯çµäºç¦æ¢ç¶æ 233 ã®ååºã 206 * タスク終了禁止状態の取出し 234 207 */ 235 208 pk_rtsk->dister = !(p_tcb->enater); … … 237 210 238 211 /* 239 * èµ·åè¦æ±ãã¥ã¼ã¤ã³ã°æ°ã®ååºã212 * 起動要求キューイング数の取出し 240 213 */ 241 214 pk_rtsk->actcnt = p_tcb->actque ? 1U : 0U; -
asp3_gr_sakura/trunk/kernel/task_sync.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯ä»å±åææ©è½44 * タスク付属同期機能 60 45 */ 61 46 … … 66 51 67 52 /* 68 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©53 * トレースログマクロのデフォルト定義 69 54 */ 70 55 #ifndef LOG_SLP_TSK_ENTER … … 133 118 134 119 /* 135 * èµ·åºå¾ 136 ã¡ 120 * 起床待ち 137 121 */ 138 122 #ifdef TOPPERS_slp_tsk … … 172 156 173 157 /* 174 * èµ·åºå¾ 175 ã¡ï¼ã¿ã¤ã ã¢ã¦ãããï¼ 158 * 起床待ち(タイムアウトあり) 176 159 */ 177 160 #ifdef TOPPERS_tslp_tsk … … 216 199 217 200 /* 218 * ã¿ã¹ã¯ã®èµ·åº201 * タスクの起床 219 202 */ 220 203 #ifdef TOPPERS_wup_tsk … … 272 255 273 256 /* 274 * ã¿ã¹ã¯èµ·åºè¦æ±ã®ãã£ã³ã»ã«257 * タスク起床要求のキャンセル 275 258 */ 276 259 #ifdef TOPPERS_can_wup … … 313 296 314 297 /* 315 * å¾ 316 ã¡ç¶æ 317 ã®å¼·å¶è§£é¤ 298 * 待ち状態の強制解除 318 299 */ 319 300 #ifdef TOPPERS_rel_wai … … 362 343 363 344 /* 364 * å¼·å¶å¾ 365 ã¡ç¶æ 366 ã¸ã®ç§»è¡ï¼»NGKI1298ï¼½ 345 * 強制待ち状態への移行[NGKI1298] 367 346 */ 368 347 #ifdef TOPPERS_sus_tsk … … 375 354 376 355 LOG_SUS_TSK_ENTER(tskid); 377 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1299][NGKI1300ï¼½*/356 CHECK_TSKCTX_UNL(); /*[NGKI1299][NGKI1300]*/ 378 357 if (tskid == TSK_SELF) { 379 p_tcb = p_runtsk; /* ï¼»NGKI1310ï¼½*/380 } 381 else { 382 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1302ï¼½*/358 p_tcb = p_runtsk; /*[NGKI1310]*/ 359 } 360 else { 361 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1302]*/ 383 362 p_tcb = get_tcb(tskid); 384 363 } 385 364 386 365 lock_cpu(); 387 if (p_tcb == p_runtsk && !dspflg) { /* ï¼»NGKI1311][NGKI3604ï¼½*/366 if (p_tcb == p_runtsk && !dspflg) { /*[NGKI1311][NGKI3604]*/ 388 367 ercd = E_CTX; 389 368 } 390 369 else if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 391 ercd = E_NOEXS; /* ï¼»NGKI1303ï¼½*/370 ercd = E_NOEXS; /*[NGKI1303]*/ 392 371 } 393 372 else if (TSTAT_DORMANT(p_tcb->tstat)) { 394 ercd = E_OBJ; /* ï¼»NGKI1305ï¼½*/373 ercd = E_OBJ; /*[NGKI1305]*/ 395 374 } 396 375 else if (p_tcb->raster) { 397 ercd = E_RASTER; /* ï¼»NGKI3605ï¼½*/376 ercd = E_RASTER; /*[NGKI3605]*/ 398 377 } 399 378 else if (TSTAT_RUNNABLE(p_tcb->tstat)) { 400 379 /* 401 * å®è¡ã§ããç¶æ 402 ããå¼·å¶å¾ 403 ã¡ç¶æ 404 ã¸ã®é·ç§»ï¼»NGKI1307ï¼½ 380 * 実行できる状態から強制待ち状態への遷移[NGKI1307] 405 381 */ 406 382 p_tcb->tstat = TS_SUSPENDED; … … 413 389 } 414 390 else if (TSTAT_SUSPENDED(p_tcb->tstat)) { 415 ercd = E_QOVR; /* ï¼»NGKI1306ï¼½*/391 ercd = E_QOVR; /*[NGKI1306]*/ 416 392 } 417 393 else { 418 394 /* 419 * å¾ 420 ã¡ç¶æ 421 ããäºéå¾ 422 ã¡ç¶æ 423 ã¸ã®é·ç§»ï¼»NGKI1308ï¼½ 395 * 待ち状態から二重待ち状態への遷移[NGKI1308] 424 396 */ 425 397 p_tcb->tstat |= TS_SUSPENDED; … … 437 409 438 410 /* 439 * å¼·å¶å¾ 440 ã¡ç¶æ 441 ããã®åé 411 * 強制待ち状態からの再開 442 412 */ 443 413 #ifdef TOPPERS_rsm_tsk … … 463 433 else if (!TSTAT_WAITING(p_tcb->tstat)) { 464 434 /* 465 * å¼·å¶å¾ 466 ã¡ç¶æ 467 ããå®è¡ã§ããç¶æ 468 ã¸ã®é·ç§» 435 * 強制待ち状態から実行できる状態への遷移 469 436 */ 470 437 p_tcb->tstat = TS_RUNNABLE; … … 478 445 else { 479 446 /* 480 * äºéå¾ 481 ã¡ç¶æ 482 ããå¾ 483 ã¡ç¶æ 484 ã¸ã®é·ç§» 447 * 二重待ち状態から待ち状態への遷移 485 448 */ 486 449 p_tcb->tstat &= ~TS_SUSPENDED; … … 498 461 499 462 /* 500 * èªã¿ã¹ã¯ã®é 501 延 463 * 自タスクの遅延 502 464 */ 503 465 #ifdef TOPPERS_dly_tsk -
asp3_gr_sakura/trunk/kernel/task_term.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¹ã¯çµäºæ©è½44 * タスク終了機能 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©54 * トレースログマクロのデフォルト定義 70 55 */ 71 56 #ifndef LOG_EXT_TSK_ENTER … … 118 103 119 104 /* 120 * èªã¿ã¹ã¯ã®çµäºï¼»NGKI1162ï¼½105 * 自タスクの終了[NGKI1162] 121 106 */ 122 107 #ifdef TOPPERS_ext_tsk … … 129 114 130 115 LOG_EXT_TSK_ENTER(); 131 CHECK_TSKCTX(); /* ï¼»NGKI1164ï¼½*/116 CHECK_TSKCTX(); /*[NGKI1164]*/ 132 117 133 118 if (sense_lock()) { 134 119 /* 135 * CPUããã¯ç¶æ 136 ã§ext_tskãå¼ã°ããå ´åã¯ï¼CPUããã¯ã解é¤ã 137 * ã¦ããã¿ã¹ã¯ãçµäºããï¼å®è£ 138 ä¸ã¯ï¼ãµã¼ãã¹ã³ã¼ã«å 139 ã§ã®CPU 140 * ããã¯ãçç¥ããã°ããã ãï¼ï¼»NGKI1168ï¼½ 120 * CPUロック状態でext_tskが呼ばれた場合は,CPUロックを解除し 121 * てからタスクを終了する.実装上は,サービスコール内でのCPU 122 * ロックを省略すればよいだけ.[NGKI1168] 141 123 */ 142 124 } … … 149 131 if (!enadsp) { 150 132 /* 151 * ãã£ã¹ãããç¦æ¢ç¶æ 152 ã§ext_tskãå¼ã°ããå ´åã¯ï¼ãã£ã¹ãã 153 * ã許å¯ç¶æ 154 ã«ãã¦ããã¿ã¹ã¯ãçµäºããï¼ï¼»NGKI1168ï¼½ 133 * ディスパッチ禁止状態でext_tskが呼ばれた場合は,ディスパッ 134 * チ許可状態にしてからタスクを終了する.[NGKI1168] 155 135 */ 156 136 enadsp = true; … … 158 138 if (intpri != TIPM_ENAALL) { 159 139 /* 160 * å²è¾¼ã¿åªå 161 度ãã¹ã¯ï¼IPMï¼ãTIPM_ENAALL以å¤ã®ç¶æ 162 㧠163 * ext_tskãå¼ã°ããå ´åã¯ï¼IPMãTIPM_ENAALLã«ãã¦ããã¿ã¹ 164 * ã¯ãçµäºããï¼ï¼»NGKI1168ï¼½ 140 * 割込み優先度マスク(IPM)がTIPM_ENAALL以外の状態で 141 * ext_tskが呼ばれた場合は,IPMをTIPM_ENAALLにしてからタス 142 * クを終了する.[NGKI1168] 165 143 */ 166 144 t_set_ipm(TIPM_ENAALL); … … 176 154 } 177 155 #endif /* TOPPERS_SUPPORT_OVRHDR */ 178 task_terminate(p_runtsk); /* ï¼»NGKI3449ï¼½*/179 exit_and_dispatch(); /* ï¼»NGKI1169ï¼½*/180 ercd = E_SYS; /* ï¼»NGKI1163ï¼½*/156 task_terminate(p_runtsk); /* [NGKI3449]*/ 157 exit_and_dispatch(); /* [NGKI1169]*/ 158 ercd = E_SYS; /* [NGKI1163]*/ 181 159 182 160 error_exit: … … 188 166 189 167 /* 190 * ã¿ã¹ã¯ã®çµäºè¦æ±ï¼»NGKI3469ï¼½168 * タスクの終了要求[NGKI3469] 191 169 */ 192 170 #ifdef TOPPERS_ras_ter … … 199 177 200 178 LOG_RAS_TER_ENTER(tskid); 201 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3470][NGKI3471ï¼½*/202 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI3472ï¼½*/179 CHECK_TSKCTX_UNL(); /*[NGKI3470][NGKI3471]*/ 180 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI3472]*/ 203 181 p_tcb = get_tcb(tskid); 204 CHECK_ILUSE(p_tcb != p_runtsk); /* ï¼»NGKI3475ï¼½*/182 CHECK_ILUSE(p_tcb != p_runtsk); /*[NGKI3475]*/ 205 183 206 184 lock_cpu(); 207 185 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 208 ercd = E_NOEXS; /* ï¼»NGKI3473ï¼½*/186 ercd = E_NOEXS; /*[NGKI3473]*/ 209 187 } 210 188 else if (TSTAT_DORMANT(p_tcb->tstat)) { 211 ercd = E_OBJ; /* ï¼»NGKI3476ï¼½*/189 ercd = E_OBJ; /*[NGKI3476]*/ 212 190 } 213 191 else if (p_tcb->enater) { 214 task_terminate(p_tcb); /* ï¼»NGKI3477ï¼½*/192 task_terminate(p_tcb); /*[NGKI3477]*/ 215 193 if (p_runtsk != p_schedtsk) { 216 194 dispatch(); … … 219 197 } 220 198 else { 221 p_tcb->raster = true; /* ï¼»NGKI3478ï¼½*/199 p_tcb->raster = true; /*[NGKI3478]*/ 222 200 if (!TSTAT_RUNNABLE(p_tcb->tstat)) { 223 201 if (TSTAT_WAITING(p_tcb->tstat)) { 224 wait_dequeue_wobj(p_tcb); /* ï¼»NGKI3479ï¼½*/202 wait_dequeue_wobj(p_tcb); /*[NGKI3479]*/ 225 203 wait_dequeue_tmevtb(p_tcb); 226 p_tcb->p_winfo->wercd = E_RASTER; /* ï¼»NGKI3480ï¼½*/204 p_tcb->p_winfo->wercd = E_RASTER; /*[NGKI3480]*/ 227 205 } 228 p_tcb->tstat = TS_RUNNABLE; /* ï¼»NGKI3606ï¼½*/206 p_tcb->tstat = TS_RUNNABLE; /*[NGKI3606]*/ 229 207 LOG_TSKSTAT(p_tcb); 230 208 make_runnable(p_tcb); … … 245 223 246 224 /* 247 * ã¿ã¹ã¯çµäºã®ç¦æ¢ï¼»NGKI3482ï¼½225 * タスク終了の禁止[NGKI3482] 248 226 */ 249 227 #ifdef TOPPERS_dis_ter … … 255 233 256 234 LOG_DIS_TER_ENTER(); 257 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3483][NGKI3484ï¼½*/235 CHECK_TSKCTX_UNL(); /*[NGKI3483][NGKI3484]*/ 258 236 259 237 lock_cpu(); 260 p_runtsk->enater = false; /* ï¼»NGKI3486ï¼½*/238 p_runtsk->enater = false; /*[NGKI3486]*/ 261 239 ercd = E_OK; 262 240 unlock_cpu(); … … 270 248 271 249 /* 272 * ã¿ã¹ã¯çµäºã®è¨±å¯ï¼»NGKI3487ï¼½250 * タスク終了の許可[NGKI3487] 273 251 */ 274 252 #ifdef TOPPERS_ena_ter … … 280 258 281 259 LOG_ENA_TER_ENTER(); 282 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3488][NGKI3489ï¼½*/260 CHECK_TSKCTX_UNL(); /*[NGKI3488][NGKI3489]*/ 283 261 284 262 lock_cpu(); … … 295 273 } 296 274 else { 297 p_runtsk->enater = true; /* ï¼»NGKI3491ï¼½*/275 p_runtsk->enater = true; /*[NGKI3491]*/ 298 276 ercd = E_OK; 299 277 } … … 308 286 309 287 /* 310 * ã¿ã¹ã¯çµäºç¦æ¢ç¶æ 311 ã®åç 312 §ï¼»NGKI3494ï¼½ 288 * タスク終了禁止状態の参照[NGKI3494] 313 289 */ 314 290 #ifdef TOPPERS_sns_ter … … 321 297 LOG_SNS_TER_ENTER(); 322 298 /* 323 * enater ãå¤æ´ã§ããã®ã¯èªã¿ã¹ã¯ã®ã¿ã§ããããï¼æä»å¶å¾¡ããã«èª324 * ãã§ãåé¡ãªãï¼299 * enaterを変更できるのは自タスクのみであるため,排他制御せずに読 300 * んでも問題ない. 325 301 */ 326 302 state = (p_runtsk != NULL && p_runtsk->enater) ? false : true; 327 /* ï¼»NGKI3495][NGKI3496ï¼½*/303 /*[NGKI3495][NGKI3496]*/ 328 304 LOG_SNS_TER_LEAVE(state); 329 305 return(state); … … 333 309 334 310 /* 335 * ã¿ã¹ã¯ã®å¼·å¶çµäºï¼»NGKI1170ï¼½311 * タスクの強制終了[NGKI1170] 336 312 */ 337 313 #ifdef TOPPERS_ter_tsk … … 344 320 345 321 LOG_TER_TSK_ENTER(tskid); 346 CHECK_TSKCTX_UNL(); /* ï¼»NGKI1171][NGKI1172ï¼½*/347 CHECK_ID(VALID_TSKID(tskid)); /* ï¼»NGKI1173ï¼½*/322 CHECK_TSKCTX_UNL(); /*[NGKI1171][NGKI1172]*/ 323 CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1173]*/ 348 324 p_tcb = get_tcb(tskid); 349 CHECK_ILUSE(p_tcb != p_runtsk); /* ï¼»NGKI1176ï¼½*/325 CHECK_ILUSE(p_tcb != p_runtsk); /*[NGKI1176]*/ 350 326 351 327 lock_cpu(); 352 328 if (p_tcb->p_tinib->tskatr == TA_NOEXS) { 353 ercd = E_NOEXS; /* ï¼»NGKI1174ï¼½*/329 ercd = E_NOEXS; /*[NGKI1174]*/ 354 330 } 355 331 else if (TSTAT_DORMANT(p_tcb->tstat)) { 356 ercd = E_OBJ; /* ï¼»NGKI1177ï¼½*/332 ercd = E_OBJ; /*[NGKI1177]*/ 357 333 } 358 334 else { 359 task_terminate(p_tcb); /* ï¼»NGKI3450ï¼½*/335 task_terminate(p_tcb); /*[NGKI3450]*/ 360 336 if (p_runtsk != p_schedtsk) { 361 337 dispatch(); -
asp3_gr_sakura/trunk/kernel/taskhook.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ã¿ã¹ã¯ç®¡çã«é¢é£ããããã¯ã«ã¼ãã³42 * タスク管理に関連するフックルーチン 58 43 */ 59 44 … … 63 48 64 49 /* 65 * ãã¥ã¼ããã¯ã¹æ©è½ã®ããã®ããã¯ã«ã¼ãã³50 * ミューテックス機能のためのフックルーチン 66 51 */ 67 52 #ifdef TOPPERS_mtxhook -
asp3_gr_sakura/trunk/kernel/taskhook.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 7 7 * Graduate School of Information Science, Nagoya Univ., JAPAN 8 8 * 9 * ä¸è¨èä½æ¨©è 10 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 11 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 12 * å¤ã»åé 13 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 14 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 15 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 16 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 17 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 18 * ç¨ã§ããå½¢ã§åé 19 å¸ããå ´åã«ã¯ï¼åé 20 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 21 * è 22 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 23 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 24 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 25 * ç¨ã§ããªãå½¢ã§åé 26 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 27 * ã¨ï¼ 28 * (a) åé 29 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 30 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 31 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 32 * (b) åé 33 å¸ã®å½¢æ 34 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 35 * å ±åãããã¨ï¼ 36 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 37 * 害ãããï¼ä¸è¨èä½æ¨©è 38 ããã³TOPPERSããã¸ã§ã¯ããå 39 責ãããã¨ï¼ 40 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 41 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ãã 43 * å 44 責ãããã¨ï¼ 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 * 免責すること. 45 31 * 46 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 47 ã 48 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 49 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 50 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 51 * ã®è²¬ä»»ãè² ããªãï¼ 32 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 33 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 34 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 35 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 36 * の責任を負わない. 52 37 * 53 38 * $Id$ … … 55 40 56 41 /* 57 * ã¿ã¹ã¯ç®¡çã«é¢é£ããããã¯ã«ã¼ãã³42 * タスク管理に関連するフックルーチン 58 43 */ 59 44 … … 65 50 66 51 /* 67 * ãã¥ã¼ããã¯ã¹æ©è½ã®ããã®ããã¯ã«ã¼ãã³52 * ミューテックス機能のためのフックルーチン 68 53 */ 69 54 extern bool_t (*mtxhook_check_ceilpri)(TCB *p_tcb, uint_t bpriority); -
asp3_gr_sakura/trunk/kernel/time_event.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¤ã ã¤ãã³ã管çã¢ã¸ã¥ã¼ã«44 * タイムイベント管理モジュール 60 45 */ 61 46 … … 64 49 65 50 /* 66 * TSTEP_HRTCNT ã®ç¯å²ãã§ãã¯51 * TSTEP_HRTCNTの範囲チェック 67 52 */ 68 53 #if TSTEP_HRTCNT > 4000U … … 71 56 72 57 /* 73 * HRTCNT_BOUND ã®ç¯å²ãã§ãã¯58 * HRTCNT_BOUNDの範囲チェック 74 59 */ 75 60 #if HRTCNT_BOUND >= 4294000000U … … 84 69 85 70 /* 86 * ã¿ã¤ã ã¤ãã³ããã¼ãæä½ãã¯ã71 * タイムイベントヒープ操作マクロ 87 72 */ 88 73 #define PARENT(p_tmevtn) (tmevt_heap + (((p_tmevtn) - tmevt_heap) >> 1)) 89 /* 親ãã¼ããæ±ãã*/74 /* 親ノードを求める */ 90 75 #define LCHILD(p_tmevtn) (tmevt_heap + (((p_tmevtn) - tmevt_heap) << 1)) 91 /* å·¦ã®åãã¼ããæ±ãã */ 92 /* 93 * ã¿ã¤ã ã¤ãã³ããã¼ãä¸ã®å 94 é ã®ãã¼ã 76 /* 左の子ノードを求める */ 77 /* 78 * タイムイベントヒープ中の先頭のノード 95 79 */ 96 80 #define p_top_tmevtn (&(tmevt_heap[1])) 97 81 #define top_evttim (tmevt_heap[1].p_tmevtb->evttim) 98 /* å 99 é ã®ã¿ã¤ã ã¤ãã³ãã®çºçæå» */ 100 /* 101 * ã¿ã¤ã ã¤ãã³ããã¼ãä¸ã®æå¾ã®ãã¼ã 82 /* 先頭のタイムイベントの発生時刻 */ 83 /* 84 * タイムイベントヒープ中の最後のノード 102 85 */ 103 86 #define p_last_tmevtn (tmevt_heap[0].p_last) 104 87 105 88 /* 106 * ã¤ãã³ãæå»ã®åå¾é¢ä¿ã®å¤å®ï¼»ASPD1009ï¼½89 * イベント時刻の前後関係の判定[ASPD1009] 107 90 * 108 * ã¤ãã³ãæå»ã¯ï¼boundary_evttimããã®ç¸å¯¾å¤ã§æ¯è¼ããï¼ããªãã¡ï¼ 109 * boundary_evttimãæãæ©ãæå»ï¼boundary_evttim-1ãæãé 110 ãæå»ã¨ã¿ 111 * ãªãã¦æ¯è¼ããï¼ 91 * イベント時刻は,boundary_evttimからの相対値で比較する.すなわち, 92 * boundary_evttimを最も早い時刻,boundary_evttim-1が最も遅い時刻とみ 93 * なして比較する. 112 94 */ 113 95 #define EVTTIM_ADVANCE(t) ((t) - boundary_evttim) … … 118 100 119 101 /* 120 * å¢çã¤ãã³ãæå»ï¼»ASPD1008ï¼½102 * 境界イベント時刻[ASPD1008] 121 103 */ 122 104 EVTTIM boundary_evttim; 123 105 124 106 /* 125 * æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®ã¤ãã³ãæå»ï¼»ASPD1012ï¼½107 * 最後に現在時刻を算出した時点でのイベント時刻[ASPD1012] 126 108 */ 127 109 EVTTIM current_evttim; 128 110 129 111 /* 130 * æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®é«å解è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ï¼»ASPD1012ï¼½112 * 最後に現在時刻を算出した時点での高分解能タイマのカウント値[ASPD1012] 131 113 */ 132 114 HRTCNT current_hrtcnt; 133 115 134 116 /* 135 * æãé²ãã§ããæã®ã¤ãã³ãæå»ï¼»ASPD1041ï¼½117 * 最も進んでいた時のイベント時刻[ASPD1041] 136 118 */ 137 119 EVTTIM monotonic_evttim; 138 120 139 121 /* 140 * ã·ã¹ãã æå»ã®ãªãã»ããï¼»ASPD1043ï¼½122 * システム時刻のオフセット[ASPD1043] 141 123 */ 142 124 SYSTIM systim_offset; 143 125 144 126 /* 145 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®å¦çä¸ã§ãããã¨ã示ããã©ã°ï¼»ASPD1032ï¼½127 * 高分解能タイマ割込みの処理中であることを示すフラグ[ASPD1032] 146 128 */ 147 129 bool_t in_signal_time; 148 130 149 131 /* 150 * ã¿ã¤ã ã¤ãã³ã管çã¢ã¸ã¥ã¼ã«ã®åæåï¼»ASPD1061ï¼½132 * タイムイベント管理モジュールの初期化[ASPD1061] 151 133 */ 152 134 void 153 135 initialize_tmevt(void) 154 136 { 155 current_evttim = 0U; /* ï¼»ASPD1047ï¼½*/137 current_evttim = 0U; /*[ASPD1047]*/ 156 138 boundary_evttim = current_evttim - BOUNDARY_MARGIN; 157 /* ï¼»ASPD1048ï¼½*/158 monotonic_evttim = 0U; /* ï¼»ASPD1046ï¼½*/159 systim_offset = 0U; /* ï¼»ASPD1044ï¼½*/160 in_signal_time = false; /* ï¼»ASPD1033ï¼½*/139 /*[ASPD1048]*/ 140 monotonic_evttim = 0U; /*[ASPD1046]*/ 141 systim_offset = 0U; /*[ASPD1044]*/ 142 in_signal_time = false; /*[ASPD1033]*/ 161 143 p_last_tmevtn = tmevt_heap; 162 144 } … … 165 147 166 148 /* 167 * ã¿ã¤ã ã¤ãã³ãã®æ¿å 168 ¥ä½ç½®ãä¸åãã«æ¢ç´¢ 149 * タイムイベントの挿入位置を上向きに探索 169 150 * 170 * æå»evttimã«çºçããã¿ã¤ã ã¤ãã³ããæ¿å 171 ¥ãããã¼ãã空ããããã«ï¼ 172 * ãã¼ãã®ä¸ã«åãã£ã¦ç©ºãã¼ãã移åãããï¼ç§»ååã®ç©ºãã¼ãã®ä½ç½®ã 173 * p_tmevtnã«æ¸¡ãã¨ï¼ç§»åå¾ã®ç©ºãã¼ãã®ä½ç½®ï¼ããªãã¡æ¿å 174 ¥ä½ç½®ï¼ãè¿ãï¼ 151 * 時刻evttimに発生するタイムイベントを挿入するノードを空けるために, 152 * ヒープの上に向かって空ノードを移動させる.移動前の空ノードの位置を 153 * p_tmevtnに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す. 175 154 */ 176 155 #ifdef TOPPERS_tmeup … … 183 162 while (p_tmevtn > p_top_tmevtn) { 184 163 /* 185 * 親ãã¼ãã®ã¤ãã³ãçºçæå»ã®æ¹ãæ©ãï¼ã¾ãã¯åãï¼ãªãã°ï¼ 186 * p_tmevtnãæ¿å 187 ¥ä½ç½®ãªã®ã§ã«ã¼ããæããï¼ 164 * 親ノードのイベント発生時刻の方が早い(または同じ)ならば, 165 * p_tmevtnが挿入位置なのでループを抜ける. 188 166 */ 189 167 p_parent = PARENT(p_tmevtn); … … 193 171 194 172 /* 195 * 親ãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼173 * 親ノードをp_tmevtnの位置に移動させる. 196 174 */ 197 175 *p_tmevtn = *p_parent; … … 199 177 200 178 /* 201 * p_tmevtn ã親ãã¼ãã®ä½ç½®ã«æ´æ°ï¼179 * p_tmevtnを親ノードの位置に更新. 202 180 */ 203 181 p_tmevtn = p_parent; … … 209 187 210 188 /* 211 * ã¿ã¤ã ã¤ãã³ãã®æ¿å 212 ¥ä½ç½®ãä¸åãã«æ¢ç´¢ 189 * タイムイベントの挿入位置を下向きに探索 213 190 * 214 * æå»evttimã«çºçããã¿ã¤ã ã¤ãã³ããæ¿å 215 ¥ãããã¼ãã空ããããã«ï¼ 216 * ãã¼ãã®ä¸ã«åãã£ã¦ç©ºãã¼ãã移åãããï¼ç§»ååã®ç©ºãã¼ãã®ä½ç½®ã 217 * p_tmevtnã«æ¸¡ãã¨ï¼ç§»åå¾ã®ç©ºãã¼ãã®ä½ç½®ï¼ããªãã¡æ¿å 218 ¥ä½ç½®ï¼ãè¿ãï¼ 191 * 時刻evttimに発生するタイムイベントを挿入するノードを空けるために, 192 * ヒープの下に向かって空ノードを移動させる.移動前の空ノードの位置を 193 * p_tmevtnに渡すと,移動後の空ノードの位置(すなわち挿入位置)を返す. 219 194 */ 220 195 #ifdef TOPPERS_tmedown … … 227 202 while ((p_child = LCHILD(p_tmevtn)) <= p_last_tmevtn) { 228 203 /* 229 * å·¦å³ã®åãã¼ãã®ã¤ãã³ãçºçæå»ãæ¯è¼ãï¼æ©ãæ¹ã®åãã¼ã230 * ã®ä½ç½®ãp_childã«è¨å®ããï¼ä»¥ä¸ã®åãã¼ãã¯ï¼ããã§é¸ã°ãã231 * æ¹ã®åãã¼ãã®ãã¨ï¼204 * 左右の子ノードのイベント発生時刻を比較し,早い方の子ノード 205 * の位置をp_childに設定する.以下の子ノードは,ここで選ばれた 206 * 方の子ノードのこと. 232 207 */ 233 208 if (p_child + 1 <= p_last_tmevtn … … 238 213 239 214 /* 240 * åãã¼ãã®ã¤ãã³ãçºçæå»ã®æ¹ãé 241 ãï¼ã¾ãã¯åãï¼ãªãã°ï¼ 242 * p_tmevtnãæ¿å 243 ¥ä½ç½®ãªã®ã§ã«ã¼ããæããï¼ 215 * 子ノードのイベント発生時刻の方が遅い(または同じ)ならば, 216 * p_tmevtnが挿入位置なのでループを抜ける. 244 217 */ 245 218 if (EVTTIM_LE(evttim, p_child->p_tmevtb->evttim)) { … … 248 221 249 222 /* 250 * åãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼223 * 子ノードをp_tmevtnの位置に移動させる. 251 224 */ 252 225 *p_tmevtn = *p_child; … … 254 227 255 228 /* 256 * p_tmevtn ãåãã¼ãã®ä½ç½®ã«æ´æ°ï¼229 * p_tmevtnを子ノードの位置に更新. 257 230 */ 258 231 p_tmevtn = p_child; … … 264 237 265 238 /* 266 * ã¿ã¤ã ã¤ãã³ããã¼ãã¸ã®è¿½å239 * タイムイベントヒープへの追加 267 240 * 268 * p_tmevtb ã§æå®ããã¿ã¤ã ã¤ãã³ããããã¯ãï¼ã¿ã¤ã ã¤ãã³ããã¼ãã«269 * 追å ããï¼241 * p_tmevtbで指定したタイムイベントブロックを,タイムイベントヒープに 242 * 追加する. 270 243 */ 271 244 Inline void … … 275 248 276 249 /* 277 * p_last_tmevtnãã¤ã³ã¯ãªã¡ã³ããï¼ããããä¸ã«æ¿å 278 ¥ä½ç½®ãæ¢ãï¼ 250 * p_last_tmevtnをインクリメントし,そこから上に挿入位置を探す. 279 251 */ 280 252 p_tmevtn = tmevt_up(++p_last_tmevtn, p_tmevtb->evttim); 281 253 282 254 /* 283 * ã¿ã¤ã ã¤ãã³ããp_tmevtnã®ä½ç½®ã«æ¿å 284 ¥ããï¼ 255 * タイムイベントをp_tmevtnの位置に挿入する. 285 256 */ 286 257 p_tmevtn->p_tmevtb = p_tmevtb; … … 289 260 290 261 /* 291 * ã¿ã¤ã ã¤ãã³ããã¼ãããã®åé¤262 * タイムイベントヒープからの削除 292 263 */ 293 264 Inline void … … 299 270 300 271 /* 301 * åé¤ã«ããã¿ã¤ã ã¤ãã³ããã¼ãã空ã«ãªãå ´åã¯ä½ãããªãï¼272 * 削除によりタイムイベントヒープが空になる場合は何もしない. 302 273 */ 303 274 if (--p_last_tmevtn < p_top_tmevtn) { … … 306 277 307 278 /* 308 * åé¤ãããã¼ãã®ä½ç½®ã«æå¾ã®ãã¼ãï¼p_last_tmevtn + 1 ã®ä½ç½®ã® 309 * ãã¼ãï¼ãæ¿å 310 ¥ãï¼ãããé©åãªä½ç½®ã¸ç§»åãããï¼å®éã«ã¯ï¼æå¾ 311 * ã®ãã¼ããå®éã«æ¿å 312 ¥ããã®ã§ã¯ãªãï¼åé¤ãããã¼ãã®ä½ç½®ã空ãã¼ 313 * ãã«ãªãã®ã§ï¼æå¾ã®ãã¼ããæ¿å 314 ¥ãã¹ãä½ç½®ã¸åãã¦ç©ºãã¼ãã移 315 * åãããï¼ 279 * 削除したノードの位置に最後のノード(p_last_tmevtn + 1 の位置の 280 * ノード)を挿入し,それを適切な位置へ移動させる.実際には,最後 281 * のノードを実際に挿入するのではなく,削除したノードの位置が空ノー 282 * ドになるので,最後のノードを挿入すべき位置へ向けて空ノードを移 283 * 動させる. 316 284 * 317 * æå¾ã®ãã¼ãã®ã¤ãã³ãçºçæå»ãï¼åé¤ãããã¼ãã®è¦ªãã¼ãã®ã¤ 318 * ãã³ãçºçæå»ããåã®å ´åã«ã¯ï¼ä¸ã«åãã£ã¦æ¿å 319 ¥ä½ç½®ãæ¢ãï¼ã 320 * ãã§ãªãå ´åã«ã¯ï¼ä¸ã«åãã£ã¦æ¢ãï¼ 285 * 最後のノードのイベント発生時刻が,削除したノードの親ノードのイ 286 * ベント発生時刻より前の場合には,上に向かって挿入位置を探す.そ 287 * うでない場合には,下に向かって探す. 321 288 */ 322 289 event_evttim = (p_last_tmevtn + 1)->p_tmevtb->evttim; … … 325 292 (p_parent = PARENT(p_tmevtn))->p_tmevtb->evttim)) { 326 293 /* 327 * 親ãã¼ããp_tmevtnã®ä½ç½®ã«ç§»åãããï¼294 * 親ノードをp_tmevtnの位置に移動させる. 328 295 */ 329 296 *p_tmevtn = *p_parent; … … 331 298 332 299 /* 333 * åé¤ãããã¼ãã®è¦ªãã¼ãããä¸ã«åãã£ã¦æ¿å 334 ¥ä½ç½®ãæ¢ãï¼ 300 * 削除したノードの親ノードから上に向かって挿入位置を探す. 335 301 */ 336 302 p_tmevtn = tmevt_up(p_parent, event_evttim); … … 338 304 else { 339 305 /* 340 * åé¤ãããã¼ãããä¸ã«åãã£ã¦æ¿å 341 ¥ä½ç½®ãæ¢ãï¼ 306 * 削除したノードから下に向かって挿入位置を探す. 342 307 */ 343 308 p_tmevtn = tmevt_down(p_tmevtn, event_evttim); … … 345 310 346 311 /* 347 * æå¾ã®ãã¼ããp_tmevtnã®ä½ç½®ã«æ¿å 348 ¥ããï¼ 312 * 最後のノードをp_tmevtnの位置に挿入する. 349 313 */ 350 314 *p_tmevtn = *(p_last_tmevtn + 1); … … 353 317 354 318 /* 355 * ã¿ã¤ã ã¤ãã³ããã¼ãã®å 356 é ã®ãã¼ãã®åé¤ 319 * タイムイベントヒープの先頭のノードの削除 357 320 */ 358 321 Inline TMEVTB * … … 364 327 365 328 /* 366 * åé¤ã«ããã¿ã¤ã ã¤ãã³ããã¼ãã空ã«ãªãå ´åã¯ä½ãããªãï¼329 * 削除によりタイムイベントヒープが空になる場合は何もしない. 367 330 */ 368 331 if (--p_last_tmevtn >= p_top_tmevtn) { 369 332 /* 370 * ã«ã¼ããã¼ãã«æå¾ã®ãã¼ãï¼p_last_tmevtn + 1 ã®ä½ç½®ã®ãã¼ 371 * ãï¼ãæ¿å 372 ¥ãï¼ãããé©åãªä½ç½®ã¸ç§»åãããï¼å®éã«ã¯ï¼æå¾ 373 * ã®ãã¼ããå®éã«æ¿å 374 ¥ããã®ã§ã¯ãªãï¼ã«ã¼ããã¼ãã空ãã¼ã 375 * ã«ãªãã®ã§ï¼æå¾ã®ãã¼ããæ¿å 376 ¥ãã¹ãä½ç½®ã¸åãã¦ç©ºãã¼ãã 377 * 移åãããï¼ 333 * ルートノードに最後のノード(p_last_tmevtn + 1 の位置のノー 334 * ド)を挿入し,それを適切な位置へ移動させる.実際には,最後 335 * のノードを実際に挿入するのではなく,ルートノードが空ノード 336 * になるので,最後のノードを挿入すべき位置へ向けて空ノードを 337 * 移動させる. 378 338 */ 379 339 event_evttim = (p_last_tmevtn + 1)->p_tmevtb->evttim; … … 381 341 382 342 /* 383 * æå¾ã®ãã¼ããp_tmevtnã®ä½ç½®ã«æ¿å 384 ¥ããï¼ 343 * 最後のノードをp_tmevtnの位置に挿入する. 385 344 */ 386 345 *p_tmevtn = *(p_last_tmevtn + 1); … … 391 350 392 351 /* 393 * ç¾å¨ã®ã¤ãã³ãæå»ã®æ´æ°352 * 現在のイベント時刻の更新 394 353 */ 395 354 #ifdef TOPPERS_tmecur … … 401 360 EVTTIM previous_evttim; 402 361 403 new_hrtcnt = target_hrt_get_current(); /* ï¼»ASPD1013ï¼½*/404 hrtcnt_advance = new_hrtcnt - current_hrtcnt; /* ï¼»ASPD1014ï¼½*/362 new_hrtcnt = target_hrt_get_current(); /*[ASPD1013]*/ 363 hrtcnt_advance = new_hrtcnt - current_hrtcnt; /*[ASPD1014]*/ 405 364 #ifdef TCYC_HRTCNT 406 365 if (new_hrtcnt < current_hrtcnt) { … … 410 369 411 370 previous_evttim = current_evttim; 412 current_evttim += (EVTTIM) hrtcnt_advance; /* ï¼»ASPD1015ï¼½*/413 current_hrtcnt = new_hrtcnt; /* ï¼»ASPD1016ï¼½*/414 boundary_evttim = current_evttim - BOUNDARY_MARGIN; /* ï¼»ASPD1011ï¼½*/371 current_evttim += (EVTTIM) hrtcnt_advance; /*[ASPD1015]*/ 372 current_hrtcnt = new_hrtcnt; /*[ASPD1016]*/ 373 boundary_evttim = current_evttim - BOUNDARY_MARGIN; /*[ASPD1011]*/ 415 374 416 375 if (monotonic_evttim - previous_evttim < (EVTTIM) hrtcnt_advance) { 417 376 #ifdef UINT64_MAX 418 377 if (current_evttim < monotonic_evttim) { 419 systim_offset += 1LLU << 32; /* ï¼»ASPD1045ï¼½*/378 systim_offset += 1LLU << 32; /*[ASPD1045]*/ 420 379 } 421 380 #endif /* UINT64_MAX */ 422 monotonic_evttim = current_evttim; /* ï¼»ASPD1042ï¼½*/381 monotonic_evttim = current_evttim; /*[ASPD1042]*/ 423 382 } 424 383 } … … 427 386 428 387 /* 429 * ç¾å¨ã®ã¤ãã³ãæå»ãé 430 ãæ¹ã«ä¸¸ããã¤ãã³ãæå»ã®ç®åºï¼»ASPD1027ï¼½ 388 * 現在のイベント時刻を遅い方に丸めたイベント時刻の算出[ASPD1027] 431 389 * 432 * ç¾å¨ã®ã¤ãã³ãæå»ãæ´æ°ããå¾ã«å¼ã¶ãã¨ãæ³å®ãã¦ããï¼390 * 現在のイベント時刻を更新した後に呼ぶことを想定している. 433 391 */ 434 392 Inline EVTTIM … … 439 397 440 398 /* 441 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ã®è¨å®399 * 高分解能タイマ割込みの発生タイミングの設定 442 400 */ 443 401 #ifdef TOPPERS_tmeset … … 449 407 450 408 if (p_last_tmevtn < p_top_tmevtn) { 451 target_hrt_set_event(HRTCNT_BOUND); /* ï¼»ASPD1007ï¼½*/409 target_hrt_set_event(HRTCNT_BOUND); /*[ASPD1007]*/ 452 410 } 453 411 else if (EVTTIM_LE(top_evttim, current_evttim)) { 454 target_hrt_raise_event(); /* ï¼»ASPD1017ï¼½*/412 target_hrt_raise_event(); /*[ASPD1017]*/ 455 413 } 456 414 else { 457 415 hrtcnt = (HRTCNT)(top_evttim - current_evttim); 458 416 if (hrtcnt > HRTCNT_BOUND) { 459 target_hrt_set_event(HRTCNT_BOUND); /* ï¼»ASPD1006ï¼½*/417 target_hrt_set_event(HRTCNT_BOUND); /*[ASPD1006]*/ 460 418 } 461 419 else { 462 target_hrt_set_event(hrtcnt); /* ï¼»ASPD1002ï¼½*/420 target_hrt_set_event(hrtcnt); /*[ASPD1002]*/ 463 421 } 464 422 } … … 468 426 469 427 /* 470 * ã¿ã¤ã ã¤ãã³ããããã¯ã®ãã¼ãã¸ã®æ¿å 471 ¥ 428 * タイムイベントブロックのヒープへの挿入 472 429 */ 473 430 #ifdef TOPPERS_tmereg … … 482 439 483 440 /* 484 * ç¸å¯¾æéæå®ã«ããã¿ã¤ã ã¤ãã³ãã®ç»é²441 * 相対時間指定によるタイムイベントの登録 485 442 * 486 443 */ … … 491 448 { 492 449 /* 493 * ç¾å¨ã®ã¤ãã³ãæå»ã¨ã¿ã¤ã ã¤ãã³ãã®çºçæå»ãæ±ããï¼»ASPD1026ï¼½ï¼450 * 現在のイベント時刻とタイムイベントの発生時刻を求める[ASPD1026]. 494 451 */ 495 452 update_current_evttim(); … … 497 454 498 455 /* 499 * ã¿ã¤ã ã¤ãã³ããããã¯ããã¼ãã«æ¿å 500 ¥ããï¼»ASPD1030ï¼½ï¼ 456 * タイムイベントブロックをヒープに挿入する[ASPD1030]. 501 457 */ 502 458 tmevtb_insert(p_tmevtb); 503 459 504 460 /* 505 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨å®ããï¼»ASPD1031ï¼½506 * ï¼»ASPD1034ï¼½ï¼461 * 高分解能タイマ割込みの発生タイミングを設定する[ASPD1031] 462 * [ASPD1034]. 507 463 */ 508 464 if (!in_signal_time && p_tmevtb->p_tmevtn == p_top_tmevtn) { … … 514 470 515 471 /* 516 * ã¿ã¤ã ã¤ãã³ãã®ç»é²è§£é¤472 * タイムイベントの登録解除 517 473 */ 518 474 #ifdef TOPPERS_tmedeq … … 524 480 525 481 /* 526 * ã¿ã¤ã ã¤ãã³ããããã¯ããã¼ãããåé¤ããï¼»ASPD1039ï¼½ï¼482 * タイムイベントブロックをヒープから削除する[ASPD1039]. 527 483 */ 528 484 p_tmevtn = p_tmevtb->p_tmevtn; … … 530 486 531 487 /* 532 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨å®ããï¼»ASPD1040ï¼½ï¼488 * 高分解能タイマ割込みの発生タイミングを設定する[ASPD1040]. 533 489 */ 534 490 if (!in_signal_time && p_tmevtn == p_top_tmevtn) { … … 541 497 542 498 /* 543 * ã·ã¹ãã æå»ã®èª¿æ´æã®ã¨ã©ã¼ãã§ãã¯499 * システム時刻の調整時のエラーチェック 544 500 */ 545 501 #ifdef TOPPERS_tmechk … … 549 505 { 550 506 if (adjtim > 0) { 551 return(p_last_tmevtn >= p_top_tmevtn /* ï¼»NGKI3588ï¼½*/507 return(p_last_tmevtn >= p_top_tmevtn /*[NGKI3588]*/ 552 508 && EVTTIM_LE(top_evttim, current_evttim - TMAX_ADJTIM)); 553 509 } 554 else if (adjtim < 0) { /* ï¼»NGKI3589ï¼½*/510 else if (adjtim < 0) { /*[NGKI3589]*/ 555 511 return(monotonic_evttim - current_evttim >= -TMIN_ADJTIM); 556 512 } … … 561 517 562 518 /* 563 * ã¿ã¤ã ã¤ãã³ããçºçããã¾ã§ã®æéã®è¨ç®519 * タイムイベントが発生するまでの時間の計算 564 520 */ 565 521 #ifdef TOPPERS_tmeltim … … 571 527 572 528 /* 573 * ç¾å¨ã®ã¤ãã³ãæå»ãé 574 ãæ¹ã«ä¸¸ããæå»ãæ±ããï¼»ASPD1050ï¼½ï¼ 529 * 現在のイベント時刻を遅い方に丸めた時刻を求める[ASPD1050]. 575 530 */ 576 531 update_current_evttim(); … … 578 533 579 534 /* 580 * ã¿ã¤ã ã¤ãã³ãçºçã¾ã§ã®ç¸å¯¾æéãæ±ããï¼»ASPD1049ï¼½ï¼535 * タイムイベント発生までの相対時間を求める[ASPD1049]. 581 536 */ 582 537 evttim = p_tmevtb->evttim; 583 538 if (EVTTIM_LE(evttim, current_evttim_ub)) { 584 539 /* 585 * ã¿ã¤ã ã¤ãã³ãã®çºçæå»ãéãã¦ããå ´åã«ã¯0ãè¿ãï¼»NGKI0552ï¼½ï¼540 * タイムイベントの発生時刻を過ぎている場合には0を返す[NGKI0552]. 586 541 */ 587 542 return(0U); … … 595 550 596 551 /* 597 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®å¦ç552 * 高分解能タイマ割込みの処理 598 553 */ 599 554 #ifdef TOPPERS_sigtim … … 609 564 610 565 lock_cpu(); 611 in_signal_time = true; /* ï¼»ASPD1033ï¼½*/566 in_signal_time = true; /*[ASPD1033]*/ 612 567 613 568 do { 614 569 /* 615 * ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããªããã°ã«ã¼ããæããï¼»ASPD1020ï¼½ï¼570 * コールバック関数を呼び出さなければループを抜ける[ASPD1020]. 616 571 */ 617 572 callflag = false; 618 573 619 574 /* 620 * ç¾å¨ã®ã¤ãã³ãæå»ãæ±ããï¼»ASPD1022ï¼½ï¼575 * 現在のイベント時刻を求める[ASPD1022]. 621 576 */ 622 577 update_current_evttim(); 623 578 624 579 /* 625 * çºçæå»ãcurrent_evttim以åã®ã¿ã¤ã ã¤ãã³ããããã°ï¼ã¿ã¤626 * ã ã¤ãã³ããã¼ãããåé¤ãï¼ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºã627 * ï¼»ASPD1018][ASPD1019ï¼½ï¼580 * 発生時刻がcurrent_evttim以前のタイムイベントがあれば,タイ 581 * ムイベントヒープから削除し,コールバック関数を呼び出す 582 * [ASPD1018][ASPD1019]. 628 583 */ 629 584 while (p_last_tmevtn >= p_top_tmevtn … … 633 588 callflag = true; 634 589 } 635 } while (callflag); /* ï¼»ASPD1020ï¼½*/636 637 /* 638 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ãè¨å®ããï¼»ASPD1025ï¼½ï¼590 } while (callflag); /*[ASPD1020]*/ 591 592 /* 593 * 高分解能タイマ割込みの発生タイミングを設定する[ASPD1025]. 639 594 */ 640 595 set_hrt_event(); 641 596 642 in_signal_time = false; /* ï¼»ASPD1033ï¼½*/597 in_signal_time = false; /*[ASPD1033]*/ 643 598 unlock_cpu(); 644 599 } -
asp3_gr_sakura/trunk/kernel/time_event.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã¿ã¤ã ã¤ãã³ã管çã¢ã¸ã¥ã¼ã«44 * タイムイベント管理モジュール 60 45 */ 61 46 … … 67 52 68 53 /* 69 * ã¤ãã³ãæå»ã®ãã¼ã¿åã®å®ç¾©ï¼»ASPD1001ï¼½70 * 71 * ã¿ã¤ã ã¤ãã³ããã¼ãã«ç»é²ããã¿ã¤ã ã¤ãã³ãã®çºçæå»ã表ç¾ããã72 * ãã®ãã¼ã¿åï¼ãªã¼ããããä½æ¸ã®ããã«ï¼32ãããã§æ±ãï¼54 * イベント時刻のデータ型の定義[ASPD1001] 55 * 56 * タイムイベントヒープに登録するタイムイベントの発生時刻を表現するた 57 * めのデータ型.オーバヘッド低減のために,32ビットで扱う. 73 58 */ 74 59 typedef uint32_t EVTTIM; 75 60 76 61 /* 77 * ã¿ã¤ã ã¤ãã³ããã¼ãä¸ã®ãã¼ãã®ãã¼ã¿åã®åæ¹åç 78 § 62 * タイムイベントヒープ中のノードのデータ型の前方参照 79 63 */ 80 64 typedef union time_event_node TMEVTN; 81 65 82 66 /* 83 * ã¿ã¤ã ã¤ãã³ããããã¯ã®ãã¼ã¿åã®å®ç¾©84 */ 85 typedef void (*CBACK)(void *); /* ã³ã¼ã«ããã¯é¢æ°ã®å*/67 * タイムイベントブロックのデータ型の定義 68 */ 69 typedef void (*CBACK)(void *); /* コールバック関数の型 */ 86 70 87 71 typedef struct time_event_block { 88 EVTTIM evttim; /* ã¿ã¤ã ã¤ãã³ãã®çºçæå»*/89 TMEVTN *p_tmevtn; /* ã¿ã¤ã ã¤ãã³ããã¼ãä¸ã§ã®ä½ç½®*/90 CBACK callback; /* ã³ã¼ã«ããã¯é¢æ°*/91 void *arg; /* ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ°*/72 EVTTIM evttim; /* タイムイベントの発生時刻 */ 73 TMEVTN *p_tmevtn; /* タイムイベントヒープ中での位置 */ 74 CBACK callback; /* コールバック関数 */ 75 void *arg; /* コールバック関数へ渡す引数 */ 92 76 } TMEVTB; 93 77 94 78 /* 95 * ã¿ã¤ã ã¤ãã³ããã¼ãä¸ã®ãã¼ãã®ãã¼ã¿åã®å®ç¾© 96 * 97 * ã¿ã¤ã ã¤ãã³ããã¼ãã®å 98 é ã®ãã¼ãï¼tmevt_heap[0]ï¼ã«ï¼æå¾ã®ä½¿ç¨é 99 * åãæããã¤ã³ã¿ï¼p_lastï¼ãæ ¼ç´ãï¼ãã以éãã¿ã¤ã ã¤ãã³ããã¼ã 100 * ã¨ãã¦ä½¿ç¨ããï¼(tmevt_heap[0].p_last - tmevt_heap) ãï¼ã¿ã¤ã ã¤ã 101 * ã³ããã¼ãã«ç»é²ããã¦ããã¿ã¤ã ã¤ãã³ãã®æ°ã¨ãªãï¼ 79 * タイムイベントヒープ中のノードのデータ型の定義 80 * 81 * タイムイベントヒープの先頭のノード(tmevt_heap[0])に,最後の使用領 82 * 域を指すポインタ(p_last)を格納し,それ以降をタイムイベントヒープ 83 * として使用する.(tmevt_heap[0].p_last - tmevt_heap) が,タイムイベ 84 * ントヒープに登録されているタイムイベントの数となる. 102 85 */ 103 86 union time_event_node { 104 TMEVTB *p_tmevtb; /* 対å¿ããã¿ã¤ã ã¤ãã³ããããã¯*/105 TMEVTN *p_last; /* ã¿ã¤ã ã¤ãã³ããã¼ãã®æå¾ã®ä½¿ç¨é å*/87 TMEVTB *p_tmevtb; /* 対応するタイムイベントブロック */ 88 TMEVTN *p_last; /* タイムイベントヒープの最後の使用領域 */ 106 89 }; 107 90 108 91 /* 109 * ã¿ã¤ã ã¤ãã³ããã¼ãï¼kernel_cfg.cï¼92 * タイムイベントヒープ(kernel_cfg.c) 110 93 */ 111 94 extern TMEVTN tmevt_heap[]; 112 95 113 96 /* 114 * å¢çã¤ãã³ãæå»ï¼»ASPD1008ï¼½97 * 境界イベント時刻[ASPD1008] 115 98 */ 116 99 extern EVTTIM boundary_evttim; 117 100 118 101 /* 119 * ç¾å¨ã®ã¤ãã³ãæå»ã¨å¢çã¤ãã³ãæå»ã®å·®ï¼»ASPD1010ï¼½102 * 現在のイベント時刻と境界イベント時刻の差[ASPD1010] 120 103 */ 121 104 #define BOUNDARY_MARGIN (200000000U) 122 105 123 106 /* 124 * æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®ã¤ãã³ãæå»ï¼»ASPD1012ï¼½107 * 最後に現在時刻を算出した時点でのイベント時刻[ASPD1012] 125 108 */ 126 109 extern EVTTIM current_evttim; 127 110 128 111 /* 129 * æå¾ã«ç¾å¨æå»ãç®åºããæç¹ã§ã®é«å解è½ã¿ã¤ãã®ã«ã¦ã³ãå¤ï¼»ASPD1012ï¼½112 * 最後に現在時刻を算出した時点での高分解能タイマのカウント値[ASPD1012] 130 113 */ 131 114 extern HRTCNT current_hrtcnt; 132 115 133 116 /* 134 * æãé²ãã§ããæã®ã¤ãã³ãæå»ï¼»ASPD1041ï¼½117 * 最も進んでいた時のイベント時刻[ASPD1041] 135 118 */ 136 119 extern EVTTIM monotonic_evttim; 137 120 138 121 /* 139 * ã·ã¹ãã æå»ã®ãªãã»ããï¼»ASPD1043ï¼½ 140 * 141 * get_timã§åç 142 §ããã·ã¹ãã æå»ã¨monotonic_evttimã®å·®ãä¿æããï¼ 122 * システム時刻のオフセット[ASPD1043] 123 * 124 * get_timで参照するシステム時刻とmonotonic_evttimの差を保持する. 143 125 */ 144 126 extern SYSTIM systim_offset; 145 127 146 128 /* 147 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®å¦çä¸ã§ãããã¨ã示ããã©ã°ï¼»ASPD1032ï¼½129 * 高分解能タイマ割込みの処理中であることを示すフラグ[ASPD1032] 148 130 */ 149 131 extern bool_t in_signal_time; 150 132 151 133 /* 152 * ã¿ã¤ã ã¤ãã³ã管çã¢ã¸ã¥ã¼ã«ã®åæå134 * タイムイベント管理モジュールの初期化 153 135 */ 154 136 extern void initialize_tmevt(void); 155 137 156 138 /* 157 * ã¿ã¤ã ã¤ãã³ãã®æ¿å 158 ¥ä½ç½®ã®æ¢ç´¢ 139 * タイムイベントの挿入位置の探索 159 140 */ 160 141 extern TMEVTN *tmevt_up(TMEVTN *p_tmevtn, EVTTIM evttim); … … 162 143 163 144 /* 164 * ç¾å¨ã®ã¤ãã³ãæå»ã®æ´æ°165 * 166 * current_evttim ã¨current_hrtcntãï¼ç¾å¨ã®å¤ã«æ´æ°ããï¼145 * 現在のイベント時刻の更新 146 * 147 * current_evttimとcurrent_hrtcntを,現在の値に更新する. 167 148 */ 168 149 extern void update_current_evttim(void); 169 150 170 151 /* 171 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®çºçã¿ã¤ãã³ã°ã®è¨å®172 * 173 * ç¾å¨ã®ã¤ãã³ãæå»ãåå¾ããå¾ã«å¼ã³åºããã¨ãæ³å®ãã¦ããï¼152 * 高分解能タイマ割込みの発生タイミングの設定 153 * 154 * 現在のイベント時刻を取得した後に呼び出すことを想定している. 174 155 */ 175 156 extern void set_hrt_event(void); 176 157 177 158 /* 178 * ã¿ã¤ã ã¤ãã³ãã®ç»é²179 * 180 * p_tmevtb ã§æå®ããã¿ã¤ã ã¤ãã³ããããã¯ãç»é²ããï¼ã¿ã¤ã ã¤ãã³ã181 * ã®çºçæå»ï¼ã³ã¼ã«ããã¯é¢æ°ï¼ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ°ã¯ï¼182 * p_tmevtb ãæãã¿ã¤ã ã¤ãã³ããããã¯ä¸ã«è¨å®ãã¦ããï¼159 * タイムイベントの登録 160 * 161 * p_tmevtbで指定したタイムイベントブロックを登録する.タイムイベント 162 * の発生時刻,コールバック関数,コールバック関数へ渡す引数は, 163 * p_tmevtbが指すタイムイベントブロック中に設定しておく. 183 164 */ 184 165 extern void tmevtb_register(TMEVTB *p_tmevtb); 185 166 186 167 /* 187 * ç¸å¯¾æéæå®ã«ããã¿ã¤ã ã¤ãã³ãã®ç»é²188 * 189 * time ã§æå®ããç¸å¯¾æéãçµéããå¾ã«ã³ã¼ã«ããã¯é¢æ°ãå¼ã³åºããã190 * ããã«ï¼p_tmevtbã§æå®ããã¿ã¤ã ã¤ãã³ããããã¯ãç»é²ããï¼ã³ã¼ã«191 * ããã¯é¢æ°ï¼ã³ã¼ã«ããã¯é¢æ°ã¸æ¸¡ãå¼æ°ã¯ï¼p_tmevtbãæãã¿ã¤ã ã¤ã192 * ã³ããããã¯ä¸ã«è¨å®ãã¦ããï¼168 * 相対時間指定によるタイムイベントの登録 169 * 170 * timeで指定した相対時間が経過した後にコールバック関数が呼び出される 171 * ように,p_tmevtbで指定したタイムイベントブロックを登録する.コール 172 * バック関数,コールバック関数へ渡す引数は,p_tmevtbが指すタイムイベ 173 * ントブロック中に設定しておく. 193 174 */ 194 175 extern void tmevtb_enqueue(TMEVTB *p_tmevtb, RELTIM time); 195 176 196 177 /* 197 * ã¿ã¤ã ã¤ãã³ãã®ç»é²è§£é¤178 * タイムイベントの登録解除 198 179 */ 199 180 extern void tmevtb_dequeue(TMEVTB *p_tmevtb); 200 181 201 182 /* 202 * ã·ã¹ãã æå»ã®èª¿æ´æã®ã¨ã©ã¼ãã§ãã¯203 * 204 * adjtim ã§æå®ãããæéã®åï¼ã·ã¹ãã æå»ã調æ´ãã¦ãããå¤å®ããï¼205 * 調æ´ãã¦ã¯ãªããªãå ´åã«trueï¼ããã§ãªãå ´åã«falseãè¿ãï¼ç¾å¨ã®ã¤206 * ãã³ãæå»ãåå¾ããå¾ã«å¼ã³åºããã¨ãæ³å®ãã¦ããï¼183 * システム時刻の調整時のエラーチェック 184 * 185 * adjtimで指定された時間の分,システム時刻を調整してよいか判定する. 186 * 調整してはならない場合にtrue,そうでない場合にfalseを返す.現在のイ 187 * ベント時刻を取得した後に呼び出すことを想定している. 207 188 */ 208 189 extern bool_t check_adjtim(int_t adjtim); 209 190 210 191 /* 211 * ã¿ã¤ã ã¤ãã³ããçºçããã¾ã§ã®æéã®è¨ç®192 * タイムイベントが発生するまでの時間の計算 212 193 */ 213 194 extern RELTIM tmevt_lefttim(TMEVTB *p_tmevtb); 214 195 215 196 /* 216 * é«å解è½ã¿ã¤ãå²è¾¼ã¿ã®å¦ç197 * 高分解能タイマ割込みの処理 217 198 */ 218 199 extern void signal_time(void); -
asp3_gr_sakura/trunk/kernel/time_manage.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * ã·ã¹ãã æå»ç®¡çæ©è½44 * システム時刻管理機能 60 45 */ 61 46 … … 70 55 71 56 /* 72 * ãã¬ã¼ã¹ãã°ãã¯ãã®ããã©ã«ãå®ç¾©57 * トレースログマクロのデフォルト定義 73 58 */ 74 59 #ifndef LOG_SET_TIM_ENTER … … 105 90 106 91 /* 107 * ã·ã¹ãã æå»ã®è¨å®ï¼»NGKI3563ï¼½92 * システム時刻の設定[NGKI3563] 108 93 */ 109 94 #ifdef TOPPERS_set_tim … … 115 100 116 101 LOG_SET_TIM_ENTER(systim); 117 CHECK_TSKCTX_UNL(); /* ï¼»NGKI3564][NGKI3565ï¼½*/102 CHECK_TSKCTX_UNL(); /*[NGKI3564][NGKI3565]*/ 118 103 119 104 lock_cpu(); 120 update_current_evttim(); /* ï¼»ASPD1059ï¼½*/121 systim_offset = systim - monotonic_evttim; /* ï¼»ASPD1060ï¼½*/105 update_current_evttim(); /*[ASPD1059]*/ 106 systim_offset = systim - monotonic_evttim; /*[ASPD1060]*/ 122 107 ercd = E_OK; 123 108 unlock_cpu(); … … 131 116 132 117 /* 133 * ã·ã¹ãã æå»ã®åç 134 §ï¼»NGKI2349ï¼½ 118 * システム時刻の参照[NGKI2349] 135 119 */ 136 120 #ifdef TOPPERS_get_tim … … 142 126 143 127 LOG_GET_TIM_ENTER(p_systim); 144 CHECK_TSKCTX_UNL(); /* ï¼»NGKI2350][NGKI2351ï¼½*/128 CHECK_TSKCTX_UNL(); /*[NGKI2350][NGKI2351]*/ 145 129 146 130 lock_cpu(); 147 update_current_evttim(); /* ï¼»ASPD1057ï¼½*/148 *p_systim = systim_offset + monotonic_evttim; /* ï¼»ASPD1058ï¼½*/131 update_current_evttim(); /*[ASPD1057]*/ 132 *p_systim = systim_offset + monotonic_evttim; /*[ASPD1058]*/ 149 133 ercd = E_OK; 150 134 unlock_cpu(); … … 158 142 159 143 /* 160 * ã·ã¹ãã æå»ã®èª¿æ´ï¼»NGKI3581ï¼½144 * システム時刻の調整[NGKI3581] 161 145 */ 162 146 #ifdef TOPPERS_adj_tim … … 169 153 170 154 LOG_ADJ_TIM_ENTER(adjtim); 171 CHECK_UNL(); /* ï¼»NGKI3583ï¼½*/155 CHECK_UNL(); /*[NGKI3583]*/ 172 156 CHECK_PAR(TMIN_ADJTIM <= adjtim && adjtim <= TMAX_ADJTIM); 173 /* ï¼»NGKI3584ï¼½*/157 /*[NGKI3584]*/ 174 158 lock_cpu(); 175 update_current_evttim(); /* ï¼»ASPD1051ï¼½*/176 if (check_adjtim(adjtim)) { /* ï¼»ASPD1052ï¼½*/159 update_current_evttim(); /*[ASPD1051]*/ 160 if (check_adjtim(adjtim)) { /*[ASPD1052]*/ 177 161 ercd = E_OBJ; 178 162 } 179 163 else { 180 164 previous_evttim = current_evttim; 181 current_evttim += adjtim; /* ï¼»ASPD1053ï¼½*/182 boundary_evttim = current_evttim - BOUNDARY_MARGIN; /* ï¼»ASPD1055ï¼½*/165 current_evttim += adjtim; /*[ASPD1053]*/ 166 boundary_evttim = current_evttim - BOUNDARY_MARGIN; /*[ASPD1055]*/ 183 167 184 168 if (adjtim > 0 … … 189 173 } 190 174 #endif /* UINT64_MAX */ 191 monotonic_evttim = current_evttim; /* ï¼»ASPD1054ï¼½*/175 monotonic_evttim = current_evttim; /*[ASPD1054]*/ 192 176 } 193 177 194 set_hrt_event(); /* ï¼»ASPD1056ï¼½*/178 set_hrt_event(); /*[ASPD1056]*/ 195 179 ercd = E_OK; 196 180 } … … 205 189 206 190 /* 207 * é«å解è½ã¿ã¤ãã®åç 208 §ï¼»NGKI3569ï¼½ 191 * 高分解能タイマの参照[NGKI3569] 209 192 * 210 * ä»»æã®ç¶æ 211 ããå¼ã³åºããããã«ããããã«ï¼SILã®å 212 ¨å²è¾¼ã¿ããã¯ç¶æ 213 ã® 214 * å¶å¾¡æ©è½ãç¨ãã¦ï¼æä»å¶å¾¡ãå®ç¾ãã¦ããï¼»NGKI3572ï¼½ï¼ 193 * 任意の状態から呼び出せるようにするために,SILの全割込みロック状態の 194 * 制御機能を用いて,排他制御を実現している[NGKI3572]. 215 195 */ 216 196 #ifdef TOPPERS_fch_hrt … … 225 205 226 206 SIL_LOC_INT(); 227 hrtcnt = target_hrt_get_current(); /* ï¼»NGKI3571ï¼½*/207 hrtcnt = target_hrt_get_current(); /*[NGKI3571]*/ 228 208 SIL_UNL_INT(); 229 209 … … 235 215 236 216 /* 237 * éç¥æ¹æ³ã®ã¨ã©ã¼ãã§ãã¯217 * 通知方法のエラーチェック 238 218 */ 239 219 #ifdef TOPPERS_chknfy … … 319 299 320 300 /* 321 * éç¥ãã³ãã©301 * 通知ハンドラ 322 302 */ 323 303 #ifdef TOPPERS_nfyhdr -
asp3_gr_sakura/trunk/kernel/wait.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 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 * 免責すること. 47 33 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å¾ 60 ã¡ç¶æ 61 管çã¢ã¸ã¥ã¼ã« 44 * 待ち状態管理モジュール 62 45 */ 63 46 … … 66 49 67 50 /* 68 * å¾ 69 ã¡ç¶æ 70 ã¸ã®é·ç§»ï¼ã¿ã¤ã ã¢ã¦ãæå®ï¼ 51 * 待ち状態への遷移(タイムアウト指定) 71 52 */ 72 53 #ifdef TOPPERS_waimake … … 92 73 93 74 /* 94 * å¾ 95 ã¡è§£é¤ 75 * 待ち解除 96 76 */ 97 77 #ifdef TOPPERS_waicmp … … 108 88 109 89 /* 110 * ã¿ã¤ã ã¢ã¦ãã«ä¼´ãå¾ 111 ã¡è§£é¤ 90 * タイムアウトに伴う待ち解除 112 91 */ 113 92 #ifdef TOPPERS_waitmo … … 124 103 125 104 /* 126 * ããã§åªå 127 度ã®é«ãå²è¾¼ã¿ãåãä»ããï¼ 105 * ここで優先度の高い割込みを受け付ける. 128 106 */ 129 107 unlock_cpu(); … … 145 123 146 124 /* 147 * ããã§åªå 148 度ã®é«ãå²è¾¼ã¿ãåãä»ããï¼ 125 * ここで優先度の高い割込みを受け付ける. 149 126 */ 150 127 unlock_cpu(); … … 156 133 157 134 /* 158 * å®è¡ä¸ã®ã¿ã¹ã¯ã®åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 159 ã¡ãã¥ã¼ã¸ã®æ¿å 160 ¥ 135 * 実行中のタスクの同期・通信オブジェクトの待ちキューへの挿入 161 136 * 162 * å®è¡ä¸ã®ã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 163 ã¡ãã¥ã¼ã¸æ¿å 164 ¥ããï¼ãª 165 * ãã¸ã§ã¯ãã®å±æ§ã«å¿ãã¦ï¼FIFOé ã¾ãã¯ã¿ã¹ã¯åªå 166 度é ã§æ¿å 167 ¥ããï¼ 137 * 実行中のタスクを,同期・通信オブジェクトの待ちキューへ挿入する.オ 138 * ブジェクトの属性に応じて,FIFO順またはタスク優先度順で挿入する. 168 139 */ 169 140 Inline void … … 179 150 180 151 /* 181 * åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 182 ã¡ç¶æ 183 ã¸ã®é·ç§» 152 * 同期・通信オブジェクトに対する待ち状態への遷移 184 153 */ 185 154 #ifdef TOPPERS_wobjwai … … 210 179 211 180 /* 212 * å¾ 213 ã¡ãã¥ã¼ã®åæå 181 * 待ちキューの初期化 214 182 */ 215 183 #ifdef TOPPERS_iniwque -
asp3_gr_sakura/trunk/kernel/wait.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=UTF-8
r317 r318 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ä¸è¨èä½æ¨©è 12 ã¯ï¼ä»¥ä¸ã®(1)ï½(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 13 * ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 14 * å¤ã»åé 15 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 16 * (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 17 * 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 18 * ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 19 * (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 20 * ç¨ã§ããå½¢ã§åé 21 å¸ããå ´åã«ã¯ï¼åé 22 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 23 * è 24 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 25 * ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 26 * (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 27 * ç¨ã§ããªãå½¢ã§åé 28 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 29 * ã¨ï¼ 30 * (a) åé 31 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 32 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 33 * ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 34 * (b) åé 35 å¸ã®å½¢æ 36 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 37 * å ±åãããã¨ï¼ 38 * (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 39 * 害ãããï¼ä¸è¨èä½æ¨©è 40 ããã³TOPPERSããã¸ã§ã¯ããå 41 責ãããã¨ï¼ 42 * ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 43 * ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 44 ããã³TOPPERSããã¸ã§ã¯ãã 45 * å 46 責ãããã¨ï¼ 47 * 48 * æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 49 ã 50 * ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 51 * ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 52 * ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 53 * ã®è²¬ä»»ãè² ããªãï¼ 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 * の責任を負わない. 54 39 * 55 40 * $Id$ … … 57 42 58 43 /* 59 * å¾ 60 ã¡ç¶æ 61 管çã¢ã¸ã¥ã¼ã« 44 * 待ち状態管理モジュール 62 45 */ 63 46 … … 71 54 72 55 /* 73 * ã¿ã¹ã¯ã®åªå 74 度é ã®å¾ 75 ã¡ãã¥ã¼ã¸ã®æ¿å 76 ¥ 77 * 78 * p_tcbã§æå®ãããã¿ã¹ã¯ãï¼ã¿ã¹ã¯åªå 79 度é ã®ãã¥ã¼p_queueã«æ¿å 80 ¥ããï¼ 81 * ãã¥ã¼ã®ä¸ã«åãåªå 82 度ã®ã¿ã¹ã¯ãããå ´åã«ã¯ï¼ãã®æå¾ã«æ¿å 83 ¥ããï¼ 56 * タスクの優先度順の待ちキューへの挿入 57 * 58 * p_tcbで指定されるタスクを,タスク優先度順のキューp_queueに挿入する. 59 * キューの中に同じ優先度のタスクがある場合には,その最後に挿入する. 84 60 */ 85 61 Inline void … … 99 75 100 76 /* 101 * å¾ 102 ã¡ç¶æ 103 ã¸ã®é·ç§» 104 * 105 * å®è¡ä¸ã®ã¿ã¹ã¯ãå¾ 106 ã¡ç¶æ 107 ã«é·ç§»ãããï¼å 108 ·ä½çã«ã¯ï¼å®è¡ä¸ã®ã¿ã¹ã¯ã 109 * ã¬ãã£ãã¥ã¼ããåé¤ãï¼TCBã®p_winfoãã£ã¼ã«ãï¼WINFOã®p_tmevtbãã£ã¼ 110 * ã«ããè¨å®ããï¼ 77 * 待ち状態への遷移 78 * 79 * 実行中のタスクを待ち状態に遷移させる.具体的には,実行中のタスクを 80 * レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー 81 * ルドを設定する. 111 82 */ 112 83 Inline void … … 119 90 120 91 /* 121 * å¾ 122 ã¡ç¶æ 123 ã¸ã®é·ç§»ï¼ã¿ã¤ã ã¢ã¦ãæå®ï¼ 124 * 125 * å®è¡ä¸ã®ã¿ã¹ã¯ãï¼ã¿ã¤ã ã¢ã¦ãæå®ä»ãã§å¾ 126 ã¡ç¶æ 127 ã«é·ç§»ãããï¼å 128 ·ä½ 129 * çã«ã¯ï¼å®è¡ä¸ã®ã¿ã¹ã¯ãã¬ãã£ãã¥ã¼ããåé¤ãï¼TCBã®p_winfoãã£ã¼ 130 * ã«ãï¼WINFOã®p_tmevtbãã£ã¼ã«ããè¨å®ããï¼ã¾ãï¼ã¿ã¤ã ã¤ãã³ãã 131 * ããã¯ãç»é²ããï¼ 92 * 待ち状態への遷移(タイムアウト指定) 93 * 94 * 実行中のタスクを,タイムアウト指定付きで待ち状態に遷移させる.具体 95 * 的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー 96 * ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ 97 * ロックを登録する. 132 98 */ 133 99 extern void make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout); 134 100 135 101 /* 136 * å¾ 137 ã¡è§£é¤ã®ããã®ã¿ã¹ã¯ç¶æ 138 ã®æ´æ° 139 * 140 * p_tcbã§æå®ãããã¿ã¹ã¯ãï¼å¾ 141 ã¡è§£é¤ããããã¿ã¹ã¯ç¶æ 142 ãæ´æ°ããï¼ 143 * å¾ 144 ã¡è§£é¤ããã¿ã¹ã¯ãå®è¡ã§ããç¶æ 145 ã«ãªãå ´åã¯ï¼ã¬ãã£ãã¥ã¼ã«ã¤ãª 146 * ãï¼ 102 * 待ち解除のためのタスク状態の更新 103 * 104 * p_tcbで指定されるタスクを,待ち解除するようタスク状態を更新する. 105 * 待ち解除するタスクが実行できる状態になる場合は,レディキューにつな 106 * ぐ. 147 107 */ 148 108 Inline void … … 153 113 if (!TSTAT_SUSPENDED(p_tcb->tstat)) { 154 114 /* 155 * å¾ 156 ã¡ç¶æ 157 ããå®è¡ã§ããç¶æ 158 ã¸ã®é·ç§» 115 * 待ち状態から実行できる状態への遷移 159 116 */ 160 117 p_tcb->tstat = TS_RUNNABLE; … … 164 121 else { 165 122 /* 166 * äºéå¾ 167 ã¡ç¶æ 168 ããå¼·å¶å¾ 169 ã¡ç¶æ 170 ã¸ã®é·ç§» 123 * 二重待ち状態から強制待ち状態への遷移 171 124 */ 172 125 p_tcb->tstat = TS_SUSPENDED; … … 176 129 177 130 /* 178 * ãªãã¸ã§ã¯ãå¾ 179 ã¡ãã¥ã¼ããã®åé¤ 180 * 181 * p_tcbã§æå®ãããã¿ã¹ã¯ãï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 182 ã¡ãã¥ã¼ã«ã¤ 183 * ãªããã¦ããã°ï¼å¾ 184 ã¡ãã¥ã¼ããåé¤ããï¼ 131 * オブジェクト待ちキューからの削除 132 * 133 * p_tcbで指定されるタスクが,同期・通信オブジェクトの待ちキューにつ 134 * ながれていれば,待ちキューから削除する. 185 135 */ 186 136 Inline void … … 193 143 194 144 /* 195 * æéå¾ 196 ã¡ã®ããã®ã¿ã¤ã ã¤ãã³ããããã¯ã®ç»é²è§£é¤ 197 * 198 * p_tcbã§æå®ãããã¿ã¹ã¯ã«å¯¾ãã¦ï¼æéå¾ 199 ã¡ã®ããã®ã¿ã¤ã ã¤ãã³ãã 200 * ããã¯ãç»é²ããã¦ããã°ï¼ãããç»é²è§£é¤ããï¼ 145 * 時間待ちのためのタイムイベントブロックの登録解除 146 * 147 * p_tcbで指定されるタスクに対して,時間待ちのためのタイムイベントブ 148 * ロックが登録されていれば,それを登録解除する. 201 149 */ 202 150 Inline void … … 209 157 210 158 /* 211 * å¾ 212 ã¡è§£é¤ 213 * 214 * p_tcbã§æå®ãããã¿ã¹ã¯ã®å¾ 215 ã¡ç¶æ 216 ã解é¤ããï¼å 217 ·ä½çã«ã¯ï¼ã¿ã¤ã 㤠218 * ãã³ããããã¯ãç»é²ããã¦ããã°ï¼ãããç»é²è§£é¤ããï¼ã¾ãï¼ã¿ã¹ã¯ 219 * ç¶æ 220 ãæ´æ°ãï¼å¾ 221 ã¡è§£é¤ããã¿ã¹ã¯ããã®è¿å¤ãE_OKã¨ããï¼å¾ 222 ã¡ãã¥ã¼ 223 * ããã®åé¤ã¯è¡ããªãï¼ 159 * 待ち解除 160 * 161 * p_tcbで指定されるタスクの待ち状態を解除する.具体的には,タイムイ 162 * ベントブロックが登録されていれば,それを登録解除する.また,タスク 163 * 状態を更新し,待ち解除したタスクからの返値をE_OKとする.待ちキュー 164 * からの削除は行わない. 224 165 */ 225 166 extern void wait_complete(TCB *p_tcb); 226 167 227 168 /* 228 * ã¿ã¤ã ã¢ã¦ãã«ä¼´ãå¾ 229 ã¡è§£é¤ 230 * 231 * p_tcbã§æå®ãããã¿ã¹ã¯ãï¼å¾ 232 ã¡ãã¥ã¼ã«ã¤ãªããã¦ããã°å¾ 233 ã¡ãã¥ã¼ 234 * ããåé¤ãï¼ã¿ã¹ã¯ç¶æ 235 ãæ´æ°ããï¼ã¾ãï¼å¾ 236 ã¡è§£é¤ããã¿ã¹ã¯ããã®è¿ 237 * å¤ãï¼wait_tmoutã§ã¯E_TMOUTï¼wait_tmout_okã§ã¯E_OKã¨ããï¼ 238 * 239 * wait_tmout_okã¯ï¼dly_tskã§ä½¿ãããã®ãã®ã§ï¼å¾ 240 ã¡ãã¥ã¼ããåé¤ãã 241 * å¦çãè¡ããªãï¼ 242 * 243 * ãããã®é¢æ°ãï¼ã¿ã¤ã ã¤ãã³ãã®ã³ã¼ã«ããã¯é¢æ°ã¨ãã¦ç¨ããããã® 244 * ãã®ã§ï¼å²è¾¼ã¿ãã³ãã©ããå¼ã³åºããããã¨ãæ³å®ãã¦ããï¼ 169 * タイムアウトに伴う待ち解除 170 * 171 * p_tcbで指定されるタスクが,待ちキューにつながれていれば待ちキュー 172 * から削除し,タスク状態を更新する.また,待ち解除したタスクからの返 173 * 値を,wait_tmoutではE_TMOUT,wait_tmout_okではE_OKとする. 174 * 175 * wait_tmout_okは,dly_tskで使うためのもので,待ちキューから削除する 176 * 処理を行わない. 177 * 178 * いずれの関数も,タイムイベントのコールバック関数として用いるための 179 * もので,割込みハンドラから呼び出されることを想定している. 245 180 */ 246 181 extern void wait_tmout(TCB *p_tcb); … … 248 183 249 184 /* 250 * å¾ 251 ã¡ãã¥ã¼ã®å 252 é ã®ã¿ã¹ã¯ID 253 * 254 * p_wait_queueã§æå®ããå¾ 255 ã¡ãã¥ã¼ã®å 256 é ã®ã¿ã¹ã¯IDãè¿ãï¼å¾ 257 ã¡ãã¥ã¼ 258 * ã空ã®å ´åã«ã¯ï¼TSK_NONEãè¿ãï¼ 185 * 待ちキューの先頭のタスクID 186 * 187 * p_wait_queueで指定した待ちキューの先頭のタスクIDを返す.待ちキュー 188 * が空の場合には,TSK_NONEを返す. 259 189 */ 260 190 Inline ID … … 270 200 271 201 /* 272 * åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 273 ±éé¨åæä½ã«ã¼ãã³ 274 * 275 * åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã¨ç®¡çãããã¯ã®å 276 é é¨åã¯å 277 ± 278 * éã«ãªã£ã¦ããï¼ä»¥ä¸ã¯ï¼ãã®å 279 ±éé¨åãæ±ãããã®åããã³ã«ã¼ãã³ç¾¤ 280 * ã§ããï¼ 281 * 282 * è¤æ°ã®å¾ 283 ã¡ãã¥ã¼ãæã¤åæã»éä¿¡ãªãã¸ã§ã¯ãã®å ´åï¼å 284 é 以å¤ã®å¾ 285 ã¡ 286 * ãã¥ã¼ãæä½ããå ´åã«ã¯ï¼ãããã®ã«ã¼ãã³ã¯ä½¿ããªãï¼ã¾ãï¼ãªãã¸ã§ 287 * ã¯ãå±æ§ã®TA_TPRIããããåç 288 §ããã®ã§ï¼ãã®ããããä»ã®ç®çã«ä½¿ã£ã¦ 289 * ããå ´åãï¼ãããã®ã«ã¼ãã³ã¯ä½¿ããªãï¼ 290 */ 291 292 /* 293 * åæã»éä¿¡ãªãã¸ã§ã¯ãã®åæåãããã¯ã®å 294 ±éé¨å 202 * 同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン 203 * 204 * 同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共 205 * 通になっている.以下は,その共通部分を扱うための型およびルーチン群 206 * である. 207 * 208 * 複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち 209 * キューを操作する場合には,これらのルーチンは使えない.また,オブジェ 210 * クト属性のTA_TPRIビットを参照するので,このビットを他の目的に使って 211 * いる場合も,これらのルーチンは使えない. 212 */ 213 214 /* 215 * 同期・通信オブジェクトの初期化ブロックの共通部分 295 216 */ 296 217 typedef struct wait_object_initialization_block { 297 ATR wobjatr; /* ãªãã¸ã§ã¯ãå±æ§*/218 ATR wobjatr; /* オブジェクト属性 */ 298 219 } WOBJINIB; 299 220 300 221 /* 301 * åæã»éä¿¡ãªãã¸ã§ã¯ãã®ç®¡çãããã¯ã®å 302 ±éé¨å 222 * 同期・通信オブジェクトの管理ブロックの共通部分 303 223 */ 304 224 typedef struct wait_object_control_block { 305 QUEUE wait_queue; /* å¾ 306 ã¡ãã¥ã¼ */ 307 const WOBJINIB *p_wobjinib; /* åæåãããã¯ã¸ã®ãã¤ã³ã¿ */ 225 QUEUE wait_queue; /* 待ちキュー */ 226 const WOBJINIB *p_wobjinib; /* 初期化ブロックへのポインタ */ 308 227 } WOBJCB; 309 228 310 229 /* 311 * åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 312 ã¡æ 313 å ±ãããã¯ã®å 314 ±éé¨å 315 * 316 * ãã®æ§é ä½ã¯ï¼å¾ 317 ã¡æ 318 å ±ãããã¯ï¼WINFOï¼ãæ¡å¼µï¼ãªãã¸ã§ã¯ãæåè¨ 319 * èªã®ç¶æ¿ã«ç¸å½ï¼ãããã®ã§ãããï¼WINFOãå 320 ±ç¨ä½ã§å®ç¾©ããã¦ããã 321 * ãã«ï¼1ã¤ã®ãã£ã¼ã«ãã¨ãã¦å«ãã¦ããï¼ 230 * 同期・通信オブジェクトの待ち情報ブロックの共通部分 231 * 232 * この構造体は,待ち情報ブロック(WINFO)を拡張(オブジェクト指向言 233 * 語の継承に相当)したものであるが,WINFOが共用体で定義されているた 234 * めに,1つのフィールドとして含めている. 322 235 */ 323 236 typedef struct wait_object_waiting_information { 324 WINFO winfo; /* æ¨æºã®å¾ 325 ã¡æ 326 å ±ããã㯠*/ 327 WOBJCB *p_wobjcb; /* å¾ 328 ã¡ãªãã¸ã§ã¯ãã®ç®¡çããã㯠*/ 237 WINFO winfo; /* 標準の待ち情報ブロック */ 238 WOBJCB *p_wobjcb; /* 待ちオブジェクトの管理ブロック */ 329 239 } WINFO_WOBJ; 330 240 331 241 /* 332 * åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 333 ã¡ç¶æ 334 ã¸ã®é·ç§» 242 * 同期・通信オブジェクトに対する待ち状態への遷移 335 243 * 336 * å®è¡ä¸ã®ã¿ã¹ã¯ãå¾ 337 ã¡ç¶æ 338 ã«é·ç§»ããï¼åæã»éä¿¡ãªãã¸ã§ã¯ãã®å¾ 339 ã¡ãã¥ã¼ 340 * ã«ã¤ãªãï¼ã¾ãï¼å¾ 341 ã¡æ 342 å ±ãããã¯ï¼WINFOï¼ã®p_wobjcbãè¨å®ããï¼ 343 * wobj_make_wait_tmoutã¯ï¼ã¿ã¤ã ã¤ãã³ããããã¯ã®ç»é²ãè¡ãï¼ 244 * 実行中のタスクを待ち状態に遷移させ,同期・通信オブジェクトの待ちキュー 245 * につなぐ.また,待ち情報ブロック(WINFO)のp_wobjcbを設定する. 246 * wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う. 344 247 */ 345 248 extern void wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo); … … 348 251 349 252 /* 350 * ã¿ã¹ã¯åªå 351 度å¤æ´æã®å¦ç 352 * 353 * åæã»éä¿¡ãªãã¸ã§ã¯ãã«å¯¾ããå¾ 354 ã¡ç¶æ 355 ã«ããã¿ã¹ã¯ã®åªå 356 度ãå¤æ´ã 357 * ããå ´åã«ï¼å¾ 358 ã¡ãã¥ã¼ã®ä¸ã§ã®ã¿ã¹ã¯ã®ä½ç½®ãä¿®æ£ããï¼ 253 * タスク優先度変更時の処理 254 * 255 * 同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ 256 * れた場合に,待ちキューの中でのタスクの位置を修正する. 359 257 */ 360 258 Inline void … … 368 266 369 267 /* 370 * å¾ 371 ã¡ãã¥ã¼ã®åæå 372 * 373 * å¾ 374 ã¡ãã¥ã¼ã«ã¤ãªããã¦ããã¿ã¹ã¯ããã¹ã¦å¾ 375 ã¡è§£é¤ããï¼å¾ 376 ã¡è§£é¤ãã 377 * ã¿ã¹ã¯ããã®è¿å¤ã¯ï¼E_DLTã¨ããï¼ 268 * 待ちキューの初期化 269 * 270 * 待ちキューにつながれているタスクをすべて待ち解除する.待ち解除した 271 * タスクからの返値は,E_DLTとする. 378 272 */ 379 273 extern void init_wait_queue(QUEUE *p_wait_queue);
Note:
See TracChangeset
for help on using the changeset viewer.