Ignore:
Timestamp:
Jul 3, 2020, 7:19:17 PM (4 years ago)
Author:
coas-nagasima
Message:

ASP3, TINET, mbed を更新

File:
1 edited

Legend:

Unmodified
Added
Removed
  • EcnlProtoTool/trunk/asp3_dcre/kernel/kernel_check.trb

    r321 r429  
    11# -*- coding: utf-8 -*-
    2 # 
     2#
    33#   TOPPERS/ASP Kernel
    44#       Toyohashi Open Platform for Embedded Real-Time Systems/
     
    66#
    77#   Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
    8 #   Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
     8#   Copyright (C) 2015-2019 by Embedded and Real-Time Systems Laboratory
    99#               Graduate School of Information Science, Nagoya Univ., JAPAN
    1010
     
    3838#   の責任を負わない.
    3939#
    40 #   $Id$
     40#   $Id: kernel_check.trb 1167 2019-02-03 17:06:17Z ertl-hiro $
    4141
    4242
     
    4545#
    4646
    47 # 
     47#
    4848#  タイムスタンプファイルの指定
    49 # 
     49#
    5050$timeStampFileName = "check.timestamp"
    5151
     
    5353#  データセクションのLMAからVMAへのコピー
    5454#
    55 if !$lmaList.nil?
     55if defined?($lmaList)
    5656  $lmaList.each do |lma|
    5757    startData = SYMBOL(lma[:START_DATA])
     
    9292    # 通知処理のパラメータが2つの場合
    9393    epar1 = params[:par3]
    94     epar2 = params[:par4]
     94    # epar2 = params[:par4]
    9595  else
    9696    # 通知処理のパラメータが1つの場合
    9797    epar1 = params[:par2]
    98     epar2 = params[:par3]
    99   end
    100 
    101   #     タイムイベントハンドラの先頭番地のチェック[NGKI3693]
     98    # epar2 = params[:par3]
     99  end
     100
     101  # タイムイベントハンドラの先頭番地が,プログラムの先頭番地として正し
     102  # くない場合(E_PAR)[NGKI3693]
    102103  if nfymode == $TNFY_HANDLER
    103104    tmehdr = nfyhdr
     
    112113  end
    113114
    114   #     イベント通知処理の変数の番地とオブジェクトIDのチェック
     115  # イベント通知処理の変数の番地とオブジェクトIDのチェック
    115116  if nfymode1 == $TNFY_SETVAR || nfymode1 == $TNFY_INCVAR
    116117    # 変数の設定/インクリメントによるタイムイベントの通知
     
    119120    params1[:p_var] = par1
    120121
    121     # 変数の番地のチェック[NGKI3699][NGKI3897]
     122    # 通知方法中の変数の番地が,intptr_t型の変数の番地として正しくない
     123    # 場合(E_PAR)[NGKI3699][NGKI3897]
    122124    if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0
    123125      error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned")
     
    132134    params1[:tskid] = par1
    133135
    134     # タスクIDのチェック[NGKI3704]
     136    # 通知方法中のタスクIDが有効範囲外の場合(E_ID)[NGKI3704]
    135137    if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid)
    136138      error_illegal_id("E_ID", params1, :tskid, objid)
     
    142144    params1[:semid] = par1
    143145
    144     # セマフォIDのチェック[NGKI3707]
     146    # 通知方法中のセマフォIDが有効範囲外の場合(E_ID)[NGKI3707]
    145147    if !($TMIN_SEMID <= semid && semid <= $tmax_semid)
    146148      error_illegal_id("E_ID", params1, :semid, objid)
     
    152154    params1[:flgid] = par1
    153155
    154     # イベントフラグIDのチェック[NGKI3710]
     156    # 通知方法中のイベントフラグIDが有効範囲外の場合(E_ID)[NGKI3710]
    155157    if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid)
    156158      error_illegal_id("E_ID", params1, :flgid, objid)
     
    162164    params1[:dtqid] = par1
    163165
    164     # データキューIDのチェック[NGKI3713]
     166    # 通知方法中のデータキューIDが有効範囲外の場合(E_ID)[NGKI3713]
    165167    if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid)
    166168      error_illegal_id("E_ID", params1, :dtqid, objid)
     
    175177    params1[:p_var] = epar1
    176178
    177     # 変数の番地のチェック[NGKI3701][NGKI3897]
     179    # 通知方法中の変数の番地が,intptr_t型の変数の番地として正しくない
     180    # 場合(E_PAR)[NGKI3701][NGKI3897]
    178181    if (p_var & ($CHECK_INTPTR_ALIGN - 1)) != 0
    179182      error_wrong_id("E_PAR", params1, :p_var, objid, "not aligned")
     
    188191    params1[:tskid] = epar1
    189192
    190     # タスクIDのチェック[NGKI3704]
     193    # 通知方法中のタスクIDが有効範囲外の場合(E_ID)[NGKI3704]
    191194    if !($TMIN_TSKID <= tskid && tskid <= $tmax_tskid)
    192195      error_illegal_id("E_ID", params1, :tskid, objid)
     
    198201    params1[:semid] = epar1
    199202
    200     # セマフォIDのチェック[NGKI3707]
     203    # 通知方法中のセマフォIDが有効範囲外の場合(E_ID)[NGKI3707]
    201204    if !($TMIN_SEMID <= semid && semid <= $tmax_semid)
    202205      error_illegal_id("E_ID", params1, :semid, objid)
     
    208211    params1[:flgid] = epar1
    209212
    210     # イベントフラグIDのチェック[NGKI3710]
     213    # 通知方法中のイベントフラグIDが有効範囲外の場合(E_ID)[NGKI3710]
    211214    if !($TMIN_FLGID <= flgid && flgid <= $tmax_flgid)
    212215      error_illegal_id("E_ID", params1, :flgid, objid)
     
    218221    params1[:dtqid] = epar1
    219222
    220     # データキューIDのチェック[NGKI3715]
     223    # 通知方法中のデータキューIDが有効範囲外の場合(E_ID)[NGKI3715]
    221224    if !($TMIN_DTQID <= dtqid && dtqid <= $tmax_dtqid)
    222225      error_illegal_id("E_ID", params1, :dtqid, objid)
     
    225228end
    226229
    227 # 
     230#
    228231#  タスクに関するチェック
    229 # 
     232#
    230233tinib = SYMBOL("_kernel_tinib_table")
    231234$cfgData[:CRE_TSK].sort.each do |key, params|
     235  # taskがプログラムの先頭番地として正しくない場合(E_PAR)[NGKI1033]
    232236  task = PEEK(tinib + $offsetof_TINIB_task, $sizeof_TASK)
    233 
    234   # タスクの先頭番地のチェック[NGKI1033]
    235237  if (task & ($CHECK_FUNC_ALIGN - 1)) != 0
    236238    error_wrong_id("E_PAR", params, :task, :tskid, "not aligned")
     
    240242  end
    241243
    242   # タスクのスタック領域の先頭番地のチェック[NGKI1056]
     244  # stkがターゲット定義の制約に合致しない場合(E_PAR)[NGKI1056]
    243245  if $USE_TSKINICTXB
    244246    stk = GetStackTskinictxb(key, params, tinib)
     
    256258end
    257259
    258 # 
     260#
    259261#  固定長メモリプールに関するチェック
    260 # 
     262#
    261263mpfinib = SYMBOL("_kernel_mpfinib_table")
    262 $cfgData[:CRE_MPF].sort.each do |key, params|
     264$cfgData[:CRE_MPF].sort.each do |_, params|
    263265  mpf = PEEK(mpfinib + $offsetof_MPFINIB_mpf, $sizeof_void_ptr)
    264266
    265   # 固定長メモリプール領域の先頭番地のチェック[NGKI2249]
     267  # mpfがターゲット定義の制約に合致しない場合(E_PAR)[NGKI2249]
    266268  if (mpf & ($CHECK_MPF_ALIGN - 1)) != 0
    267269    error_wrong_id("E_PAR", params, :mpf, :mpfid, "not aligned")
     
    274276end
    275277
    276 # 
     278#
    277279#  周期通知に関するチェック
    278 # 
     280#
    279281cycinib = SYMBOL("_kernel_cycinib_table")
    280282$cfgData[:CRE_CYC].sort.each do |key, params|
     
    282284  nfyhdr = PEEK(cycinib + $offsetof_CYCINIB_nfyhdr, $sizeof_NFYHDR)
    283285
    284   #     通知情報のチェック
     286  # 通知情報のチェック
    285287  checkNotifyHandler(key, params, :cycid, exinf, nfyhdr)
    286288
     
    288290end
    289291
    290 # 
     292#
    291293#  アラーム通知に関するチェック
    292 # 
     294#
    293295alminib = SYMBOL("_kernel_alminib_table")
    294296$cfgData[:CRE_ALM].sort.each do |key, params|
     
    296298  nfyhdr = PEEK(alminib + $offsetof_ALMINIB_nfyhdr, $sizeof_NFYHDR)
    297299
    298   #     通知情報のチェック
     300  # 通知情報のチェック
    299301  checkNotifyHandler(key, params, :almid, exinf, nfyhdr)
    300302
     
    306308#
    307309isrinib = SYMBOL("_kernel_isrinib_table")
    308 $cfgData[:CRE_ISR].sort.each do |key, params|
     310$cfgData[:CRE_ISR].sort.each do |_, params|
    309311  isr = PEEK(isrinib + $offsetof_ISRINIB_isr, $sizeof_ISR)
    310312
    311   # 割込みサービスルーチンの先頭番地のチェック[NGKI3004]
     313  # isrがプログラムの先頭番地として正しくない場合[NGKI3004]
    312314  if (isr & ($CHECK_FUNC_ALIGN - 1)) != 0
    313315    error_wrong_id("E_PAR", params, :isr, :isrid, "not aligned")
     
    320322end
    321323
    322 # 
     324#
    323325#  非タスクコンテキスト用のスタック領域に関するチェック
    324 # 
    325 istkAddr = SYMBOL("_kernel_istk")
    326 if !istkAddr.nil?
    327   istk = PEEK(istkAddr, $sizeof_void_ptr)
    328 
    329   # 非タスクコンテキスト用のスタック領域の先頭番地のチェック[NGKI3222]
     326#
     327if $cfgData[:DEF_ICS].size > 0
     328  params0 = $cfgData[:DEF_ICS][1]
     329  istk = PEEK(SYMBOL("_kernel_istk"), $sizeof_void_ptr)
     330
     331  # istkがターゲット定義の制約に合致しない場合(E_PAR)[NGKI3222]
    330332  if (istk & ($CHECK_STACK_ALIGN - 1)) != 0
    331     error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "not aligned")
     333    error_wrong("E_PAR", params0, :istk, "not aligned")
    332334  end
    333335  if $CHECK_STACK_NONNULL && istk == 0
    334     error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "null")
    335   end
    336 end
    337 
    338 #
    339 #  カーネルが割り付けるメモリ領域に関するチェック
    340 #
    341 kmmAddr = SYMBOL("_kernel_kmm")
    342 if !kmmAddr.nil?
    343   kmm = PEEK(kmmAddr, $sizeof_void_ptr)
    344 
    345   # カーネルが割り付けるメモリ領域の先頭番地のチェック
    346   if (kmm & ($CHECK_MB_ALIGN - 1)) != 0
    347     error_wrong("E_PAR", $cfgData[:DEF_KMM][1], :kmm, "not aligned")
    348   end
    349 end
     336    error_wrong("E_PAR", params0, :istk, "null")
     337  end
     338end
     339
     340#
     341#  カーネルメモリプール領域に関するチェック
     342#
     343if $cfgData[:DEF_MPK].size > 0
     344  params0 = $cfgData[:DEF_MPK][1]
     345  mpk = PEEK(SYMBOL("_kernel_mpk"), $sizeof_void_ptr)
     346
     347  # mpkがターゲット定義の制約に合致しない場合(E_PAR)[NGKI5083]
     348  if (mpk & ($CHECK_MPK_ALIGN - 1)) != 0
     349    error_wrong("E_PAR", params0, :mpk, "not aligned")
     350  end
     351  if $CHECK_MPK_NONNULL && mpk == 0
     352    error_wrong("E_PAR", params0, :mpk, "null")
     353  end
     354end
     355
     356#
     357#  初期化ルーチンに関するチェック
     358#
     359inirtnb = SYMBOL("_kernel_inirtnb_table")
     360$cfgData[:ATT_INI].each do |_, params|
     361  inirtn = PEEK(inirtnb + $offsetof_INIRTNB_inirtn, $sizeof_INIRTN)
     362
     363  # inirtnがプログラムの先頭番地として正しくない場合(E_PAR)[NGKI3243]
     364  if (inirtn & ($CHECK_FUNC_ALIGN - 1)) != 0
     365    error_wrong("E_PAR", params, :inirtn, "not aligned")
     366  end
     367  if $CHECK_FUNC_NONNULL && inirtn == 0
     368    error_wrong("E_PAR", params, :inirtn, "null")
     369  end
     370
     371  inirtnb += $sizeof_INIRTNB
     372end
     373
     374#
     375#  終了処理ルーチンに関するチェック
     376#
     377terrtnb = SYMBOL("_kernel_terrtnb_table")
     378$cfgData[:ATT_TER].each do |_, params|
     379  terrtn = PEEK(terrtnb + $offsetof_TERRTNB_terrtn, $sizeof_TERRTN)
     380
     381  # terrtnがプログラムの先頭番地として正しくない場合(E_PAR)[NGKI3250]
     382  if (terrtn & ($CHECK_FUNC_ALIGN - 1)) != 0
     383    error_wrong("E_PAR", params, :terrtn, "not aligned")
     384  end
     385  if $CHECK_FUNC_NONNULL && terrtn == 0
     386    error_wrong("E_PAR", params, :terrtn, "null")
     387  end
     388
     389  terrtnb += $sizeof_TERRTNB
     390end
Note: See TracChangeset for help on using the changeset viewer.