Ignore:
Timestamp:
May 2, 2017, 5:55:20 PM (7 years ago)
Author:
nmir-saito
Message:

Tracのソース閲覧時に文字化けするためmimetypewo

File:
1 edited

Legend:

Unmodified
Added
Removed
  • rubycfg_ssp/trunk/task.trb

    • Property svn:mime-type set to text/plain; charset=utf-8
    r284 r285  
    1111#              Nagoya Municipal Industrial Research Institute, JAPAN
    1212#
    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#   の責任を負わない.
    5641#
    5742#   $Id: task.trb 668 2016-03-03 13:57:53Z ertl-hiro $
     
    5944
    6045#
    61 #               ã‚¿ã‚¹ã‚¯ç®¡ç†ãƒ¢ã‚¸ãƒ¥ãƒ¼ãƒ«ã®ç”Ÿæˆã‚¹ã‚¯ãƒªãƒ—ト
     46#               タスク管理モジュールの生成スクリプト
    6247#
    6348
     
    7358  end
    7459
    75   # オブジェクトのID番号のマクロ定義の生成
     60  # オブジェクトのID番号のマクロ定義の生成
    7661  def generateIdMacro()
    77     # タスクIDを起動優å
    78 ˆåº¦(atskpri)の高い順に reallocate_atskpri へ割り当てて定義を kernel_cfg.h へ出力
     62    # タスクIDを起動優先度(atskpri)の高い順に reallocate_atskpri へ割り当てて定義を kernel_cfg.h へ出力
    7963
    8064    ($cfgData[:CRE_TSK].sort_by {|e| e[1][:atskpri].val}).each.with_index(1) do |e, index|
     
    8367      $kernelCfgH.add("#define #{e[1][:tskid].str} #{index}")
    8468
    85       # DEF_EPR で定義されていないタスクの実行時優å
    86 ˆåº¦ã‚’起動優å
    87 ˆåº¦ã«è¨­å®šã™ã‚‹
     69      # DEF_EPR で定義されていないタスクの実行時優先度を起動優先度に設定する
    8870      epri = $cfgData[:DEF_EPR].find {|i| i[1][:tskid].val == e[1][:tskid].val}
    8971      if epri
     
    9880
    9981  #
    100   #  指定したタスクに対するスタック使用量の最大を計算
    101   #    引数:tskid:タスクID(å†
    102 éƒ¨è¡¨ç¾ï¼Žèµ·å‹•æ™‚優å
    103 ˆåº¦ã®å†
    104 éƒ¨è¡¨ç¾ã«ç­‰ã—い)
    105   #    返値:当該タスクに足しするスタック使用量の最大値.
    106   #          この値は,当該タスクの実行開始から終了までの間に
    107   #          そのタスクに対するプリエンプトを考æ
    108 ®ã—てスタック使用量を
    109   #          計算した場合に,可能性のある組み合わせの中で最大となる値を返す.
     82  #  指定したタスクに対するスタック使用量の最大を計算
     83  #    引数:tskid:タスクID(内部表現.起動時優先度の内部表現に等しい)
     84  #    返値:当該タスクに足しするスタック使用量の最大値.
     85  #          この値は,当該タスクの実行開始から終了までの間に
     86  #          そのタスクに対するプリエンプトを考慮してスタック使用量を
     87  #          計算した場合に,可能性のある組み合わせの中で最大となる値を返す.
    11088  #
    11189  def calc_stksz(tskid, nest_level=1)
     
    11896
    11997    if @stacksize_of_tasks[tskid]
    120       # 計算が既に完了している場合,計算をスキップする
     98      # 計算が既に完了している場合,計算をスキップする
    12199      $kernelCfgC.add(" * " + ("\t" * nest_level) + "SKIP(max_stksz[#{taskEntry[:tskid].str}] = #{@stacksize_of_tasks[tskid]})")
    122100      stksz = @stacksize_of_tasks[tskid]
    123101    else
    124       # 完了していない場合
     102      # 完了していない場合
    125103      $kernelCfgC.append(" * " + ("\t" * nest_level) + "Task list with higher priority than #{taskEntry[:tskid].str} = ")
    126104      @higher_pri_tsklist[tskid].each.with_index do |id, index|
     
    130108      $kernelCfgC.add()
    131109
    132       # 変数の初期化
     110      # 変数の初期化
    133111      higher_pri_maxstksz = 0
    134112
    135       # 当該タスクID の実行時優å
    136 ˆåº¦ã‚ˆã‚Šé«˜ã„起動優å
    137 ˆåº¦ã‚’持つタスクが存在する場合
     113      # 当該タスクID の実行時優先度より高い起動優先度を持つタスクが存在する場合
    138114      if @higher_pri_tsklist[tskid].size > 0
    139         # それぞれの高優å
    140 ˆåº¦ã‚¿ã‚¹ã‚¯ã«å¯¾ã—,スタック計算を実行する
     115        # それぞれの高優先度タスクに対し,スタック計算を実行する
    141116        @higher_pri_tsklist[tskid].each do |id|
    142117          calculated_stack_size = calc_stksz(id, nest_level+1)
    143           # 最もサイズが大きいものだけを覚えておく
     118          # 最もサイズが大きいものだけを覚えておく
    144119          if higher_pri_maxstksz < calculated_stack_size
    145120            higher_pri_maxstksz = calculated_stack_size
     
    150125      $kernelCfgC.add(" * " + ("\t" * nest_level) + "higher_pri_maxstksz[#{taskEntry[:tskid].str}] = #{higher_pri_maxstksz}")
    151126
    152       # 高優å
    153 ˆåº¦ã‚¿ã‚¹ã‚¯ã®ã‚¹ã‚¿ãƒƒã‚¯ä½¿ç”¨é‡ã«ï¼Œå½“該タスクの使用量を加算する
     127      # 高優先度タスクのスタック使用量に,当該タスクの使用量を加算する
    154128      stksz = higher_pri_maxstksz + taskEntry[:stksz]
    155129
    156       # 当該タスクIDに対して計算済みであることを記録
     130      # 当該タスクIDに対して計算済みであることを記録
    157131      @stacksize_of_tasks[tskid] = stksz
    158132      $kernelCfgC.add(" * " + ("\t" * nest_level) + "DONE(stksz[#{taskEntry[:tskid].str}] = #{stksz})")
    159133    end
    160134
    161     # 見積もりの最大を返す
     135    # 見積もりの最大を返す
    162136    return stksz
    163137  end
    164138
    165   # 事前のチェック
     139  # 事前のチェック
    166140  def prepare()
    167141
    168142    $cfgData[@api].sort.each do |key, params|
    169143
    170       # tskatrが無効(E_RSATR)
    171       #(TA_ACT,TA_RSTR,TA_NULL,TARGET_TSKATR以外のビットがセットされている場合)
     144      # tskatrが無効(E_RSATR)
     145      #(TA_ACT,TA_RSTR,TA_NULL,TARGET_TSKATR以外のビットがセットされている場合)
    172146      if (params[:tskatr] & ~($TA_ACT|$TA_RSTR|$TARGET_TSKATR)) != 0
    173147        error_illegal_id("E_RSATR", params, :tskatr, :tskid)
    174148      end
    175149
    176       # (TMIN_TPRI <= atskpri && atskpri <= TMAX_TPRI)でない場合
     150      # (TMIN_TPRI <= atskpri && atskpri <= TMAX_TPRI)でない場合
    177151      if !($TMIN_TPRI <= params[:atskpri] && params[:atskpri] <= $TMAX_TPRI)
    178152        error_illegal_id("E_PAR", params, :atskpri, :tskid)
    179153      end
    180154
    181       # atskpri が重複する場合 (E_PAR)
     155      # atskpri が重複する場合 (E_PAR)
    182156      @tsk_apri_list.each do |id|
    183157        if (params[:tskid].val != id) && (params[:atskpri] == $cfgData[@api][id][:atskpri])
     
    186160      end
    187161
    188       # 実行時優å
    189 ˆåº¦
     162      # 実行時優先度
    190163      if $cfgData[:DEF_EPR][params[:tskid].val]
    191         # exepri は TMIN_TPRI 以上 かつ TMAX_TPRI 以下(E_PAR)
     164        # exepri は TMIN_TPRI 以上 かつ TMAX_TPRI 以下(E_PAR)
    192165        exepri = $cfgData[:DEF_EPR][params[:tskid].val][:exepri]
    193166        if $TMIN_TPRI > exepri || $TMAX_TPRI < exepri
     
    196169        end
    197170
    198         # exepri は atskpri 以下の値をもつ(優å
    199 ˆåº¦ãŒé«˜ã„) (E_ILUSE)
     171        # exepri は atskpri 以下の値をもつ(優先度が高い) (E_ILUSE)
    200172        if exepri > params[:atskpri]
    201173          $defepr_success = false
     
    204176      end
    205177
    206       # stkszがターゲット定義の最小値(TARGET_MIN_STKSZ,未定義の場合は1)
    207       # よりも小さい場合
     178      # stkszがターゲット定義の最小値(TARGET_MIN_STKSZ,未定義の場合は1)
     179      # よりも小さい場合
    208180      if params[:stksz] < $TARGET_MIN_STKSZ
    209181        error_ercd("E_PAR", params, "stksz is too small.")
    210182      end
    211183
    212       # スタックのå
    213 ˆé ­ç•ªåœ°(stk)
    214       # å
    215 ¨ã¦ã®å‡¦ç†å˜ä½ã®ã‚¹ã‚¿ãƒƒã‚¯ã¯å
    216 ±æœ‰ã•ã‚Œã‚‹ï¼Ž
    217       # そのため,スタックサイズに関するチェックは
    218       # å
    219 ±æœ‰ã‚¹ã‚¿ãƒƒã‚¯è¨­å®šã®ã¨ã“ろでまとめて行う.
     184      # スタックの先頭番地(stk)
     185      # 全ての処理単位のスタックは共有される.
     186      # そのため,スタックサイズに関するチェックは
     187      # 共有スタック設定のところでまとめて行う.
    220188      if params[:stk] != "NULL"
    221189        error_ercd("E_PAR", params, "stk must be NULL.")
     
    224192  end
    225193
    226   # データ構造の生成
     194  # データ構造の生成
    227195  def generateData()
    228196
    229     # 事前準備(エラーチェック,メモリ領域の生成)
     197    # 事前準備(エラーチェック,メモリ領域の生成)
    230198    prepare()
    231199
    232200    #
    233     # オブジェクト初期化ブロックの生成
     201    # オブジェクト初期化ブロックの生成
    234202    #
    235203    init_rdypmap = 0
    236204
    237     # タスク属性(tskatr)
     205    # タスク属性(tskatr)
    238206    $kernelCfgC.append("const ATR\t_kernel_tinib_tskatr[TNUM_TSKID] = {")
    239207    @tsk_apri_list.each.with_index do |id, index|
     
    249217    $kernelCfgC.add("const uint_t\t_kernel_init_rdypmap = #{init_rdypmap}U;")
    250218
    251     # 拡張æƒ
    252 å ±(exinf)
     219    # 拡張情報(exinf)
    253220    $kernelCfgC.append("const intptr_t\t_kernel_tinib_exinf[TNUM_TSKID] = {")
    254221    @tsk_apri_list.each.with_index do |id, index|
     
    259226    $kernelCfgC.add("};")
    260227
    261     # 起動番地(task)
     228    # 起動番地(task)
    262229    $kernelCfgC.append("const TASK\t_kernel_tinib_task[TNUM_TSKID] = {")
    263230    @tsk_apri_list.each.with_index do |id, index|
     
    268235    $kernelCfgC.add("};")
    269236
    270     # 実行時優å
    271 ˆåº¦(etskpri)
     237    # 実行時優先度(etskpri)
    272238    $kernelCfgC.append("const uint_t\t_kernel_tinib_epriority[TNUM_TSKID] = {")
    273239    @tsk_apri_list.each.with_index do |id, index|
     
    290256
    291257    #
    292     # 優å
    293 ˆåº¦å‰²ã‚Šå½“て結果を出力
     258    # 優先度割り当て結果を出力
    294259    #
    295260    $kernelCfgC.add("/*")
     
    302267
    303268    #
    304     #  タスクの最大スタック使用量の計算
     269    #  タスクの最大スタック使用量の計算
    305270    #
    306271   
    307     # 木構造のデータ作成
     272    # 木構造のデータ作成
    308273    $root_apri = []
    309274    (@reallocate_atskpri.sort_by {|id| id[1]}).reverse_each do |id|
    310       # 各タスク毎に,その実行時優å
    311 ˆåº¦ã‚ˆã‚Šã‚‚高い起動時優å
    312 ˆåº¦ã‚’もつタスクのリストを作る
    313       # それはプリエンプトされる可能性のあるタスクのリストとなる.
     275      # 各タスク毎に,その実行時優先度よりも高い起動時優先度をもつタスクのリストを作る
     276      # それはプリエンプトされる可能性のあるタスクのリストとなる.
    314277      @higher_pri_tsklist[id[0]] = []
    315278      (@reallocate_atskpri.sort_by {|id| id[1]}).reverse_each do |id2|
     
    320283    end
    321284
    322     # プリエンプトする・される関係を示す木構造の根(root)となるタスクの探索
    323     #   å¯¾è±¡ã‚¿ã‚¹ã‚¯(id)の起動時優å
    324 ˆåº¦(reallocate_atskpri[id]より低い
    325     #   (値としては大きい)起動時優å
    326 ˆåº¦ã‚’もつタスクの higher_pri_tsklist に
    327     #   å¯¾è±¡ã‚¿ã‚¹ã‚¯(id)が含まれなければ,根となる
     285    # プリエンプトする・される関係を示す木構造の根(root)となるタスクの探索
     286    #   対象タスク(id)の起動時優先度(reallocate_atskpri[id]より低い
     287    #   (値としては大きい)起動時優先度をもつタスクの higher_pri_tsklist に
     288    #   対象タスク(id)が含まれなければ,根となる
    328289    (@reallocate_atskpri.sort_by {|id| id[1]}).reverse_each do |id|
    329290      $is_root = true
     
    341302
    342303    #
    343     #  出力開始
     304    #  出力開始
    344305    #
    345306    $kernelCfgC.add("/* \n * Task Stack Size Estimation:")
    346307
    347     # 根となるタスクに対し,その最大タスク使用量を計算し,リストへ追加する
     308    # 根となるタスクに対し,その最大タスク使用量を計算し,リストへ追加する
    348309    $tstksz = 0
    349310    $stksz_estimated = []
     
    352313    end
    353314
    354     # タスクのスタック使用量の最大値を決定
    355     # リスト中の要素の最大値がタスクの最大スタック使用量となる.
     315    # タスクのスタック使用量の最大値を決定
     316    # リスト中の要素の最大値がタスクの最大スタック使用量となる.
    356317    $tstksz = 0
    357318    $stksz_estimated.each do |size|
     
    361322    end
    362323
    363     # 確認
     324    # 確認
    364325    $kernelCfgC.add2(<<EOS)
    365326 * List of Estimated Total Stack Sizes of Tasks = #{$stksz_estimated}
     
    370331
    371332    #
    372     #  優å
    373 ˆåº¦å‰²ã‚Šå½“て結果を標準出力へ表示
     333    #  優先度割り当て結果を標準出力へ表示
    374334    #
    375335    puts <<~EOS
     
    387347
    388348#
    389 #  タスク管理に関するæƒ
    390 å ±ã®ç”Ÿæˆ
    391 #
    392 
    393 # 実行時優å
    394 ˆåº¦ã®ã‚³ãƒ³ãƒ•ã‚£ã‚®ãƒ¥ãƒ¬ãƒ¼ã‚·ãƒ§ãƒ³ã«æˆåŠŸã—たかどうか
     349#  タスク管理に関する情報の生成
     350#
     351
     352# 実行時優先度のコンフィギュレーションに成功したかどうか
    395353$defepr_success = true
    396354
Note: See TracChangeset for help on using the changeset viewer.