Changeset 389 for azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/sample/tSample2.c
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc;charset=UTF-8
r388 r389 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' : 対象ã¿ã¹ã¯ãcTask_activateã«ããèµ·åããï¼ 100 * 'A' : 対象ã¿ã¹ã¯ã«å¯¾ããèµ·åè¦æ±ãcTask_cancelActivateã«ãããã£ã³ã»ã«ããï¼ 101 * 'e' : 対象ã¿ã¹ã¯ã«exitTaskãå¼ã³åºããï¼çµäºãããï¼ 102 * 't' : 対象ã¿ã¹ã¯ãcTask_terminateã«ããå¼·å¶çµäºããï¼ 103 * '>' : 対象ã¿ã¹ã¯ã®åªå 104 度ãHIGH_PRIORITYã«ããï¼ 105 * '=' : 対象ã¿ã¹ã¯ã®åªå 106 度ãMID_PRIORITYã«ããï¼ 107 * '<' : 対象ã¿ã¹ã¯ã®åªå 108 度ãLOW_PRIORITYã«ããï¼ 109 * 'G' : 対象ã¿ã¹ã¯ã®åªå 110 度ãcTask_getPriorityã§èªã¿åºãï¼ 111 * 's' : 対象ã¿ã¹ã¯ã«sleepãå¼ã³åºããï¼èµ·åºå¾ 112 ã¡ã«ãããï¼ 113 * 'S' : 対象ã¿ã¹ã¯ã«sleepTimeout10ç§)ãå¼ã³åºããï¼èµ·åºå¾ 114 ã¡ã«ãããï¼ 115 * 'w' : 対象ã¿ã¹ã¯ãcTask_wakeupã«ããèµ·åºããï¼ 116 * 'W' : 対象ã¿ã¹ã¯ã«å¯¾ããèµ·åºè¦æ±ãcTask_cancelWakeupã«ãããã£ã³ã»ã«ããï¼ 117 * 'l' : 対象ã¿ã¹ã¯ãcTask_releaseWaitã«ããå¼·å¶çã«å¾ 118 ã¡è§£é¤ã«ããï¼ 119 * 'u' : 対象ã¿ã¹ã¯ãcTask_suspendã«ããå¼·å¶å¾ 120 ã¡ç¶æ 121 ã«ããï¼ 122 * 'm' : 対象ã¿ã¹ã¯ã®å¼·å¶å¾ 123 ã¡ç¶æ 124 ãcTask_resumeã«ãã解é¤ããï¼ 125 * 'd' : 対象ã¿ã¹ã¯ã«delay(10ç§)ãå¼ã³åºããï¼æéçµéå¾ 126 ã¡ã«ãããï¼ 127 * 'x' : 対象ã¿ã¹ã¯ã«raiseTerminateã«ããçµäºè¦æ±ããï¼ 128 * 'y' : 対象ã¿ã¹ã¯ã«disableTerminateãå¼ã³åºããï¼ã¿ã¹ã¯çµäºãç¦æ¢ããï¼ 129 * 'Y' : 対象ã¿ã¹ã¯ã«enableTerminateãå¼ã³åºããï¼ã¿ã¹ã¯çµäºã許å¯ããï¼ 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 * 'V' : fetchHighResolutionTimerã§é«å解è½ã¿ã¤ãã2åèªãï¼ 142 * 'v' : çºè¡ããã·ã¹ãã ã³ã¼ã«ã表示ããï¼ããã©ã«ãï¼ï¼ 143 * 'q' : çºè¡ããã·ã¹ãã ã³ã¼ã«ã表示ããªãï¼ 144 * å¼ã³å£é¢æ° #_TCPF_# 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' : 対象タスクをcTask_activateにより起動する. 75 * 'A' : 対象タスクに対する起動要求をcTask_cancelActivateによりキャンセルする. 76 * 'e' : 対象タスクにexitTaskを呼び出させ,終了させる. 77 * 't' : 対象タスクをcTask_terminateにより強制終了する. 78 * '>' : 対象タスクの優先度をHIGH_PRIORITYにする. 79 * '=' : 対象タスクの優先度をMID_PRIORITYにする. 80 * '<' : 対象タスクの優先度をLOW_PRIORITYにする. 81 * 'G' : 対象タスクの優先度をcTask_getPriorityで読み出す. 82 * 's' : 対象タスクにsleepを呼び出させ,起床待ちにさせる. 83 * 'S' : 対象タスクにsleepTimeout10秒)を呼び出させ,起床待ちにさせる. 84 * 'w' : 対象タスクをcTask_wakeupにより起床する. 85 * 'W' : 対象タスクに対する起床要求をcTask_cancelWakeupによりキャンセルする. 86 * 'l' : 対象タスクをcTask_releaseWaitにより強制的に待ち解除にする. 87 * 'u' : 対象タスクをcTask_suspendにより強制待ち状態にする. 88 * 'm' : 対象タスクの強制待ち状態をcTask_resumeにより解除する. 89 * 'd' : 対象タスクにdelay(10秒)を呼び出させ,時間経過待ちにさせる. 90 * 'x' : 対象タスクにraiseTerminateにより終了要求する. 91 * 'y' : 対象タスクにdisableTerminateを呼び出させ,タスク終了を禁止する. 92 * 'Y' : 対象タスクにenableTerminateを呼び出させ,タスク終了を許可する. 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 * 'V' : fetchHighResolutionTimerで高分解能タイマを2回読む. 103 * 'v' : 発行したシステムコールを表示する(デフォルト). 104 * 'q' : 発行したシステムコールを表示しない. 105 * 呼び口関数 #_TCPF_# 145 106 * require port: signature:sKernel context:task 146 107 * ER getExtendedInformation( intptr_t* p_exinf ); … … 246 207 247 208 /* 248 * ãµã¼ãã¹ã³ã¼ã«ã®ã¨ã©ã¼ã®ãã°åºå209 * サービスコールのエラーのログ出力 249 210 */ 250 211 Inline void … … 259 220 260 221 /* 261 * 並è¡å®è¡ãããã¿ã¹ã¯ã¸ã®ã¡ãã»ã¼ã¸é å222 * 並行実行されるタスクへのメッセージ領域 262 223 */ 263 224 char message[3]; 264 225 265 226 /* 266 * ã«ã¼ãåæ° 267 */ 268 ulong_t task_loop; /* ã¿ã¹ã¯å 269 ã§ã®ã«ã¼ãåæ° */ 270 271 /* 272 * 並è¡å®è¡ãããã¿ã¹ã¯ 227 * ループ回数 228 */ 229 ulong_t task_loop; /* タスク内でのループ回数 */ 230 231 /* 232 * 並行実行されるタスク 273 233 */ 274 234 void eSampleTask_main(int_t subscript) … … 330 290 331 291 /* 332 * CPU ä¾å¤ãã³ãã©333 */ 334 335 ID cpuexc_tskid; /* CPU ä¾å¤ãèµ·ãããã¿ã¹ã¯ã®ID */292 * CPU例外ハンドラ 293 */ 294 295 ID cpuexc_tskid; /* CPU例外を起こしたタスクのID */ 336 296 337 297 #ifdef CPUEXC1 … … 373 333 374 334 /* 375 * å¨æãã³ãã© 376 * 377 * HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå 378 度ã®ã¬ãã£ãã¥ã¼ 379 * ãå転ãããï¼ 335 * 周期ハンドラ 336 * 337 * HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー 338 * を回転させる. 380 339 */ 381 340 /* #[<ENTRY_FUNC>]# eiCyclicHandler_main … … 393 352 394 353 /* 395 * ã¢ã©ã¼ã ãã³ãã© 396 * 397 * HIGH_PRIORITYï¼MID_PRIORITYï¼LOW_PRIORITY ã®ååªå 398 度ã®ã¬ãã£ãã¥ã¼ 399 * ãå転ãããï¼ 354 * アラームハンドラ 355 * 356 * HIGH_PRIORITY,MID_PRIORITY,LOW_PRIORITY の各優先度のレディキュー 357 * を回転させる. 400 358 */ 401 359 /* #[<ENTRY_FUNC>]# eiAlarmHandler_main … … 412 370 } 413 371 /* 414 * ä¾å¤å¦çã¿ã¹ã¯372 * 例外処理タスク 415 373 */ 416 374 /* #[<ENTRY_FUNC>]# eExceptionTask_main … … 424 382 } 425 383 /* 426 * ã¡ã¤ã³ã¿ã¹ã¯427 */ 428 /* å±æ§ã®è¨å®*//* #[<ENTRY_FUNC>]# eMainTask_main384 * メインタスク 385 */ 386 /* 属性の設定 *//* #[<ENTRY_FUNC>]# eMainTask_main 429 387 * name: eMainTask_main 430 388 * global_name: tSample2_eMainTask_main … … 447 405 } else { 448 406 /* 449 * ã·ãªã¢ã«åºåãã§ããªãå ´åããã°ã¡ãã»ã¼ã¸ãå 450 ¨ã¦ 451 * ä½ã¬ãã«åºåã«ããåºåããã 407 * シリアル出力ができない場合、ログメッセージを全て 408 * 低レベル出力により出力する。 452 409 */ 453 410 SVC_PERROR(cSysLog_mask(LOG_UPTO(LOG_INFO), LOG_UPTO(LOG_DEBUG))); … … 456 413 457 414 /* 458 * ã·ãªã¢ã«ãã¼ãã®åæå415 * シリアルポートの初期化 459 416 * 460 * ã·ã¹ãã ãã°ã¿ã¹ã¯ã¨åãã·ãªã¢ã«ãã¼ãã使ãå ´åãªã©ï¼ã·ãªã¢ã«461 * ãã¼ãããªã¼ãã³æ¸ã¿ã®å ´åã«ã¯ããã§E_OBJã¨ã©ã¼ã«ãªããï¼æ¯éã¯462 * ãªãï¼417 * システムログタスクと同じシリアルポートを使う場合など,シリアル 418 * ポートがオープン済みの場合にはここでE_OBJエラーになるが,支障は 419 * ない. 463 420 */ 464 421 … … 473 430 474 431 /* 475 * ã«ã¼ãåæ°ã®è¨å®432 * ループ回数の設定 476 433 * 477 * 並è¡å®è¡ãããã¿ã¹ã¯å 478 ã§ã®ç©ºã«ã¼ãã®åæ°ï¼task_loopï¼ã¯ï¼ç©ºã«ã¼ 479 * ãã®å®è¡æéãç´0.4ç§ã«ãªãããã«è¨å®ããï¼ãã®è¨å®ã®ããã«ï¼ 480 * LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãï¼ãã®åå¾ã§get_timãå¼ã¶ãã¨ã§ 481 * 測å®ãï¼ãã®æ¸¬å®çµæãã空ã«ã¼ãã®å®è¡æéã0.4ç§ã«ãªãã«ã¼ãå 482 * æ°ãæ±ãï¼task_loopã«è¨å®ããï¼ 434 * 並行実行されるタスク内での空ループの回数(task_loop)は,空ルー 435 * プの実行時間が約0.4秒になるように設定する.この設定のために, 436 * LOOP_REF回の空ループの実行時間を,その前後でget_timを呼ぶことで 437 * 測定し,その測定結果から空ループの実行時間が0.4秒になるループ回 438 * 数を求め,task_loopに設定する. 483 439 * 484 * LOOP_REFã¯ï¼ããã©ã«ãã§ã¯1,000,000ã«è¨å®ãã¦ãããï¼æ³å®ããã 485 * ãé 486 ãããã»ããµã§ã¯ï¼ãµã³ãã«ããã°ã©ã ã®å®è¡éå§ã«æéããã 487 * ããããã¨ããåé¡ãçããï¼éã«æ³å®ããããéãããã»ããµã§ã¯ï¼ 488 * LOOP_REFåã®ç©ºã«ã¼ãã®å®è¡æéãçããªãï¼task_loopã«è¨å®ããå¤ 489 * ã®èª¤å·®ã大ãããªãã¨ããåé¡ãããï¼ 440 * LOOP_REFは,デフォルトでは1,000,000に設定しているが,想定したよ 441 * り遅いプロセッサでは,サンプルプログラムの実行開始に時間がかか 442 * りすぎるという問題を生じる.逆に想定したより速いプロセッサでは, 443 * LOOP_REF回の空ループの実行時間が短くなり,task_loopに設定する値 444 * の誤差が大きくなるという問題がある. 490 445 * 491 * ããã§ï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼target_test.hã§ï¼LOOP_REFãé©492 * åãªå¤ã«å®ç¾©ããã®ãæã¾ããï¼446 * そこで,そのようなターゲットでは,target_test.hで,LOOP_REFを適 447 * 切な値に定義するのが望ましい. 493 448 * 494 * ã¾ãï¼task_loopã®å¤ãåºå®ãããå ´åã«ã¯ï¼ãã®å¤ãTASK_LOOPã«ã495 * ã¯ãå®ç¾©ããï¼TASK_LOOPããã¯ãå®ç¾©ããã¦ããå ´åï¼ä¸è¨ã®æ¸¬å®ã496 * è¡ããã«ï¼TASK_LOOPã«å®ç¾©ãããå¤ã空ã«ã¼ãã®åæ°ã¨ããï¼449 * また,task_loopの値を固定したい場合には,その値をTASK_LOOPにマ 450 * クロ定義する.TASK_LOOPがマクロ定義されている場合,上記の測定を 451 * 行わずに,TASK_LOOPに定義された値を空ループの回数とする. 497 452 * 498 * ã¿ã¼ã²ããã«ãã£ã¦ã¯ï¼ç©ºã«ã¼ãã®å®è¡æéã®1åç®ã®æ¸¬å®ã§ï¼æ¬æ¥ã499 * ããé·ãã«ãªããã®ãããï¼ãã®ãããªã¿ã¼ã²ããã§ã¯ï¼MEASURE_TWICE500 * ããã¯ãå®ç¾©ãããã¨ã§ï¼1åç®ã®æ¸¬å®çµæãæ¨ã¦ã¦ï¼2åç®ã®æ¸¬å®çµæ501 * ã使ãï¼453 * ターゲットによっては,空ループの実行時間の1回目の測定で,本来よ 454 * りも長めになるものがある.このようなターゲットでは,MEASURE_TWICE 455 * をマクロ定義することで,1回目の測定結果を捨てて,2回目の測定結果 456 * を使う. 502 457 */ 503 458 #ifdef TASK_LOOP … … 521 476 522 477 /* 523 * ã¿ã¹ã¯ã®èµ·å478 * タスクの起動 524 479 */ 525 480 … … 529 484 530 485 /* 531 * ã¡ã¤ã³ã«ã¼ã486 * メインループ 532 487 */ 533 488 if (is_cSerialPort_joined()) {
Note:
See TracChangeset
for help on using the changeset viewer.