Changeset 167 for UsbWattMeter/trunk/asp_dcre/kernel/wait.h
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/asp_dcre/kernel/wait.h
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêĢ鱯D 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 22 * Ì³ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 37 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC» 42 * ÌÓCðíÈ¢D 11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 33 * 34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * @(#) $Id$ … … 46 42 47 43 /* 48 * Ò¿óÔÇW 49 [ 44 * 待ち状態管理モジュール 50 45 */ 51 46 … … 57 52 58 53 /* 59 * ^XNÌDæxÌÒ¿L 60 [ÖÌ}ü 61 * 62 * p_tcbÅwè³êé^XNðC^XNDæxÌL 63 [p_queueÉ}ü·éD 64 * L 65 [Ìɯ¶DæxÌ^XNª éêÉÍC»ÌÅãÉ}ü·éD 54 * タスクの優先度順の待ちキューへの挿入 55 * 56 * p_tcbで指定されるタスクを,タスク優先度順のキューp_queueに挿入する. 57 * キューの中に同じ優先度のタスクがある場合には,その最後に挿入する. 66 58 */ 67 59 Inline void … … 81 73 82 74 /* 83 * Ò¿óÔÖÌJÚ 84 * 85 * ÀsÌ^XNðÒ¿óÔÉJÚ³¹éDïÌIÉÍCÀsÌ^XNð 86 * fBL 87 [©çíµCTCBÌp_winfotB[hCWINFOÌp_tmevtbtB[ 88 * hðÝè·éD 75 * 待ち状態への遷移 76 * 77 * 実行中のタスクを待ち状態に遷移させる.具体的には,実行中のタスクを 78 * レディキューから削除し,TCBのp_winfoフィールド,WINFOのp_tmevtbフィー 79 * ルドを設定する. 89 80 */ 90 81 Inline void … … 97 88 98 89 /* 99 * Ò¿óÔÖÌJÚi^CAEgwèj 100 * 101 * ÀsÌ^XNðC^CAEgwèt«ÅÒ¿óÔÉJÚ³¹éDïÌ 102 * IÉÍCÀsÌ^XNðfBL 103 [©çíµCTCBÌp_winfotB[ 104 * hCWINFOÌp_tmevtbtB[hðÝè·éDܽC^CCxgu 105 * bNðo^·éD 90 * 待ち状態への遷移(タイムアウト指定) 91 * 92 * 実行中のタスクを,タイムアウト指定付きで待ち状態に遷移させる.具体 93 * 的には,実行中のタスクをレディキューから削除し,TCBのp_winfoフィー 94 * ルド,WINFOのp_tmevtbフィールドを設定する.また,タイムイベントブ 95 * ロックを登録する. 106 96 */ 107 97 extern void make_wait_tmout(WINFO *p_winfo, TMEVTB *p_tmevtb, TMO tmout); 108 98 109 99 /* 110 * Ò¿ð̽ßÌ^XNóÔÌXV 111 * 112 * p_tcbÅwè³êé^XNðCÒ¿ð·éæ¤^XNóÔðXV·éD 113 * Ò¿ð·é^XNªÀsÅ«éóÔÉÈéêÍCfBL 114 [ÉÂÈ 115 * ®DܽCfBXpb`ªKvÈêÉÍtrueðÔ·D 100 * 待ち解除のためのタスク状態の更新 101 * 102 * p_tcbで指定されるタスクを,待ち解除するようタスク状態を更新する. 103 * 待ち解除するタスクが実行できる状態になる場合は,レディキューにつな 104 * ぐ.また,ディスパッチが必要な場合にはtrueを返す. 116 105 */ 117 106 Inline bool_t … … 122 111 if (!TSTAT_SUSPENDED(p_tcb->tstat)) { 123 112 /* 124 * Ò¿óÔ©çÀsÅ«éóÔÖÌJÚ113 * 待ち状態から実行できる状態への遷移 125 114 */ 126 115 p_tcb->tstat = TS_RUNNABLE; … … 130 119 else { 131 120 /* 132 * ñdÒ¿óÔ©ç§Ò¿óÔÖÌJÚ121 * 二重待ち状態から強制待ち状態への遷移 133 122 */ 134 123 p_tcb->tstat = TS_SUSPENDED; … … 139 128 140 129 /* 141 * IuWFNgÒ¿L 142 [©çÌí 143 * 144 * p_tcbÅwè³êé^XNªC¯úEÊMIuWFNgÌÒ¿L 145 [É 146 * ȪêÄ¢êÎCÒ¿L 147 [©çí·éD 130 * オブジェクト待ちキューからの削除 131 * 132 * p_tcbで指定されるタスクが,同期・通信オブジェクトの待ちキューにつ 133 * ながれていれば,待ちキューから削除する. 148 134 */ 149 135 Inline void … … 156 142 157 143 /* 158 * Ôҿ̽ßÌ^CCxgubNÌo^ð159 * 160 * p_tcb Åwè³êé^XNÉεÄCÔҿ̽ßÌ^CCxgu161 * bNªo^³êÄ¢êÎC»êðo^ð·éD144 * 時間待ちのためのタイムイベントブロックの登録解除 145 * 146 * p_tcbで指定されるタスクに対して,時間待ちのためのタイムイベントブ 147 * ロックが登録されていれば,それを登録解除する. 162 148 */ 163 149 Inline void … … 170 156 171 157 /* 172 * Ò¿ð 173 * 174 * p_tcbÅwè³êé^XNÌÒ¿óÔðð·éDïÌIÉÍC^CC 175 * xgubNªo^³êÄ¢êÎC»êðo^ð·éDܽC^XN 176 * óÔðXVµCÒ¿ðµ½^XN©çÌÔlðE_OKÆ·éDÒ¿L 177 [ 178 * ©çÌíÍsíÈ¢DÒ¿ðµ½^XNÖÌfBXpb`ªKvÈê 179 * ÉÍtrueðÔ·D 158 * 待ち解除 159 * 160 * p_tcbで指定されるタスクの待ち状態を解除する.具体的には,タイムイ 161 * ベントブロックが登録されていれば,それを登録解除する.また,タスク 162 * 状態を更新し,待ち解除したタスクからの返値をE_OKとする.待ちキュー 163 * からの削除は行わない.待ち解除したタスクへのディスパッチが必要な場 164 * 合にはtrueを返す. 180 165 */ 181 166 extern bool_t wait_complete(TCB *p_tcb); 182 167 183 168 /* 184 * ^CAEgɺ¤Ò¿ð 185 * 186 * p_tcbÅwè³êé^XNªCÒ¿L 187 [ÉÂȪêÄ¢êÎÒ¿L 188 [ 189 * ©çíµC^XNóÔðXV·éDܽCÒ¿ðµ½^XN©çÌÔ 190 * lðCwait_tmoutÅÍE_TMOUTCwait_tmout_okÅÍE_OKÆ·éDÒ¿ð 191 * µ½^XNÖÌfBXpb`ªKvÈÍCreqflgðtrueÉ·éD 192 * 193 * wait_tmout_okÍCdly_tskÅg¤½ßÌàÌÅCÒ¿L 194 [©çí·é 195 * ðsíÈ¢D 196 * 197 * ¢¸êÌÖàC^CCxgÌR[obNÖÆµÄp¢é½ßÌ 198 * àÌÅCÝnh©çÄÑo³ê鱯ðzèµÄ¢éD 169 * タイムアウトに伴う待ち解除 170 * 171 * p_tcbで指定されるタスクが,待ちキューにつながれていれば待ちキュー 172 * から削除し,タスク状態を更新する.また,待ち解除したタスクからの返 173 * 値を,wait_tmoutではE_TMOUT,wait_tmout_okではE_OKとする.待ち解除 174 * したタスクへのディスパッチが必要な時は,reqflgをtrueにする. 175 * 176 * wait_tmout_okは,dly_tskで使うためのもので,待ちキューから削除する 177 * 処理を行わない. 178 * 179 * いずれの関数も,タイムイベントのコールバック関数として用いるための 180 * もので,割込みハンドラから呼び出されることを想定している. 199 181 */ 200 182 extern void wait_tmout(TCB *p_tcb); … … 202 184 203 185 /* 204 * Ò¿óÔ̧ð 205 * 206 * p_tcbÅwè³êé^XNÌÒ¿óÔð§IÉð·éDïÌIÉÍC 207 * ^XNªÒ¿L 208 [ÉÂȪêÄ¢êÎÒ¿L 209 [©çíµC^CC 210 * xgubNªo^³êÄ¢êλêðo^ð·éDܽC^XNÌ 211 * óÔðXVµCÒ¿ðµ½^XN©çÌÔlðE_RLWAIÆ·éDܽC 212 * Ò¿ðµ½^XNÖÌfBXpb`ªKvÈêÉÍtrueðÔ·D 186 * 待ち状態の強制解除 187 * 188 * p_tcbで指定されるタスクの待ち状態を強制的に解除する.具体的には, 189 * タスクが待ちキューにつながれていれば待ちキューから削除し,タイムイ 190 * ベントブロックが登録されていればそれを登録解除する.また,タスクの 191 * 状態を更新し,待ち解除したタスクからの返値をE_RLWAIとする.また, 192 * 待ち解除したタスクへのディスパッチが必要な場合にはtrueを返す. 213 193 */ 214 194 extern bool_t wait_release(TCB *p_tcb); 215 195 216 196 /* 217 * Ò¿L 218 [ÌæªÌ^XNID 219 * 220 * p_wait_queueÅwèµ½Ò¿L 221 [ÌæªÌ^XNIDðÔ·DÒ¿L 222 [ 223 * ªóÌêÉÍCTSK_NONEðÔ·D 197 * 待ちキューの先頭のタスクID 198 * 199 * p_wait_queueで指定した待ちキューの先頭のタスクIDを返す.待ちキュー 200 * が空の場合には,TSK_NONEを返す. 224 201 */ 225 202 Inline ID … … 235 212 236 213 /* 237 * ¯úEÊMIuWFNgÌÇubN̤ʪì[` 238 * 239 * ¯úEÊMIuWFNgÌú»ubNÆÇubNÌæªªÍ¤ 240 * ÊÉÈÁÄ¢éDȺÍC»Ì¤Êªðµ¤½ßÌ^¨æÑ[`Q 241 * Å éD 242 * 243 * ¡ÌÒ¿L 244 [ð¯úEÊMIuWFNgÌêCæªÈOÌÒ¿ 245 * L 246 [ðì·éêÉÍC±êçÌ[`Íg¦È¢DܽCIuWF 247 * Ng®«ÌTA_TPRIrbgðQÆ·éÌÅC±Ìrbgð¼ÌÚIÉgÁÄ 248 * ¢éêàC±êçÌ[`Íg¦È¢D 249 */ 250 251 /* 252 * ¯úEÊMIuWFNgÌú»ubN̤ʪ 214 * 同期・通信オブジェクトの管理ブロックの共通部分操作ルーチン 215 * 216 * 同期・通信オブジェクトの初期化ブロックと管理ブロックの先頭部分は共 217 * 通になっている.以下は,その共通部分を扱うための型およびルーチン群 218 * である. 219 * 220 * 複数の待ちキューを持つ同期・通信オブジェクトの場合,先頭以外の待ち 221 * キューを操作する場合には,これらのルーチンは使えない.また,オブジェ 222 * クト属性のTA_TPRIビットを参照するので,このビットを他の目的に使って 223 * いる場合も,これらのルーチンは使えない. 224 */ 225 226 /* 227 * 同期・通信オブジェクトの初期化ブロックの共通部分 253 228 */ 254 229 typedef struct wait_object_initialization_block { 255 ATR wobjatr; /* IuWFNg®«*/230 ATR wobjatr; /* オブジェクト属性 */ 256 231 } WOBJINIB; 257 232 258 233 /* 259 * ¯úEÊMIuWFNgÌÇubN̤ʪ234 * 同期・通信オブジェクトの管理ブロックの共通部分 260 235 */ 261 236 typedef struct wait_object_control_block { 262 QUEUE wait_queue; /* Ò¿L 263 [ */ 264 const WOBJINIB *p_wobjinib; /* ú»ubNÖÌ|C^ */ 237 QUEUE wait_queue; /* 待ちキュー */ 238 const WOBJINIB *p_wobjinib; /* 初期化ブロックへのポインタ */ 265 239 } WOBJCB; 266 240 267 241 /* 268 * ¯úEÊMIuWFNgÌÒ¿îñubN̤ʪ269 * 270 * ±Ì\¢ÌÍCÒ¿îñubNiWINFOjðg£iIuWFNgwü¾271 * êÌp³Éjµ½àÌÅ éªCWINFOª¤pÌÅè`³êÄ¢é½272 * ßÉC1ÂÌtB[hƵÄÜßÄ¢éD242 * 同期・通信オブジェクトの待ち情報ブロックの共通部分 243 * 244 * この構造体は,待ち情報ブロック(WINFO)を拡張(オブジェクト指向言 245 * 語の継承に相当)したものであるが,WINFOが共用体で定義されているた 246 * めに,1つのフィールドとして含めている. 273 247 */ 274 248 typedef struct wait_object_waiting_information { 275 WINFO winfo; /* WÌÒ¿îñubN*/276 WOBJCB *p_wobjcb; /* Ò¿IuWFNgÌÇubN*/249 WINFO winfo; /* 標準の待ち情報ブロック */ 250 WOBJCB *p_wobjcb; /* 待ちオブジェクトの管理ブロック */ 277 251 } WINFO_WOBJ; 278 252 279 253 /* 280 * ¯úEÊMIuWFNgÉηéÒ¿óÔÖÌJÚ254 * 同期・通信オブジェクトに対する待ち状態への遷移 281 255 * 282 * ÀsÌ^XNðÒ¿óÔÉJÚ³¹C¯úEÊMIuWFNgÌÒ¿L 283 [ 284 * ÉÂÈ®DܽCÒ¿îñubNiWINFOjÌp_wobjcbðÝè·éD 285 * wobj_make_wait_tmoutÍC^CCxgubNÌo^às¤D 256 * 実行中のタスクを待ち状態に遷移させ,同期・通信オブジェクトの待ちキュー 257 * につなぐ.また,待ち情報ブロック(WINFO)のp_wobjcbを設定する. 258 * wobj_make_wait_tmoutは,タイムイベントブロックの登録も行う. 286 259 */ 287 260 extern void wobj_make_wait(WOBJCB *p_wobjcb, WINFO_WOBJ *p_winfo); … … 290 263 291 264 /* 292 * ^XNDæxÏXÌ 293 * 294 * ¯úEÊMIuWFNgÉηéÒ¿óÔÉ é^XNÌDæxªÏX³ 295 * ê½êÉCÒ¿L 296 [ÌÅÌ^XNÌÊuðC³·éD 265 * タスク優先度変更時の処理 266 * 267 * 同期・通信オブジェクトに対する待ち状態にあるタスクの優先度が変更さ 268 * れた場合に,待ちキューの中でのタスクの位置を修正する. 297 269 */ 298 270 Inline void … … 306 278 307 279 /* 308 * Ò¿L 309 [Ìú» 310 * 311 * Ò¿L 312 [ÉÂȪêÄ¢é^XNð·×ÄÒ¿ð·éDÒ¿ðµ½ 313 * ^XN©çÌÔlÍCE_DLTÆ·éDÒ¿ðµ½^XNÖÌfBXpb` 314 * ªKvÈêÍtrueC»¤ÅÈ¢êÍfalseðÔ·D 280 * 待ちキューの初期化 281 * 282 * 待ちキューにつながれているタスクをすべて待ち解除する.待ち解除した 283 * タスクからの返値は,E_DLTとする.待ち解除したタスクへのディスパッチ 284 * が必要な場合はtrue,そうでない場合はfalseを返す. 315 285 */ 316 286 extern bool_t init_wait_queue(QUEUE *p_wait_queue); -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.