Changeset 167 for UsbWattMeter/trunk/asp_dcre/kernel/task.c
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/asp_dcre/kernel/task.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 9 9 * Graduate School of Information Science, Nagoya Univ., JAPAN 10 10 * 11 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 12 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 13 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 14 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 15 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 16 * XR[hÉÜÜêĢ鱯D 17 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 18 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 19 gip 20 * Ò}j 21 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 22 * Ì³ÛØKèðfÚ·é±ÆD 23 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 24 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 25 * ÆD 26 * (a) Äzzɺ¤hL 27 gipÒ}j 28 AÈÇjÉCãLÌ 29 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 30 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 31 * ñ·é±ÆD 32 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 33 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 34 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 35 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 36 * ÆÓ·é±ÆD 11 * 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 12 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 13 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 14 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 15 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 16 * スコード中に含まれていること. 17 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 18 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 19 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 20 * の無保証規定を掲載すること. 21 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 22 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 23 * と. 24 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 25 * 作権表示,この利用条件および下記の無保証規定を掲載すること. 26 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 27 * 報告すること. 28 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 29 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 30 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 31 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 32 * 免責すること. 37 33 * 38 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨39 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI40 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF41 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC»42 * ÌÓCðíÈ¢D34 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 35 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 36 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 37 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 38 * の責任を負わない. 43 39 * 44 40 * $Id$ … … 46 42 47 43 /* 48 * ^XNÇW 49 [ 44 * タスク管理モジュール 50 45 */ 51 46 … … 55 50 56 51 /* 57 * g[XO}NÌftHgè`52 * トレースログマクロのデフォルト定義 58 53 */ 59 54 #ifndef LOG_TEX_ENTER … … 68 63 69 64 /* 70 * ÀsóÔÌ^XN65 * 実行状態のタスク 71 66 */ 72 67 TCB *p_runtsk; 73 68 74 69 /* 75 * ÅDæÊÌ^XN70 * 最高優先順位のタスク 76 71 */ 77 72 TCB *p_schedtsk; 78 73 79 74 /* 80 * ^XNfBXpb`^^XNáO[`N®vtO75 * タスクディスパッチ/タスク例外処理ルーチン起動要求フラグ 81 76 */ 82 77 bool_t reqflg; 83 78 84 79 /* 85 * ÝDæx}XNSðóÔ80 * 割込み優先度マスク全解除状態 86 81 */ 87 82 bool_t ipmflg; 88 83 89 84 /* 90 * fBXpb`Ö~óÔ85 * ディスパッチ禁止状態 91 86 */ 92 87 bool_t disdsp; 93 88 94 89 /* 95 * ^XNfBXpb`Â\óÔ90 * タスクディスパッチ可能状態 96 91 */ 97 92 bool_t dspflg; 98 93 99 94 /* 100 * fBL 101 [ 95 * レディキュー 102 96 */ 103 97 QUEUE ready_queue[TNUM_TPRI]; 104 98 105 99 /* 106 * fBL 107 [T[`̽ßÌrbg}bv 100 * レディキューサーチのためのビットマップ 108 101 */ 109 102 uint16_t ready_primap; 110 103 111 104 /* 112 * gpµÄ¢È¢TCBÌXg105 * 使用していないTCBのリスト 113 106 */ 114 107 QUEUE free_tcb; 115 108 116 109 /* 117 * ^XNÇW 118 [Ìú» 110 * タスク管理モジュールの初期化 119 111 */ 120 112 void … … 160 152 161 153 /* 162 * rbg}bvT[`Ö163 * 164 * bitmap àÌ1ÌrbgÌàCÅàºÊiEjÌàÌðT[`µC»Ìrb165 * gÔðÔ·DrbgÔÍCźÊrbgð0Æ·éDbitmapÉ0ðwè166 * µÄÍÈçÈ¢D±ÌÖÅÍCbitmapª16rbgŠ鱯ð¼èµC167 * uint16_t ^ƵĢéD168 * 169 * rbgT[`½ßðÂvZbTÅÍCrbgT[`½ßðg¤æ¤É170 * «¼µ½ûªø¦ªÇ¢êª éD±Ìæ¤ÈêÉÍC^[Qbg171 * ˶ÅrbgT[`½ßðgÁ½bitmap_searchðè`µC172 * OMIT_BITMAP_SEARCH ð}Nè`·êÎæ¢DܽCrbgT[`½ßÌ173 * T[`ûüªtÈÇÌRÅDæxÆrbgÆÌÎðÏXµ½¢êÉ174 * ÍCPRIMAP_BITð}Nè`·êÎæ¢D175 * 176 * ܽCCuÉffsª éÈçCÌæ¤Éè`µÄCuÖð177 * gÁ½ûªø¦ªÇ¢Â\«à éD154 * ビットマップサーチ関数 155 * 156 * bitmap内の1のビットの内,最も下位(右)のものをサーチし,そのビッ 157 * ト番号を返す.ビット番号は,最下位ビットを0とする.bitmapに0を指定 158 * してはならない.この関数では,bitmapが16ビットであることを仮定し, 159 * uint16_t型としている. 160 * 161 * ビットサーチ命令を持つプロセッサでは,ビットサーチ命令を使うように 162 * 書き直した方が効率が良い場合がある.このような場合には,ターゲット 163 * 依存部でビットサーチ命令を使ったbitmap_searchを定義し, 164 * OMIT_BITMAP_SEARCHをマクロ定義すればよい.また,ビットサーチ命令の 165 * サーチ方向が逆などの理由で優先度とビットとの対応を変更したい場合に 166 * は,PRIMAP_BITをマクロ定義すればよい. 167 * 168 * また,ライブラリにffsがあるなら,次のように定義してライブラリ関数を 169 * 使った方が効率が良い可能性もある. 178 170 * #define bitmap_search(bitmap) (ffs(bitmap) - 1) 179 171 */ … … 207 199 208 200 /* 209 * Dæxrbg}bvªó©Ì`FbN201 * 優先度ビットマップが空かのチェック 210 202 */ 211 203 Inline bool_t … … 216 208 217 209 /* 218 * Dæxrbg}bvÌT[`210 * 優先度ビットマップのサーチ 219 211 */ 220 212 Inline uint_t … … 225 217 226 218 /* 227 * Dæxrbg}bvÌZbg219 * 優先度ビットマップのセット 228 220 */ 229 221 Inline void … … 234 226 235 227 /* 236 * Dæxrbg}bvÌNA228 * 優先度ビットマップのクリア 237 229 */ 238 230 Inline void … … 243 235 244 236 /* 245 * ÅDæÊ^XNÌT[`237 * 最高優先順位タスクのサーチ 246 238 */ 247 239 #ifdef TOPPERS_tsksched … … 259 251 260 252 /* 261 * ÀsÅ«éóÔÖÌJÚ262 * 263 * ÅDæÊÌ^XNðXV·éÌÍCÀsÅ«é^XNªÈ©Á½ê264 * ÆCp_tcbÌDæxªÅDæÊÌ^XNÌDæxæèà¢êÅ265 * éD253 * 実行できる状態への遷移 254 * 255 * 最高優先順位のタスクを更新するのは,実行できるタスクがなかった場合 256 * と,p_tcbの優先度が最高優先順位のタスクの優先度よりも高い場合であ 257 * る. 266 258 */ 267 259 #ifdef TOPPERS_tskrun … … 285 277 286 278 /* 287 * ÀsÅ«éóÔ©ç¼ÌóÔÖÌJÚ 288 * 289 * ÅDæÊÌ^XNðXV·éÌÍCp_tcbªÅDæÊÌ^XNÅ 290 * Á½êÅ éDp_tcbƯ¶DæxÌ^XNª¼É éêÍCp_tcb 291 * ÌÌ^XNªÅDæÊÉÈéD»¤ÅÈ¢êÍCfBL 292 [ð 293 * T[`·éKvª éD 279 * 実行できる状態から他の状態への遷移 280 * 281 * 最高優先順位のタスクを更新するのは,p_tcbが最高優先順位のタスクで 282 * あった場合である.p_tcbと同じ優先度のタスクが他にある場合は,p_tcb 283 * の次のタスクが最高優先順位になる.そうでない場合は,レディキューを 284 * サーチする必要がある. 294 285 */ 295 286 #ifdef TOPPERS_tsknrun … … 321 312 322 313 /* 323 * x~óÔÖÌJÚ314 * 休止状態への遷移 324 315 */ 325 316 #ifdef TOPPERS_tskdmt … … 339 330 340 331 /* 341 * x~óÔ©çÀsÅ«éóÔÖÌJÚ332 * 休止状態から実行できる状態への遷移 342 333 */ 343 334 #ifdef TOPPERS_tskact … … 355 346 356 347 /* 357 * ^XNÌDæxÌÏX 358 * 359 * ^XNªÀsÅ«éóÔÌêÉÍCfBL 360 [ÌÅÌÊuðÏX· 361 * éDIuWFNgÌÒ¿L 362 [ÌÅÒ¿óÔÉÈÁÄ¢éêÉÍCÒ 363 * ¿L 364 [ÌÅÌÊuðÏX·éD 365 * 366 * ÅDæÊÌ^XNðXV·éÌÍC(1) p_tcbªÅDæÊÌ^X 367 * NÅ ÁÄC»ÌDæx𺰽êC(2) p_tcbªÅDæÊÌ^X 368 * NÅÍÈCÏXãÌDæxªÅDæÊÌ^XNÌDæxæèࢠ369 * êÅ éD(1)ÌêÉÍCfBL 370 [ðT[`·éKvª éD 348 * タスクの優先度の変更 349 * 350 * タスクが実行できる状態の場合には,レディキューの中での位置を変更す 351 * る.オブジェクトの待ちキューの中で待ち状態になっている場合には,待 352 * ちキューの中での位置を変更する. 353 * 354 * 最高優先順位のタスクを更新するのは,(1) p_tcbが最高優先順位のタス 355 * クであって,その優先度を下げた場合,(2) p_tcbが最高優先順位のタス 356 * クではなく,変更後の優先度が最高優先順位のタスクの優先度よりも高い 357 * 場合である.(1)の場合には,レディキューをサーチする必要がある. 371 358 */ 372 359 #ifdef TOPPERS_tskpri … … 382 369 if (TSTAT_RUNNABLE(p_tcb->tstat)) { 383 370 /* 384 * ^XNªÀsÅ«éóÔÌê371 * タスクが実行できる状態の場合 385 372 */ 386 373 queue_delete(&(p_tcb->task_queue)); … … 407 394 if (TSTAT_WAIT_WOBJCB(p_tcb->tstat)) { 408 395 /* 409 * ^XNªC¯úEÊMIuWFNgÌÇubNÌ¤Ê 410 * ªiWOBJCBjÌÒ¿L 411 [ÉÂȪêÄ¢éê 396 * タスクが,同期・通信オブジェクトの管理ブロックの共通部 397 * 分(WOBJCB)の待ちキューにつながれている場合 412 398 */ 413 399 wobj_change_priority(((WINFO_WOBJ *)(p_tcb->p_winfo))->p_wobjcb, … … 421 407 422 408 /* 423 * fBL 424 [Ìñ] 425 * 426 * ÅDæÊÌ^XNðXV·éÌÍCÅDæÊÌ^XNª^XNL 427 * 428 [ÌöÉÚ®µ½êÅ éD 409 * レディキューの回転 410 * 411 * 最高優先順位のタスクを更新するのは,最高優先順位のタスクがタスクキ 412 * ューの末尾に移動した場合である. 429 413 */ 430 414 #ifdef TOPPERS_tskrot … … 450 434 451 435 /* 452 * ^XNáO[`ÌÄoµ453 * 454 * ASP J[lÅÍC^XNáO[`àÅCPUbNóÔÉJÚµC455 * ³ÌóÔÉß³¸É^[µ½êCJ[lª³ÌóÔÉß·D436 * タスク例外処理ルーチンの呼出し 437 * 438 * ASPカーネルでは,タスク例外処理ルーチン内でCPUロック状態に遷移し, 439 * 元の状態に戻さずにリターンした場合,カーネルが元の状態に戻す. 456 440 */ 457 441 #ifdef TOPPERS_tsktex … … 486 470 if (p_runtsk != p_schedtsk && dspflg) { 487 471 /* 488 * ±±ÅdispatchðÄÑo·ÍCÝÄAÄoµÉÈÁÄ489 * ¢éªCdispatchðÄÔOÉp_runtsk->enatexðfalseɵÄ490 * ¨¯ÎxáªÈ¢D»ÌRÉ¢ÄÍCuTOPPERS/ASP J[491 * l ÝvvðQÆÌ±ÆD472 * ここでdispatchを呼び出す処理は,相互再帰呼出しになって 473 * いるが,dispatchを呼ぶ前にp_runtsk->enatexをfalseにして 474 * おけば支障がない.その理由については,「TOPPERS/ASP カー 475 * ネル 設計メモ」を参照のこと. 492 476 */ 493 477 dispatch(); … … 498 482 499 483 /* 500 * ^XNáO[`ÌN®484 * タスク例外処理ルーチンの起動 501 485 */ 502 486 #ifndef OMIT_CALLTEX -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.