source: rubycfg_asp/trunk/asp_dcre/kernel/kernel_check.trb@ 313

Last change on this file since 313 was 313, checked in by coas-nagasima, 7 years ago

ソースを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby
File size: 7.7 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS/ASP Kernel
4# Toyohashi Open Platform for Embedded Real-Time Systems/
5# Advanced Standard Profile Kernel
6#
7# Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
8# Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
9# Graduate School of Information Science, Nagoya Univ., JAPAN
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# の責任を負わない.
54#
55# $Id: kernel_check.trb 662 2016-02-27 02:33:51Z ertl-hiro $
56#
57
58#
59# コンフィギュレータのパス3の生成スクリプト
60#
61
62#
63# タイムスタンプファイルの指定
64#
65$timeStampFileName = "check.timestamp"
66
67#
68# データセクションのLMAからVMAへのコピー
69#
70if !$lmaList.nil?
71 $lmaList.each do |lma|
72 startData = SYMBOL(lma[:START_DATA])
73 endData = SYMBOL(lma[:END_DATA])
74 startIdata = SYMBOL(lma[:START_IDATA])
75 if startData.nil?
76 error_exit("symbol `lma[:START_DATA]' not found")
77 elsif endData.nil?
78 error_exit("symbol `lma[:END_DATA]' not found")
79 elsif startIdata.nil?
80 error_exit("symbol `lma[:START_IDATA]' not found")
81 else
82 BCOPY(startIdata, startData, endData - startData)
83 end
84 end
85end
86
87#
88# 通知情
89報のチェック関数
90#
91$tmax_tskid = $TMIN_TSKID + $cfgData[:CRE_TSK].size - 1
92$tmax_semid = $TMIN_SEMID + $cfgData[:CRE_SEM].size - 1
93$tmax_flgid = $TMIN_FLGID + $cfgData[:CRE_FLG].size - 1
94$tmax_dtqid = $TMIN_DTQID + $cfgData[:CRE_DTQ].size - 1
95$tmax_mbxid = $TMIN_MBXID + $cfgData[:CRE_MBX].size - 1
96
97#
98# タスクに関するチェック
99#
100tinib = SYMBOL("_kernel_tinib_table")
101$cfgData[:CRE_TSK].sort.each do |key, params|
102 task = PEEK(tinib + $offsetof_TINIB_task, $sizeof_TASK)
103
104 # タスクのå…
105ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI1033ï¼½
106 if (task & ($CHECK_FUNC_ALIGN - 1)) != 0
107 error_wrong_id("E_PAR", params, :task, :tskid, "not aligned")
108 end
109 if $CHECK_FUNC_NONNULL && task == 0
110 error_wrong_id("E_PAR", params, :task, :tskid, "null")
111 end
112
113 # タスクのスタック領域のå…
114ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI1056ï¼½
115 if $USE_TSKINICTXB
116 stk = GetStackTskinictxb(key, params, tinib)
117 else
118 stk = PEEK(tinib + $offsetof_TINIB_stk, $sizeof_void_ptr)
119 end
120 if (stk & ($CHECK_STACK_ALIGN - 1)) != 0
121 error_wrong_id("E_PAR", params, :stk, :tskid, "not aligned")
122 end
123 if $CHECK_STACK_NONNULL && stk == 0
124 error_wrong_id("E_PAR", params, :stk, :tskid, "null")
125 end
126
127 tinib += $sizeof_TINIB
128end
129
130#
131# 固定長メモリプールに関するチェック
132#
133mpfinib = SYMBOL("_kernel_mpfinib_table")
134$cfgData[:CRE_MPF].sort.each do |key, params|
135 mpf = PEEK(mpfinib + $offsetof_MPFINIB_mpf, $sizeof_void_ptr)
136
137 # 固定長メモリプール領域のå…
138ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI2249ï¼½
139 if (mpf & ($CHECK_MPF_ALIGN - 1)) != 0
140 error_wrong_id("E_PAR", params, :mpf, :mpfid, "not aligned")
141 end
142 if $CHECK_MPF_NONNULL && mpf == 0
143 error_wrong_id("E_PAR", params, :mpf, :mpfid, "null")
144 end
145
146 mpfinib += $sizeof_MPFINIB
147end
148
149#
150# 周期通知に関するチェック
151#
152cycinib = SYMBOL("_kernel_cycinib_table")
153$cfgData[:CRE_CYC].sort.each do |key, params|
154 exinf = PEEK(cycinib + $offsetof_CYCINIB_exinf, $sizeof_intptr_t)
155 cychdr = PEEK(cycinib + $offsetof_CYCINIB_cychdr, $sizeof_CYCHDR)
156
157 # ハンドラのå…
158ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3135ï¼½
159 if (cychdr && ($CHECK_FUNC_ALIGN - 1)) != 0
160 error_wrong_id("E_PAR", params, :cychdr, :cycid, "not aligned")
161 end
162 if $CHECK_FUNC_NONNULL && :cychdr == 0
163 error_wrong_id("E_PAR", params, :cychdr, :cycid, "null")
164 end
165
166 cycinib += $sizeof_CYCINIB
167end
168
169#
170# アラーム通知に関するチェック
171#
172alminib = SYMBOL("_kernel_alminib_table")
173$cfgData[:CRE_ALM].sort.each do |key, params|
174 exinf = PEEK(alminib + $offsetof_ALMINIB_exinf, $sizeof_intptr_t)
175 almhdr = PEEK(alminib + $offsetof_ALMINIB_almhdr, $sizeof_ALMHDR)
176
177 # ハンドラのå…
178ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3135ï¼½
179 if (almhdr && ($CHECK_FUNC_ALIGN - 1)) != 0
180 error_wrong_id("E_PAR", params, :almhdr, :almid, "not aligned")
181 end
182 if $CHECK_FUNC_NONNULL && params[:almhdr] == 0
183 error_wrong_id("E_PAR", params, :almhdr, :almid, "null")
184 end
185
186 alminib += $sizeof_ALMINIB
187end
188
189#
190# 割込みサービスルーチンに関するチェック
191#
192isrinib = SYMBOL("_kernel_sisrinib_table")
193$cfgData[:ATT_ISR].sort.each do |key, params|
194 isr = PEEK(isrinib + $offsetof_ISRINIB_isr, $sizeof_ISR)
195
196 # 割込みサービスルーチンのå…
197ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3004ï¼½
198 if (isr & ($CHECK_FUNC_ALIGN - 1)) != 0
199 error_wrong_id("E_PAR", params, :isr, :isrid, "not aligned")
200 end
201 if $CHECK_FUNC_NONNULL && isr == 0
202 error_wrong_id("E_PAR", params, :isr, :isrid, "null")
203 end
204
205 isrinib += $sizeof_ISRINIB
206end
207
208#
209# 非タスクコンテキスト用のスタック領域に関するチェック
210#
211istkAddr = SYMBOL("_kernel_istk")
212if !istkAddr.nil?
213 istk = PEEK(istkAddr, $sizeof_void_ptr)
214
215 # 非タスクコンテキスト用のスタック領域のå…
216ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯ï¼»NGKI3222ï¼½
217 if (istk & ($CHECK_STACK_ALIGN - 1)) != 0
218 error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "not aligned")
219 end
220 if $CHECK_STACK_NONNULL && istk == 0
221 error_wrong("E_PAR", $cfgData[:DEF_ICS][1], :istk, "null")
222 end
223end
224
225#
226# カーネルが割り付けるメモリ領域に関するチェック
227#
228kmmAddr = SYMBOL("_kernel_kmm")
229if !kmmAddr.nil?
230 kmm = PEEK(kmmAddr, $sizeof_void_ptr)
231
232 # カーネルが割り付けるメモリ領域のå…
233ˆé ­ç•ªåœ°ã®ãƒã‚§ãƒƒã‚¯
234 if (kmm & ($CHECK_MB_ALIGN - 1)) != 0
235 error_wrong("E_PAR", $cfgData[:DEF_KMM][1], :kmm, "not aligned")
236 end
237end
Note: See TracBrowser for help on using the repository browser.