Changeset 321 for EcnlProtoTool/trunk/asp3_dcre/sample/sample1.c
- Timestamp:
- Aug 23, 2017, 9:27:43 AM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/sample/sample1.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r270 r321 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 * ãµã³ãã«ããã°ã©ã (1)ã®æ¬ä½ 60 * 61 * ASPã«ã¼ãã«ã®åºæ¬çãªåä½ã確èªããããã®ãµã³ãã«ããã°ã©ã ï¼ 62 * 63 * ããã°ã©ã ã®æ¦è¦: 64 * 65 * ã¦ã¼ã¶ã¤ã³ã¿ãã§ã¼ã¹ãåãæã¤ã¡ã¤ã³ã¿ã¹ã¯ï¼ã¿ã¹ã¯ID: MAIN_TASKï¼åª 66 * å 67 度: MAIN_PRIORITYï¼ã¨ï¼3ã¤ã®ä¸¦è¡å®è¡ãããã¿ã¹ã¯ï¼ã¿ã¹ã¯ID: 68 * TASK1ï½TASK3ï¼åæåªå 69 度: MID_PRIORITYï¼ã§æ§æãããï¼ã¾ãï¼èµ·åå¨ 70 * æã2ç§ã®å¨æãã³ãã©ï¼å¨æãã³ãã©ID: CYCHDR1ï¼ãç¨ããï¼ 71 * 72 * 並è¡å®è¡ãããã¿ã¹ã¯ã¯ï¼task_loopå空ã«ã¼ããå®è¡ãã度ã«ï¼ã¿ã¹ã¯ã 73 * å®è¡ä¸ã§ãããã¨ãããããã¡ãã»ã¼ã¸ã表示ããï¼ç©ºã«ã¼ããå®è¡ãã 74 * ã®ã¯ï¼ç©ºã«ã¼ããªãã§ã¡ãã»ã¼ã¸ãåºåããã¨ï¼å¤éã®ã¡ãã»ã¼ã¸ãåºå 75 * ããï¼ããã°ã©ã ã®åä½ã確èªãããããªãããã§ããï¼ã¾ãï¼ä½éãªã· 76 * ãªã¢ã«ãã¼ããç¨ãã¦ã¡ãã»ã¼ã¸ãåºåããå ´åã«ï¼ãã¹ã¦ã®ã¡ãã»ã¼ã¸ 77 * ãåºåã§ããããã«ï¼ã¡ãã»ã¼ã¸ã®éãå¶éããã¨ããçç±ãããï¼ 78 * 79 * å¨æãã³ãã©ã¯ï¼ä¸ã¤ã®åªå 80 度ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼ 81 * LOW_PRIORITYï¼ã®ã¬ãã£ãã¥ã¼ãå転ãããï¼ããã°ã©ã ã®èµ·åç´å¾ã¯ï¼ 82 * å¨æãã³ãã©ã¯åæ¢ç¶æ 83 ã«ãªã£ã¦ããï¼ 84 * 85 * ã¡ã¤ã³ã¿ã¹ã¯ã¯ï¼ã·ãªã¢ã«I/Oãã¼ãããã®æåå 86 ¥åãè¡ãï¼æåå 87 ¥åã 88 * å¾ 89 ã£ã¦ããéã¯ï¼ä¸¦è¡å®è¡ãããã¿ã¹ã¯ãå®è¡ããã¦ããï¼ï¼å 90 ¥åããã 91 * æåã«å¯¾å¿ããå¦çãå®è¡ããï¼å 92 ¥åãããæåã¨å¦çã®é¢ä¿ã¯æ¬¡ã®éãï¼ 93 * Control-Cã¾ãã¯'Q'ãå 94 ¥åãããã¨ï¼ããã°ã©ã ãçµäºããï¼ 95 * 96 * '1' : 対象ã¿ã¹ã¯ãTASK1ã«åãæããï¼åæè¨å®ï¼ï¼ 97 * '2' : 対象ã¿ã¹ã¯ãTASK2ã«åãæããï¼ 98 * '3' : 対象ã¿ã¹ã¯ãTASK3ã«åãæããï¼ 99 * 'a' : 対象ã¿ã¹ã¯ãact_tskã«ããèµ·åããï¼ 100 * 'A' : 対象ã¿ã¹ã¯ã«å¯¾ããèµ·åè¦æ±ãcan_actã«ãããã£ã³ã»ã«ããï¼ 101 * 'e' : 対象ã¿ã¹ã¯ã«ext_tskãå¼ã³åºããï¼çµäºãããï¼ 102 * 't' : 対象ã¿ã¹ã¯ãter_tskã«ããå¼·å¶çµäºããï¼ 103 * '>' : 対象ã¿ã¹ã¯ã®åªå 104 度ãHIGH_PRIORITYã«ããï¼ 105 * '=' : 対象ã¿ã¹ã¯ã®åªå 106 度ãMID_PRIORITYã«ããï¼ 107 * '<' : 対象ã¿ã¹ã¯ã®åªå 108 度ãLOW_PRIORITYã«ããï¼ 109 * 'G' : 対象ã¿ã¹ã¯ã®åªå 110 度ãget_priã§èªã¿åºãï¼ 111 * 's' : 対象ã¿ã¹ã¯ã«slp_tskãå¼ã³åºããï¼èµ·åºå¾ 112 ã¡ã«ãããï¼ 113 * 'S' : 対象ã¿ã¹ã¯ã«tslp_tsk(10ç§)ãå¼ã³åºããï¼èµ·åºå¾ 114 ã¡ã«ãããï¼ 115 * 'w' : 対象ã¿ã¹ã¯ãwup_tskã«ããèµ·åºããï¼ 116 * 'W' : 対象ã¿ã¹ã¯ã«å¯¾ããèµ·åºè¦æ±ãcan_wupã«ãããã£ã³ã»ã«ããï¼ 117 * 'l' : 対象ã¿ã¹ã¯ãrel_waiã«ããå¼·å¶çã«å¾ 118 ã¡è§£é¤ã«ããï¼ 119 * 'u' : 対象ã¿ã¹ã¯ãsus_tskã«ããå¼·å¶å¾ 120 ã¡ç¶æ 121 ã«ããï¼ 122 * 'm' : 対象ã¿ã¹ã¯ã®å¼·å¶å¾ 123 ã¡ç¶æ 124 ãrsm_tskã«ãã解é¤ããï¼ 125 * 'd' : 対象ã¿ã¹ã¯ã«dly_tsk(10ç§)ãå¼ã³åºããï¼æéçµéå¾ 126 ã¡ã«ãããï¼ 127 * 'x' : 対象ã¿ã¹ã¯ã«ras_terã«ããçµäºè¦æ±ããï¼ 128 * 'y' : 対象ã¿ã¹ã¯ã«dis_terãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãç¦æ¢ããï¼ 129 * 'Y' : 対象ã¿ã¹ã¯ã«ena_terãå¼ã³åºããï¼ã¿ã¹ã¯çµäºã許å¯ããï¼ 130 * 'r' : 3ã¤ã®åªå 131 度ï¼HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITYï¼ã®ã¬ 132 * ãã£ãã¥ã¼ãå転ãããï¼ 133 * 'c' : å¨æãã³ãã©ãåä½éå§ãããï¼ 134 * 'C' : å¨æãã³ãã©ãåä½åæ¢ãããï¼ 135 * 'b' : ã¢ã©ã¼ã ãã³ãã©ã5ç§å¾ã«èµ·åããããåä½éå§ãããï¼ 136 * 'B' : ã¢ã©ã¼ã ãã³ãã©ãåä½åæ¢ãããï¼ 137 * 'z' : 対象ã¿ã¹ã¯ã«CPUä¾å¤ãçºçãããï¼ã¿ã¹ã¯ãçµäºãããï¼ï¼ 138 * 'Z' : 対象ã¿ã¹ã¯ã«CPUããã¯ç¶æ 139 ã§CPUä¾å¤ãçºçãããï¼ããã°ã©ã ã 140 * çµäºããï¼ï¼ 141 * '@' : ã¿ã¹ã¯3ãacre_tskã«ããçæããï¼ 142 * '!' : 対象ã¿ã¹ã¯ãdel_tskã«ããåé¤ããï¼ 143 * '$' : ã¢ã©ã¼ã ãã³ãã©ãacre_almã«ããçæããï¼ 144 * '#' : ã¢ã©ã¼ã ãã³ãã©ãdel_almã«ããåé¤ããï¼ 145 * 'V' : fch_hrtã§é«å解è½ã¿ã¤ãã2åèªãï¼ 146 * 'v' : çºè¡ããã·ã¹ãã ã³ã¼ã«ã表示ããï¼ããã©ã«ãï¼ï¼ 147 * 'q' : çºè¡ããã·ã¹ãã ã³ã¼ã«ã表示ããªãï¼ 44 * サンプルプログラム(1)の本体 45 * 46 * ASPカーネルの基本的な動作を確認するためのサンプルプログラム. 47 * 48 * プログラムの概要: 49 * 50 * ユーザインタフェースを受け持つメインタスク(タスクID: MAIN_TASK,優 51 * 先度: MAIN_PRIORITY)と,3つの並行実行されるタスク(タスクID: 52 * TASK1~TASK3,初期優先度: MID_PRIORITY)で構成される.また,起動周 53 * 期が2秒の周期ハンドラ(周期ハンドラID: CYCHDR1)を用いる. 54 * 55 * 並行実行されるタスクは,task_loop回空ループを実行する度に,タスクが 56 * 実行中であることをあらわすメッセージを表示する.空ループを実行する 57 * のは,空ループなしでメッセージを出力すると,多量のメッセージが出力 58 * され,プログラムの動作が確認しずらくなるためである.また,低速なシ 59 * リアルポートを用いてメッセージを出力する場合に,すべてのメッセージ 60 * が出力できるように,メッセージの量を制限するという理由もある. 61 * 62 * 周期ハンドラは,三つの優先度(HIGH_PRIORITY,MID_PRIORITY, 63 * LOW_PRIORITY)のレディキューを回転させる.プログラムの起動直後は, 64 * 周期ハンドラは停止状態になっている. 65 * 66 * メインタスクは,シリアルI/Oポートからの文字入力を行い(文字入力を 67 * 待っている間は,並行実行されるタスクが実行されている),入力された 68 * 文字に対応した処理を実行する.入力された文字と処理の関係は次の通り. 69 * Control-Cまたは'Q'が入力されると,プログラムを終了する. 70 * 71 * '1' : 対象タスクをTASK1に切り換える(初期設定). 72 * '2' : 対象タスクをTASK2に切り換える. 73 * '3' : 対象タスクをTASK3に切り換える. 74 * 'a' : 対象タスクをact_tskにより起動する. 75 * 'A' : 対象タスクに対する起動要求をcan_actによりキャンセルする. 76 * 'e' : 対象タスクにext_tskを呼び出させ,終了させる. 77 * 't' : 対象タスクをter_tskにより強制終了する. 78 * '>' : 対象タスクの優先度をHIGH_PRIORITYにする. 79 * '=' : 対象タスクの優先度をMID_PRIORITYにする. 80 * '<' : 対象タスクの優先度をLOW_PRIORITYにする. 81 * 'G' : 対象タスクの優先度をget_priで読み出す. 82 * 's' : 対象タスクにslp_tskを呼び出させ,起床待ちにさせる. 83 * 'S' : 対象タスクにtslp_tsk(10秒)を呼び出させ,起床待ちにさせる. 84 * 'w' : 対象タスクをwup_tskにより起床する. 85 * 'W' : 対象タスクに対する起床要求をcan_wupによりキャンセルする. 86 * 'l' : 対象タスクをrel_waiにより強制的に待ち解除にする. 87 * 'u' : 対象タスクをsus_tskにより強制待ち状態にする. 88 * 'm' : 対象タスクの強制待ち状態をrsm_tskにより解除する. 89 * 'd' : 対象タスクにdly_tsk(10秒)を呼び出させ,時間経過待ちにさせる. 90 * 'x' : 対象タスクにras_terにより終了要求する. 91 * 'y' : 対象タスクにdis_terを呼び出させ,タスク終了を禁止する. 92 * 'Y' : 対象タスクにena_terを呼び出させ,タスク終了を許可する. 93 * 'r' : 3つの優先度(HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY)のレ 94 * ディキューを回転させる. 95 * 'c' : 周期ハンドラを動作開始させる. 96 * 'C' : 周期ハンドラを動作停止させる. 97 * 'b' : アラームハンドラを5秒後に起動するよう動作開始させる. 98 * 'B' : アラームハンドラを動作停止させる. 99 * 'z' : 対象タスクにCPU例外を発生させる(タスクを終了させる). 100 * 'Z' : 対象タスクにCPUロック状態でCPU例外を発生させる(プログラムを 101 * 終了する). 102 * '@' : タスク3をacre_tskにより生成する. 103 * '!' : 対象タスクをdel_tskにより削除する. 104 * '$' : アラームハンドラをacre_almにより生成する. 105 * '#' : アラームハンドラをdel_almにより削除する. 106 * 'V' : fch_hrtで高分解能タイマを2回読む. 107 * 'v' : 発行したシステムコールを表示する(デフォルト). 108 * 'q' : 発行したシステムコールを表示しない. 148 109 */ 149 110 … … 158 119 159 120 /* 160 * ãµã¼ãã¹ã³ã¼ã«ã®ã¨ã©ã¼ã®ãã°åºå121 * サービスコールのエラーのログ出力 161 122 */ 162 123 Inline void … … 171 132 172 133 /* 173 * 並è¡å®è¡ãããã¿ã¹ã¯ã¸ã®ã¡ãã»ã¼ã¸é å134 * 並行実行されるタスクへのメッセージ領域 174 135 */ 175 136 char message[3]; 176 137 177 138 /* 178 * ã«ã¼ãåæ° 179 */ 180 ulong_t task_loop; /* ã¿ã¹ã¯å 181 ã§ã®ã«ã¼ãåæ° */ 182 183 /* 184 * 並è¡å®è¡ãããã¿ã¹ã¯ 139 * ループ回数 140 */ 141 ulong_t task_loop; /* タスク内でのループ回数 */ 142 143 /* 144 * 並行実行されるタスク 185 145 */ 186 146 void task(intptr_t exinf) … … 242 202 243 203 /* 244 * å²è¾¼ã¿ãã³ãã©204 * 割込みハンドラ 245 205 */ 246 206 #ifdef INTNO1 … … 257 217 258 218 /* 259 * CPU ä¾å¤ãã³ãã©260 */ 261 ID cpuexc_tskid; /* CPU ä¾å¤ãèµ·ãããã¿ã¹ã¯ã®ID */219 * CPU例外ハンドラ 220 */ 221 ID cpuexc_tskid; /* CPU例外を起こしたタスクのID */ 262 222 263 223 #ifdef CPUEXC1 … … 298 258 299 259 /* 300 * å¨æãã³ãã© 301 * 302 * HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå 303 度ã®ã¬ãã£ãã¥ã¼ 304 * ãå転ãããï¼ 260 * 周期ハンドラ 261 * 262 * HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー 263 * を回転させる. 305 264 */ 306 265 void cyclic_handler(intptr_t exinf) … … 312 271 313 272 /* 314 * ã¢ã©ã¼ã ãã³ãã© 315 * 316 * HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå 317 度ã®ã¬ãã£ãã¥ã¼ 318 * ãå転ãããï¼ 273 * アラームハンドラ 274 * 275 * HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー 276 * を回転させる. 319 277 */ 320 278 void alarm_handler(intptr_t exinf) … … 326 284 327 285 /* 328 * ä¾å¤å¦çã¿ã¹ã¯286 * 例外処理タスク 329 287 */ 330 288 void exc_task(intptr_t exinf) … … 334 292 335 293 /* 336 * ã¡ã¤ã³ã¿ã¹ã¯294 * メインタスク 337 295 */ 338 296 void main_task(intptr_t exinf) … … 357 315 358 316 /* 359 * ã·ãªã¢ã«ãã¼ãã®åæå317 * シリアルポートの初期化 360 318 * 361 * ã·ã¹ãã ãã°ã¿ã¹ã¯ã¨åãã·ãªã¢ã«ãã¼ãã使ãå ´åãªã©ï¼ã·ãªã¢ã«362 * ãã¼ãããªã¼ãã³æ¸ã¿ã®å ´åã«ã¯ããã§E_OBJã¨ã©ã¼ã«ãªããï¼æ¯éã¯363 * ãªãï¼319 * システムログタスクと同じシリアルポートを使う場合など,シリアル 320 * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は 321 * ない. 364 322 */ 365 323 ercd = serial_opn_por(TASK_PORTID); … … 372 330 373 331 /* 374 * ã«ã¼ãåæ°ã®è¨å®332 * ループ回数の設定 375 333 * 376 * 並è¡å®è¡ãããã¿ã¹ã¯å 377 ã§ã®ç©ºã«ã¼ãã®åæ°ï¼task_loopï¼ã¯ï¼ç©ºã«ã¼ 378 * ãã®å®è¡æéãç´0.4ç§ã«ãªãããã«è¨å®ããï¼ãã®è¨å®ã®ããã«ï¼ 379 * LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãï¼ãã®åå¾ã§get_timãå¼ã¶ãã¨ã§ 380 * 測å®ãï¼ãã®æ¸¬å®çµæãã空ã«ã¼ãã®å®è¡æéã0.4ç§ã«ãªãã«ã¼ãå 381 * æ°ãæ±ãï¼task_loopã«è¨å®ããï¼ 334 * 並行実行されるタスク内での空ループの回数(task_loop)は,空ルー 335 * プの実行時間が約0.4秒になるように設定する.この設定のために, 336 * LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで 337 * 測定し,その測定結果から空ループの実行時間が0.4秒になるループ回 338 * 数を求め,task_loopに設定する. 382 339 * 383 * LOOP_REFã¯ï¼ããã©ã«ãã§ã¯1,000,000ã«è¨å®ãã¦ãããï¼æ³å®ããã 384 * ãé 385 ãããã»ããµã§ã¯ï¼ãµã³ãã«ããã°ã©ã ã®å®è¡éå§ã«æéããã 386 * ããããã¨ããåé¡ãçããï¼éã«æ³å®ããããéãããã»ããµã§ã¯ï¼ 387 * LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãçããªãï¼task_loopã«è¨å®ããå¤ 388 * ã®èª¤å·®ã大ãããªãã¨ããåé¡ãããï¼ 340 * LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ 341 * り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか 342 * りすぎるという問題を生じる.逆に想定したより速いプロセッサでは, 343 * LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値 344 * の誤差が大きくなるという問題がある. 389 345 * 390 * ããã§ï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼target_test.hã§ï¼LOOP_REFãé©391 * åãªå¤ã«å®ç¾©ããã®ãæã¾ããï¼346 * そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適 347 * 切な値に定義するのが望ましい. 392 348 * 393 * ã¾ãï¼task_loopã®å¤ãåºå®ãããå ´åã«ã¯ï¼ãã®å¤ãTASK_LOOPã«ã394 * ã¯ãå®ç¾©ããï¼TASK_LOOPããã¯ãå®ç¾©ããã¦ããå ´åï¼ä¸è¨ã®æ¸¬å®ã395 * è¡ããã«ï¼TASK_LOOPã«å®ç¾©ãããå¤ã空ã«ã¼ãã®åæ°ã¨ããï¼349 * また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ 350 * クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を 351 * 行わずに,TASK_LOOPに定義された値を空ループの回数とする. 396 352 * 397 * ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ç©ºã«ã¼ãã®å®è¡æéã®1åç®ã®æ¸¬å®ã§ï¼æ¬æ¥ã398 * ããé·ãã«ãªããã®ãããï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼MEASURE_TWICE399 * ããã¯ãå®ç¾©ãããã¨ã§ï¼1åç®ã®æ¸¬å®çµæãæ¨ã¦ã¦ï¼2åç®ã®æ¸¬å®çµæ400 * ã使ãï¼353 * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ 354 * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE 355 * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果 356 * を使う. 401 357 */ 402 358 #ifdef TASK_LOOP … … 420 376 421 377 /* 422 * ã¿ã¹ã¯ã®èµ·å378 * タスクの起動 423 379 */ 424 380 SVC_PERROR(act_tsk(TASK1)); … … 426 382 427 383 /* 428 * ã¡ã¤ã³ã«ã¼ã384 * メインループ 429 385 */ 430 386 do {
Note:
See TracChangeset
for help on using the changeset viewer.