Changeset 285 for rubycfg_ssp/trunk/kernel.trb
- Timestamp:
- May 2, 2017, 5:55:20 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
rubycfg_ssp/trunk/kernel.trb
-
Property svn:mime-type
set to
text/plain; charset=utf-8
r284 r285 11 11 # Nagoya Municipal Industrial Research Institute, JAPAN 12 12 # 13 # ä¸è¨èä½æ¨©è 14 ã¯ï¼ä»¥ä¸ã®(1)ã(4)ã®æ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ 15 # ã¢ï¼æ¬ã½ããã¦ã§ã¢ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹ 16 # å¤ã»åé 17 å¸ï¼ä»¥ä¸ï¼å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼ 18 # (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½ 19 # 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼ 20 # ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼ 21 # (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 22 # ç¨ã§ããå½¢ã§åé 23 å¸ããå ´åã«ã¯ï¼åé 24 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨ 25 # è 26 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ 27 # ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 28 # (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿ 29 # ç¨ã§ããªãå½¢ã§åé 30 å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã 31 # ã¨ï¼ 32 # (a) åé 33 å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è 34 ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è 35 # ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼ 36 # (b) åé 37 å¸ã®å½¢æ 38 ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã« 39 # å ±åãããã¨ï¼ 40 # (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ 41 # 害ãããï¼ä¸è¨èä½æ¨©è 42 ããã³TOPPERSããã¸ã§ã¯ããå 43 責ãããã¨ï¼ 44 # ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®ã¦ã¼ã¶ã¾ãã¯ã¨ã³ãã¦ã¼ã¶ããã®ãããªãç 45 # ç±ã«åºã¥ãè«æ±ãããï¼ä¸è¨èä½æ¨©è 46 ããã³TOPPERSããã¸ã§ã¯ãã 47 # å 48 責ãããã¨ï¼ 49 # 50 # æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è 51 ã 52 # ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ç¹å®ã®ä½¿ç¨ç®ç 53 # ã«å¯¾ããé©åæ§ãå«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ 54 # ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ã 55 # ã®è²¬ä»»ãè² ããªãï¼ 13 # 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ 14 # ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改 15 # 変・再配布(以下,利用と呼ぶ)することを無償で許諾する. 16 # (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作 17 # 権表示,この利用条件および下記の無保証規定が,そのままの形でソー 18 # スコード中に含まれていること. 19 # (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使 20 # 用できる形で再配布する場合には,再配布に伴うドキュメント(利用 21 # 者マニュアルなど)に,上記の著作権表示,この利用条件および下記 22 # の無保証規定を掲載すること. 23 # (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使 24 # 用できない形で再配布する場合には,次のいずれかの条件を満たすこ 25 # と. 26 # (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著 27 # 作権表示,この利用条件および下記の無保証規定を掲載すること. 28 # (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに 29 # 報告すること. 30 # (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損 31 # 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること. 32 # また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理 33 # 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを 34 # 免責すること. 35 # 36 # 本ソフトウェアは,無保証で提供されているものである.上記著作権者お 37 # よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的 38 # に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ 39 # アの利用により直接的または間接的に生じたいかなる損害に関しても,そ 40 # の責任を負わない. 56 41 # 57 42 # $Id: kernel.trb 670 2016-03-03 15:08:11Z ertl-hiro $ … … 59 44 60 45 # 61 # ã³ã³ãã£ã®ã¥ã¬ã¼ã¿ã®ãã¹2ã®çæã¹ã¯ãªãã62 # 63 64 # 65 # ã¿ã¤ã ã¹ã¿ã³ããã¡ã¤ã«ã®æå®46 # コンフィギュレータのパス2の生成スクリプト 47 # 48 49 # 50 # タイムスタンプファイルの指定 66 51 # 67 52 $timeStampFileName = "kernel_cfg.timestamp" 68 53 69 54 # 70 # kernel_cfg.hã®å 71 é é¨åã®çæ 55 # kernel_cfg.hの先頭部分の生成 72 56 # 73 57 $kernelCfgH = GenFile.new("kernel_cfg.h") … … 79 63 80 64 # 81 # kernel_cfg.cã®å 82 é é¨åã®çæ 65 # kernel_cfg.cの先頭部分の生成 83 66 # 84 67 $kernelCfgC = GenFile.new("kernel_cfg.c") … … 94 77 95 78 # 96 # ã¤ã³ã¯ã«ã¼ããã£ã¬ã¯ãã£ãï¼#includeï¼79 # インクルードディレクティブ(#include) 97 80 # 98 81 $kernelCfgC.comment_header("Include Directives") … … 103 86 104 87 # 105 # ã¹ã¿ãã¯é åã®ç¢ºä¿é¢æ° 106 # 107 # ã¹ã¿ãã¯é åã®å®ç¾©åã¨ï¼ã¹ã¿ãã¯é åã®ãµã¤ãºè¨è¿°ãé 108 åã§è¿ãï¼ 88 # スタック領域の確保関数 89 # 90 # スタック領域の定義分と,スタック領域のサイズ記述を配列で返す. 109 91 # 110 92 unless defined? AllocStack() 111 93 def AllocStack(stack, size) 112 # 大ããæ¹ã«ä¸¸ãããµã¤ãºã§ç¢ºä¿ãã94 # 大きい方に丸めたサイズで確保する 113 95 $kernelCfgC.add("static STK_T #{stack}[COUNT_STK_T(#{size})];") 114 96 return("ROUND_STK_T(#{size})") … … 117 99 118 100 # 119 # ã«ã¼ãã«ãªãã¸ã§ã¯ãã«é¢ããæ 120 å ±ã®çæï¼ä»®æ³ã¯ã©ã¹ï¼ 101 # カーネルオブジェクトに関する情報の生成(仮想クラス) 121 102 # 122 103 class KernelObject … … 129 110 end 130 111 131 # ãªãã¸ã§ã¯ãã®IDçªå·ã®ãã¯ãå®ç¾©çæ112 # オブジェクトのID番号のマクロ定義生成 132 113 def generateIdMacro() 133 114 $cfgData[@api].sort.each do |key, params| … … 138 119 139 120 def generate() 140 # kernel_cfg.h ã®çæ121 # kernel_cfg.hの生成 141 122 $kernelCfgH.add("#define TNUM_#{@OBJ}ID\t#{$cfgData[@api].size}") 142 123 143 # ãªãã¸ã§ã¯ãã®IDçªå·ã®ãã¯ãå®ç¾©ã®çæ124 # オブジェクトのID番号のマクロ定義の生成 144 125 generateIdMacro() 145 126 146 # ãªãã¸ã§ã¯ãã®IDçªå·ãä¿æããå¤æ°127 # オブジェクトのID番号を保持する変数 147 128 if $USE_EXTERNAL_ID 148 129 $cfgData[@api].sort.each do |key, params| … … 153 134 end 154 135 155 # ãªãã¸ã§ã¯ãIDçªå·ã®æ大å¤136 # オブジェクトID番号の最大値 156 137 $kernelCfgC.add2("const ID _kernel_tmax_#{@obj}id" \ 157 138 " = (TMIN_#{@OBJ}ID + TNUM_#{@OBJ}ID - 1);") 158 139 159 # ãã¼ã¿æ§é ã®çæ140 # データ構造の生成 160 141 if respond_to?(:generateData) 161 142 generateData() … … 163 144 164 145 if $cfgData[@api].size() > 0 165 # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å146 # オブジェクト初期化関数の追加 166 147 $initializeFunctions.push("_kernel_initialize_#{@object}();") 167 148 end … … 170 151 171 152 # 172 # åæ©è½ã¢ã¸ã¥ã¼ã«ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³153 # 各機能モジュールのコンフィギュレーション 173 154 # 174 155 $initializeFunctions = [] … … 182 163 183 164 # 184 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã®ã¹ã¿ãã¯é å165 # 非タスクコンテキスト用のスタック領域 185 166 # 186 167 $kernelCfgC.comment_header("Stack Area for Non-task Context") 187 168 188 # éã¿ã¹ã¯ã³ã³ããã¹ãç¨ã¹ã¿ãã¯é åã®ãµã¤ãº169 # 非タスクコンテキスト用スタック領域のサイズ 189 170 $istksz = 0 190 171 191 # DEF_ICS ã®ã¨ã³ããªãåå¨ãããï¼172 # DEF_ICSのエントリが存在するか? 192 173 if $cfgData[:DEF_ICS].size == 0 193 # ãªãå ´åï¼ãµã¤ãºã¯æ¢å®å¤(DEFAULT_ISTKSZ)ã使ã174 # ない場合,サイズは既定値(DEFAULT_ISTKSZ)を使う 194 175 $kernelCfgC.add2("#define TOPPERS_ISTKSZ DEFAULT_ISTKSZ") 195 176 $istksz = $DEFAULT_ISTKSZ 196 177 else 197 # DEF_ICS ã®ã¨ã³ããªãããå ´å198 199 # éçAPIãDEF_ICSããè¤æ°ããï¼E_OBJï¼178 # DEF_ICS のエントリがある場合 179 180 # 静的API「DEF_ICS」が複数ある(E_OBJ) 200 181 if $cfgData[:DEF_ICS].size > 1 201 182 error("E_OBJ: too many DEF_ICS") … … 204 185 params = $cfgData[:DEF_ICS][1] 205 186 206 # istksz ã« 0 ãæå®ããå ´åï¼E_PARï¼187 # istksz に 0 を指定した場合(E_PAR) 207 188 if params[:istksz] == 0 208 189 error_wrong("E_PAR", params, :istksz, "size is 0") 209 # istk ã¯å¸¸ã« NULL ã§ãã(E_PAR)190 # istk は常に NULL である (E_PAR) 210 191 elsif params[:istk] != "NULL" 211 192 error_wrong("E_PAR", params, :istk, "must be NULL") … … 217 198 218 199 # 219 # å 220 ±æã¹ã¿ãã¯é å 221 # SSPã§ã¯ãã¹ã¦ã®å¦çåä½ã®ã¹ã¿ãã¯ãå 222 ±æããããï¼ 223 # ããã§ã·ã¹ãã å 224 ¨ä½ã®ã¹ã¿ãã¯é åã確ä¿ããï¼ 225 # 226 227 # 228 # å 229 ±æã¹ã¿ãã¯ã®ã³ã³ãã£ã®ã¥ã¬ã¼ã·ã§ã³ã«æåãããã©ãã 230 # DEF_STK å¦çä¸ã«ã¨ã©ã¼ãçºçããå ´åï¼ãã®å¤æ°ã false ã«ãªãï¼ 200 # 共有スタック領域 201 # SSPではすべての処理単位のスタックを共有するため, 202 # ここでシステム全体のスタック領域を確保する. 203 # 204 205 # 206 # 共有スタックのコンフィギュレーションに成功したかどうか 207 # DEF_STK 処理中にエラーが発生した場合,この変数が false になる. 231 208 # 232 209 $defstk_success = true … … 234 211 $kernelCfgC.comment_header("Stack Area for System") 235 212 236 # å 237 ±æã¹ã¿ãã¯ã®ãµã¤ãº 213 # 共有スタックのサイズ 238 214 $stksz = 0 239 215 … … 241 217 stksz_str = "" 242 218 243 # DEF_STK ã®ã¨ã³ããªãåå¨ãããï¼219 # DEF_STK のエントリが存在するか? 244 220 if $cfgData[:DEF_STK].size == 0 245 # (1) DEF_STK ã®ã¨ã³ããªããªãå ´å221 # (1) DEF_STK のエントリがない場合 246 222 stk_str = "_kernel_stack" 247 223 stksz_str = AllocStack(stk_str, "TOPPERS_TSTKSZ+TOPPERS_ISTKSZ") … … 249 225 $stksz = $tstksz + $istksz 250 226 else 251 # (2) DEF_STK ã®ã¨ã³ããªãããå ´å252 253 # éçAPIãDEF_STKããè¤æ°ããï¼E_OBJï¼227 # (2) DEF_STK のエントリがある場合 228 229 # 静的API「DEF_STK」が複数ある(E_OBJ) 254 230 if $cfgData[:DEF_STK].size > 1 255 231 $defstk_success = false … … 259 235 params = $cfgData[:DEF_STK][1] 260 236 261 # DEF_STK ã® stksz 㧠0 ãæå®ããå ´å(E_PAR)237 # DEF_STK の stksz で 0 を指定した場合(E_PAR) 262 238 if params[:stksz] == 0 263 239 $defstk_success = false … … 268 244 269 245 if params[:stk] == "NULL" 270 # stk ã NULL ã®å ´åï¼ã¹ã¿ãã¯é åãèªåå²ä»ã246 # stk が NULL の場合,スタック領域を自動割付け 271 247 stk_str = "_kernel_stack" 272 248 stksz_str = AllocStack(stk_str, "#{$stksz}") 273 249 else 274 # stk ã NULL 以å¤ã®å ´åï¼ã¢ããªå´ã§ã¹ã¿ãã¯é åãç¨æããå ´åï¼275 276 # stksz ãã¿ã¼ã²ããæ¯ã«å®ã¾ãã¢ã©ã¤ã¡ã³ããµã¤ãºã®åæ°ã«ã¢ã©ã¤ã¡ã³ãããã¦ããªãå ´åï¼E_PARï¼250 # stk が NULL 以外の場合(アプリ側でスタック領域を用意する場合) 251 252 # stksz がターゲット毎に定まるアライメントサイズの倍数にアライメントされていない場合(E_PAR) 277 253 if (defined? $CHECK_STKSZ_ALIGN) && (($stksz & ($CHECK_STKSZ_ALIGN - 1)) != 0) 278 254 $defstk_success = false … … 286 262 287 263 # 288 # å 289 ±æã¹ã¿ãã¯ã®ã¹ã¿ãã¯é å 264 # 共有スタックのスタック領域 290 265 # 291 266 $kernelCfgC.add(<<EOS) … … 302 277 303 278 # 304 # åªå 305 度å²ãå½ã¦ããã³ã¹ã¿ãã¯è¨å®ã«é¢ããçµæãæ¨æºåºåã¸è¡¨ç¤º 306 # ãã®éï¼ã¹ã¿ãã¯ãµã¤ãºã®æå®å¤ãå®éã®å²å½ã¦ãµã¤ãºãã大ãããã確èªããï¼ 279 # 優先度割り当ておよびスタック設定に関する結果を標準出力へ表示 280 # その際,スタックサイズの指定値が実際の割当てサイズより大きいかを確認する. 307 281 # 308 282 if $defepr_success && $defstk_success … … 324 298 325 299 # 326 # ã¿ã¤ã ã¤ãã³ã管ç300 # タイムイベント管理 327 301 # 328 302 tnum_tmevt = $cfgData[:CRE_CYC].size + $cfgData[:CRE_ALM].size … … 340 314 341 315 if tnum_tmevt > 0 342 # ãªãã¸ã§ã¯ãåæåé¢æ°ã®è¿½å316 # オブジェクト初期化関数の追加 343 317 $initializeFunctions.unshift("_kernel_initialize_time_event();") 344 318 end 345 319 346 320 # 347 # åã¢ã¸ã¥ã¼ã«ã®åæåé¢æ°321 # 各モジュールの初期化関数 348 322 # 349 323 $kernelCfgC.comment_header("Module Initialization Function") … … 359 333 360 334 # 361 # åæåã«ã¼ãã³æ©è½335 # 初期化ルーチン機能 362 336 # 363 337 $kernelCfgC.comment_header("Initialization Routine") 364 338 365 # ã¨ã©ã¼ãã§ãã¯339 # エラーチェック 366 340 $cfgData[:ATT_INI].each do |key, params| 367 # iniatr ãç¡å¹ã®å ´åï¼E_RSATRï¼368 # ï¼TA_NULLã§ãªãå ´åï¼341 # iniatrが無効の場合(E_RSATR) 342 #(TA_NULLでない場合) 369 343 if (params[:iniatr] != $TA_NULL) 370 344 error_illegal_sym("E_RSATR", params, :iniatr, :inirtn) … … 372 346 end 373 347 374 # åæåã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ348 # 初期化ルーチンの実行関数の生成 375 349 $kernelCfgC.append(<<EOS) 376 350 void … … 385 359 386 360 # 387 # çµäºå¦çã«ã¼ãã³æ©è½361 # 終了処理ルーチン機能 388 362 # 389 363 $kernelCfgC.comment_header("Termination Routine") 390 364 391 # ã¨ã©ã¼ãã§ãã¯365 # エラーチェック 392 366 $cfgData[:ATT_TER].each do |key, params| 393 # teratr ãç¡å¹ã®å ´åï¼E_RSATRï¼394 # ï¼TA_NULLã§ãªãå ´åï¼367 # teratrが無効の場合(E_RSATR) 368 #(TA_NULLでない場合) 395 369 if (params[:teratr] != $TA_NULL) 396 370 error_illegal_sym("E_RSATR", params, :teratr, :terrtn) … … 398 372 end 399 373 400 # çµäºå¦çã«ã¼ãã³ã®å®è¡é¢æ°ã®çæ374 # 終了処理ルーチンの実行関数の生成 401 375 $kernelCfgC.append(<<EOS) 402 376 void … … 411 385 412 386 # 413 # kernel_cfg.h ã®æ«å°¾é¨åã®çæ387 # kernel_cfg.hの末尾部分の生成 414 388 # 415 389 $kernelCfgH.append(<<EOS) -
Property svn:mime-type
set to
Note:
See TracChangeset
for help on using the changeset viewer.