Changeset 389 for azure_iot_hub/trunk/asp3_dcre/kernel/time_event.h
- Timestamp:
- May 22, 2019, 10:03:37 PM (5 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
azure_iot_hub/trunk/asp3_dcre/kernel/time_event.h
- Property svn:keywords deleted
-
Property svn:mime-type
changed from
text/x-chdr
totext/x-chdr;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 責ãããã¨ï¼ 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);
Note:
See TracChangeset
for help on using the changeset viewer.