Changeset 389 for azure_iot_hub/trunk/asp3_dcre/kernel/kernel_check.trb
- 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/kernel_check.trb
-
Property svn:mime-type
changed from
text/x-ruby
totext/x-ruby;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 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹3ã®çæã¹ã¯ãªãã60 # 61 62 # 63 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®44 # コンフィギュレータのパス3の生成スクリプト 45 # 46 47 # 48 # タイムスタンプファイルの指定 64 49 # 65 50 $timeStampFileName = "check.timestamp" 66 51 67 52 # 68 # ãã¼ã¿ã»ã¯ã·ã§ã³ã®LMAããVMAã¸ã®ã³ãã¼53 # データセクションのLMAからVMAへのコピー 69 54 # 70 55 if !$lmaList.nil? … … 86 71 87 72 # 88 # éç¥æ 89 å ±ã®ãã§ãã¯é¢æ° 73 # 通知情報のチェック関数 90 74 # 91 75 $tmax_tskid = $TMIN_TSKID + $cfgData[:CRE_TSK].size - 1 … … 95 79 96 80 def checkNotifyHandler(key, params, objid, exinf, nfyhdr) 97 # ãã©ã¡ã¼ã¿ãå¤æ°ã«æ ¼ç´81 # パラメータを変数に格納 98 82 nfymode = params[:nfymode] 99 83 nfymode1 = nfymode & 0x0f … … 103 87 funcname = "_kernel_nfyhdr_#{params[objid]}" 104 88 105 # éç¥å¦çã®ãã©ã¡ã¼ã¿æ°ã«ããè£æ£å¦ç89 # 通知処理のパラメータ数による補正処理 106 90 if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_SETFLG \ 107 91 || nfymode1 == $TNFY_SNDDTQ 108 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã2ã¤ã®å ´å92 # 通知処理のパラメータが2つの場合 109 93 epar1 = params[:par3] 110 94 epar2 = params[:par4] 111 95 else 112 # éç¥å¦çã®ãã©ã¡ã¼ã¿ã1ã¤ã®å ´å96 # 通知処理のパラメータが1つの場合 113 97 epar1 = params[:par2] 114 98 epar2 = params[:par3] 115 99 end 116 100 117 # ã¿ã¤ã ã¤ãã³ããã³ãã©ã®å 118 é çªå°ã®ãã§ãã¯ï¼»NGKI3693ï¼½ 101 # タイムイベントハンドラの先頭番地のチェック[NGKI3693] 119 102 if nfymode == $TNFY_HANDLER 120 103 tmehdr = nfyhdr … … 129 112 end 130 113 131 # ã¤ãã³ãéç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯114 # イベント通知処理の変数の番地とオブジェクトIDのチェック 132 115 if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_INCVAR 133 # å¤æ°ã®è¨å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¿ã¤ã ã¤ãã³ãã®éç¥116 # 変数の設定/インクリメントによるタイムイベントの通知 134 117 p_var = exinf 135 118 params1 = params.dup 136 119 params1[:p_var] = par1 137 120 138 # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3699][NGKI3897ï¼½121 # 変数の番地のチェック[NGKI3699][NGKI3897] 139 122 if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0 140 123 error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned") … … 144 127 end 145 128 elsif (nfymode1 == $TNFY_ACTTSK || nfymode1 == $TNFY_WUPTSK) 146 # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¿ã¤ã ã¤ãã³ãã®éç¥129 # タスクの起動/起床によるタイムイベントの通知 147 130 tskid = exinf 148 131 params1 = params.dup 149 132 params1[:tskid] = par1 150 133 151 # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½134 # タスクIDのチェック[NGKI3704] 152 135 if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid) 153 136 error_illegal_id("E_ID", params1, :tskid, objid) 154 137 end 155 138 elsif nfymode1 == $TNFY_SIGSEM 156 # ã»ããã©ã®è³æºã®è¿å´ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥139 # セマフォの資源の返却によるタイムイベントの通知 157 140 semid = exinf 158 141 params1 = params.dup 159 142 params1[:semid] = par1 160 143 161 # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½144 # セマフォIDのチェック[NGKI3707] 162 145 if !($TMIN_SEMID <= semid && semid <= $tmax_semid) 163 146 error_illegal_id("E_ID", params1, :semid, objid) 164 147 end 165 148 elsif nfymode1 == $TNFY_SETFLG 166 # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¿ã¤ã ã¤ãã³ãã®éç¥149 # イベントフラグのセットによるタイムイベントの通知 167 150 flgid = exinf 168 151 params1 = params.dup 169 152 params1[:flgid] = par1 170 153 171 # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½154 # イベントフラグIDのチェック[NGKI3710] 172 155 if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid) 173 156 error_illegal_id("E_ID", params1, :flgid, objid) 174 157 end 175 158 elsif nfymode1 == $TNFY_SNDDTQ 176 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ã«ããã¿ã¤ã ã¤ãã³ãã®éç¥159 # データキューへの送信によるタイムイベントの通知 177 160 dtqid = exinf 178 161 params1 = params.dup 179 162 params1[:dtqid] = par1 180 163 181 # ãã¼ã¿ãã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3713ï¼½164 # データキューIDのチェック[NGKI3713] 182 165 if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid) 183 166 error_illegal_id("E_ID", params1, :dtqid, objid) … … 185 168 end 186 169 187 # ã¨ã©ã¼éç¥å¦çã®å¤æ°ã®çªå°ã¨ãªãã¸ã§ã¯ãIDã®ãã§ãã¯170 # エラー通知処理の変数の番地とオブジェクトIDのチェック 188 171 if (nfymode2 == $TENFY_SETVAR || nfymode2 == $TENFY_INCVAR) 189 # å¤æ°ã®è¨å®ï¼ã¤ã³ã¯ãªã¡ã³ãã«ããã¨ã©ã¼ã®éç¥172 # 変数の設定/インクリメントによるエラーの通知 190 173 p_var = PEEK(SYMBOL(funcname + "_p_evar"), $sizeof_intptr_t) 191 174 params1 = params.dup 192 175 params1[:p_var] = epar1 193 176 194 # å¤æ°ã®çªå°ã®ãã§ãã¯ï¼»NGKI3701][NGKI3897ï¼½177 # 変数の番地のチェック[NGKI3701][NGKI3897] 195 178 if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0 196 179 error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned") … … 200 183 end 201 184 elsif nfymode2 == $TENFY_ACTTSK || nfymode2 == $TENFY_WUPTSK 202 # ã¿ã¹ã¯ã®èµ·åï¼èµ·åºã«ããã¨ã©ã¼ã®éç¥185 # タスクの起動/起床によるエラーの通知 203 186 tskid = PEEK(SYMBOL(funcname + "_etskid"), $sizeof_ID) 204 187 params1 = params.dup 205 188 params1[:tskid] = epar1 206 189 207 # ã¿ã¹ã¯IDã®ãã§ãã¯ï¼»NGKI3704ï¼½190 # タスクIDのチェック[NGKI3704] 208 191 if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid) 209 192 error_illegal_id("E_ID", params1, :tskid, objid) 210 193 end 211 194 elsif nfymode2 == $TENFY_SIGSEM 212 # ã»ããã©ã®è³æºã®è¿å´ã«ããã¨ã©ã¼ã®éç¥195 # セマフォの資源の返却によるエラーの通知 213 196 semid = PEEK(SYMBOL(funcname + "_esemid"), $sizeof_ID) 214 197 params1 = params.dup 215 198 params1[:semid] = epar1 216 199 217 # ã»ããã©IDã®ãã§ãã¯ï¼»NGKI3707ï¼½200 # セマフォIDのチェック[NGKI3707] 218 201 if !($TMIN_SEMID <= semid && semid <= $tmax_semid) 219 202 error_illegal_id("E_ID", params1, :semid, objid) 220 203 end 221 204 elsif nfymode2 == $TENFY_SETFLG 222 # ã¤ãã³ããã©ã°ã®ã»ããã«ããã¨ã©ã¼ã®éç¥205 # イベントフラグのセットによるエラーの通知 223 206 flgid = PEEK(SYMBOL(funcname + "_eflgid"), $sizeof_ID) 224 207 params1 = params.dup 225 208 params1[:flgid] = epar1 226 209 227 # ã¤ãã³ããã©ã°IDã®ãã§ãã¯ï¼»NGKI3710ï¼½210 # イベントフラグIDのチェック[NGKI3710] 228 211 if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid) 229 212 error_illegal_id("E_ID", params1, :flgid, objid) 230 213 end 231 214 elsif nfymode2 == $TENFY_SNDDTQ 232 # ãã¼ã¿ãã¥ã¼ã¸ã®éä¿¡ã«ããã¨ã©ã¼ã®éç¥215 # データキューへの送信によるエラーの通知 233 216 dtqid = PEEK(SYMBOL(funcname + "_edtqid"), $sizeof_ID) 234 217 params1 = params.dup 235 218 params1[:dtqid] = epar1 236 219 237 # ãã¼ã¿ãã¥ã¼IDã®ãã§ãã¯ï¼»NGKI3715ï¼½220 # データキューIDのチェック[NGKI3715] 238 221 if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid) 239 222 error_illegal_id("E_ID", params1, :dtqid, objid) … … 243 226 244 227 # 245 # ã¿ã¹ã¯ã«é¢ãããã§ãã¯228 # タスクに関するチェック 246 229 # 247 230 tinib = SYMBOL("_kernel_tinib_table") … … 249 232 task = PEEK(tinib + $offsetof_TINIB_task, $sizeof_TASK) 250 233 251 # ã¿ã¹ã¯ã®å 252 é çªå°ã®ãã§ãã¯ï¼»NGKI1033ï¼½ 234 # タスクの先頭番地のチェック[NGKI1033] 253 235 if (task & ($CHECK_FUNC_ALIGN - 1)) != 0 254 236 error_wrong_id("E_PAR", params, :task, :tskid, "not aligned") … … 258 240 end 259 241 260 # ã¿ã¹ã¯ã®ã¹ã¿ãã¯é åã®å 261 é çªå°ã®ãã§ãã¯ï¼»NGKI1056ï¼½ 242 # タスクのスタック領域の先頭番地のチェック[NGKI1056] 262 243 if $USE_TSKINICTXB 263 244 stk = GetStackTskinictxb(key, params, tinib) … … 276 257 277 258 # 278 # åºå®é·ã¡ã¢ãªãã¼ã«ã«é¢ãããã§ãã¯259 # 固定長メモリプールに関するチェック 279 260 # 280 261 mpfinib = SYMBOL("_kernel_mpfinib_table") … … 282 263 mpf = PEEK(mpfinib + $offsetof_MPFINIB_mpf, $sizeof_void_ptr) 283 264 284 # åºå®é·ã¡ã¢ãªãã¼ã«é åã®å 285 é çªå°ã®ãã§ãã¯ï¼»NGKI2249ï¼½ 265 # 固定長メモリプール領域の先頭番地のチェック[NGKI2249] 286 266 if (mpf & ($CHECK_MPF_ALIGN - 1)) != 0 287 267 error_wrong_id("E_PAR", params, :mpf, :mpfid, "not aligned") … … 295 275 296 276 # 297 # å¨æéç¥ã«é¢ãããã§ãã¯277 # 周期通知に関するチェック 298 278 # 299 279 cycinib = SYMBOL("_kernel_cycinib_table") … … 302 282 nfyhdr = PEEK(cycinib + $offsetof_CYCINIB_nfyhdr, $sizeof_NFYHDR) 303 283 304 # éç¥æ 305 å ±ã®ãã§ã㯠284 # 通知情報のチェック 306 285 checkNotifyHandler(key, params, :cycid, exinf, nfyhdr) 307 286 … … 310 289 311 290 # 312 # ã¢ã©ã¼ã éç¥ã«é¢ãããã§ãã¯291 # アラーム通知に関するチェック 313 292 # 314 293 alminib = SYMBOL("_kernel_alminib_table") … … 317 296 nfyhdr = PEEK(alminib + $offsetof_ALMINIB_nfyhdr, $sizeof_NFYHDR) 318 297 319 # éç¥æ 320 å ±ã®ãã§ã㯠298 # 通知情報のチェック 321 299 checkNotifyHandler(key, params, :almid, exinf, nfyhdr) 322 300 … … 325 303 326 304 # 327 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã«é¢ãããã§ãã¯305 # 割込みサービスルーチンに関するチェック 328 306 # 329 307 isrinib = SYMBOL("_kernel_isrinib_table") … … 331 309 isr = PEEK(isrinib + $offsetof_ISRINIB_isr, $sizeof_ISR) 332 310 333 # å²è¾¼ã¿ãµã¼ãã¹ã«ã¼ãã³ã®å 334 é çªå°ã®ãã§ãã¯ï¼»NGKI3004ï¼½ 311 # 割込みサービスルーチンの先頭番地のチェック[NGKI3004] 335 312 if (isr & ($CHECK_FUNC_ALIGN - 1)) != 0 336 313 error_wrong_id("E_PAR", params, :isr, :isrid, "not aligned") … … 344 321 345 322 # 346 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã«é¢ãããã§ãã¯323 # 非タスクコンテキスト用のスタック領域に関するチェック 347 324 # 348 325 istkAddr = SYMBOL("_kernel_istk") … … 350 327 istk = PEEK(istkAddr, $sizeof_void_ptr) 351 328 352 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é åã®å 353 é çªå°ã®ãã§ãã¯ï¼»NGKI3222ï¼½ 329 # 非タスクコンテキスト用のスタック領域の先頭番地のチェック[NGKI3222] 354 330 if (istk & ($CHECK_STACK_ALIGN - 1)) != 0 355 331 error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "not aligned") … … 361 337 362 338 # 363 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã«é¢ãããã§ãã¯339 # カーネルが割り付けるメモリ領域に関するチェック 364 340 # 365 341 kmmAddr = SYMBOL("_kernel_kmm") … … 367 343 kmm = PEEK(kmmAddr, $sizeof_void_ptr) 368 344 369 # ã«ã¼ãã«ãå²ãä»ããã¡ã¢ãªé åã®å 370 é çªå°ã®ãã§ã㯠345 # カーネルが割り付けるメモリ領域の先頭番地のチェック 371 346 if (kmm & ($CHECK_MB_ALIGN - 1)) != 0 372 347 error_wrong("E_PAR", $cfgData[:DEF_KMM][1], :kmm, "not aligned") -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.