source: UsbWattMeter/trunk/asp_dcre/kernel/kernel_check.tf

Last change on this file was 167, checked in by coas-nagasima, 8 years ago

MIMEにSJISを設定

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/plain; charset=SHIFT_JIS
File size: 7.8 KB
Line 
1$ ======================================================================
2$
3$ TOPPERS/ASP Kernel
4$ Toyohashi Open Platform for Embedded Real-Time Systems/
5$ Advanced Standard Profile Kernel
6$
7$ Copyright (C) 2008-2010 by Embedded and Real-Time Systems Laboratory
8$ Graduate School of Information Science, Nagoya Univ., JAPAN
9$
10$ 上記著作権者は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12$ 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
13$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15$ スコード中に含まれていること.
16$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17$ 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
18$ 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
19$ の無保証規定を掲載すること.
20$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
21$ 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
22$ と.
23$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
24$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
25$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
26$ 報告すること.
27$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
28$ 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
30$ 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
31$ 免責すること.
32$
33$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
34$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
35$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
36$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
37$ の責任を負わない.
38$
39$ @(#) $Id: kernel_check.tf 167 2016-03-08 11:37:45Z coas-nagasima $
40$
41$ =====================================================================
42
43$
44$ データセクションのLMAからVMAへのコピー
45$
46$FOREACH lma LMA.ORDER_LIST$
47 $start_data = SYMBOL(LMA.START_DATA[lma])$
48 $end_data = SYMBOL(LMA.END_DATA[lma])$
49 $start_idata = SYMBOL(LMA.START_IDATA[lma])$
50 $IF !LENGTH(start_data)$
51 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_DATA[lma])$$END$
52 $ELIF !LENGTH(end_data)$
53 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.END_DATA[lma])$$END$
54 $ELIF !LENGTH(start_idata)$
55 $ERROR$$FORMAT(_("symbol '%1%' not found"), LMA.START_IDATA[lma])$$END$
56 $ELSE$
57 $BCOPY(start_idata, start_data, end_data - start_data)$
58 $END$
59$END$
60
61$
62$ 関数の先頭番地のチェック
63$
64$IF CHECK_FUNC_ALIGN || CHECK_FUNC_NONNULL$
65$ // タスクとタスク例外処理ルーチンの先頭番地のチェック
66 $tinib = SYMBOL("_kernel_tinib_table")$
67 $FOREACH tskid TSK.ID_LIST$
68 $task = PEEK(tinib + offsetof_TINIB_task, sizeof_FP)$
69 $IF CHECK_FUNC_ALIGN && (task & (CHECK_FUNC_ALIGN - 1)) != 0$
70 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
71 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
72 "task", TSK.TASK[tskid], tskid, "CRE_TSK")$$END$
73 $END$
74 $IF CHECK_FUNC_NONNULL && task == 0$
75 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
76 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
77 "task", TSK.TASK[tskid], tskid, "CRE_TSK")$$END$
78 $END$
79 $texrtn = PEEK(tinib + offsetof_TINIB_texrtn, sizeof_FP)$
80 $IF CHECK_FUNC_ALIGN && (texrtn & (CHECK_FUNC_ALIGN - 1)) != 0$
81 $ERROR DEF_TEX.TEXT_LINE[tskid]$E_PAR:
82 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
83 "texrtn", TSK.TEXRTN[tskid], tskid, "DEF_TEX")$$END$
84 $END$
85 $tinib = tinib + sizeof_TINIB$
86 $END$
87
88$ // 周期ハンドラの先頭番地のチェック
89 $cycinib = SYMBOL("_kernel_cycinib_table")$
90 $FOREACH cycid CYC.ID_LIST$
91 $cychdr = PEEK(cycinib + offsetof_CYCINIB_cychdr, sizeof_FP)$
92 $IF CHECK_FUNC_ALIGN && (cychdr & (CHECK_FUNC_ALIGN - 1)) != 0$
93 $ERROR CYC.TEXT_LINE[cycid]$E_PAR:
94 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
95 "cychdr", CYC.CYCHDR[cycid], cycid, "CRE_CYC")$$END$
96 $END$
97 $IF CHECK_FUNC_NONNULL && cychdr == 0$
98 $ERROR CYC.TEXT_LINE[cycid]$E_PAR:
99 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
100 "cychdr", CYC.CYCHDR[cycid], cycid, "CRE_CYC")$$END$
101 $END$
102 $cycinib = cycinib + sizeof_CYCINIB$
103 $END$
104
105$ // アラームハンドラの先頭番地のチェック
106 $alminib = SYMBOL("_kernel_alminib_table")$
107 $FOREACH almid ALM.ID_LIST$
108 $almhdr = PEEK(alminib + offsetof_ALMINIB_almhdr, sizeof_FP)$
109 $IF CHECK_FUNC_ALIGN && (almhdr & (CHECK_FUNC_ALIGN - 1)) != 0$
110 $ERROR ALM.TEXT_LINE[almid]$E_PAR:
111 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
112 "almhdr", ALM.ALMHDR[almid], almid, "CRE_ALM")$$END$
113 $END$
114 $IF CHECK_FUNC_NONNULL && almhdr == 0$
115 $ERROR ALM.TEXT_LINE[almid]$E_PAR:
116 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
117 "almhdr", ALM.ALMHDR[almid], almid, "CRE_ALM")$$END$
118 $END$
119 $alminib = alminib + sizeof_ALMINIB$
120 $END$
121
122$ // 割込みサービスルーチンの先頭番地のチェック
123 $isrinib = SYMBOL("_kernel_sisrinib_table")$
124 $FOREACH order ISR.ORDER_LIST$
125 $isr = PEEK(isrinib + offsetof_ISRINIB_isr, sizeof_FP)$
126 $IF CHECK_FUNC_ALIGN && (isr & (CHECK_FUNC_ALIGN - 1)) != 0$
127 $ERROR ISR.TEXT_LINE[order]$E_PAR:
128 $FORMAT(_("%1% `%2%\' in %4% is not aligned"),
129 "isr", ISR.ISR[order], "ATT_ISR")$$END$
130 $END$
131 $IF CHECK_FUNC_NONNULL && isr == 0$
132 $ERROR ISR.TEXT_LINE[order]$E_PAR:
133 $FORMAT(_("%1% `%2%\' in %4% is null"),
134 "isr", ISR.ISR[order], "ATT_ISR")$$END$
135 $END$
136 $isrinib = isrinib + sizeof_ISRINIB$
137 $END$
138$END$
139
140$
141$ スタック領域の先頭番地のチェック
142$
143$IF CHECK_STACK_ALIGN || CHECK_STACK_NONNULL$
144$ // タスクのスタック領域の先頭番地のチェック
145 $tinib = SYMBOL("_kernel_tinib_table")$
146 $FOREACH tskid TSK.ID_LIST$
147 $IF USE_TSKINICTXB$
148 $stk = GET_STK_TSKINICTXB(tinib)$
149 $ELSE$
150 $stk = PEEK(tinib + offsetof_TINIB_stk, sizeof_void_ptr)$
151 $END$
152 $IF CHECK_STACK_ALIGN && (stk & (CHECK_STACK_ALIGN - 1)) != 0$
153 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
154 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
155 "stk", TSK.STK[tskid], tskid, "CRE_TSK")$$END$
156 $END$
157 $IF CHECK_STACK_NONNULL && stk == 0$
158 $ERROR TSK.TEXT_LINE[tskid]$E_PAR:
159 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
160 "stk", TSK.STK[tskid], tskid, "CRE_TSK")$$END$
161 $END$
162 $tinib = tinib + sizeof_TINIB$
163 $END$
164
165$ // 非タスクコンテキスト用のスタック領域の先頭番地のチェック
166 $istk = PEEK(SYMBOL("_kernel_istk"), sizeof_void_ptr)$
167 $IF CHECK_STACK_ALIGN && (istk & (CHECK_STACK_ALIGN - 1)) != 0$
168 $ERROR ICS.TEXT_LINE[1]$E_PAR:
169 $FORMAT(_("%1% `%2%\' in %3% is not aligned"),
170 "istk", ICS.ISTK[1], "DEF_ICS")$$END$
171 $END$
172 $IF CHECK_STACK_NONNULL && istk == 0$
173 $ERROR ICS.TEXT_LINE[1]$E_PAR:
174 $FORMAT(_("%1% `%2%\' in %3% is null"),
175 "istk", ICS.ISTK[1], "DEF_ICS")$$END$
176 $END$
177$END$
178
179$
180$ 固定長メモリプール領域の先頭番地のチェック
181$
182$IF CHECK_MPF_ALIGN || CHECK_MPF_NONNULL$
183$ // 固定長メモリプール領域の先頭番地のチェック
184 $mpfinib = SYMBOL("_kernel_mpfinib_table")$
185 $FOREACH mpfid MPF.ID_LIST$
186 $mpf = PEEK(mpfinib + offsetof_MPFINIB_mpf, sizeof_void_ptr)$
187 $IF CHECK_MPF_ALIGN && (mpf & (CHECK_MPF_ALIGN - 1)) != 0$
188 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:
189 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is not aligned"),
190 "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$$END$
191 $END$
192 $IF CHECK_MPF_NONNULL && mpf == 0$
193 $ERROR MPF.TEXT_LINE[mpfid]$E_PAR:
194 $FORMAT(_("%1% `%2%\' of `%3%\' in %4% is null"),
195 "mpf", MPF.MPF[mpfid], mpfid, "CRE_MPF")$$END$
196 $END$
197 $mpfinib = mpfinib + sizeof_MPFINIB$
198 $END$
199$END$
200
201$
202$ カーネルが割り付けるメモリ領域の先頭番地のチェック
203$
204$IF CHECK_MB_ALIGN$
205$ // カーネルが割り付けるメモリ領域の先頭番地のチェック
206 $kmm = PEEK(SYMBOL("_kernel_kmm"), sizeof_void_ptr)$
207 $IF CHECK_MB_ALIGN && (kmm & (CHECK_MB_ALIGN - 1)) != 0$
208 $ERROR KMM.TEXT_LINE[1]$E_PAR:
209 $FORMAT(_("%1% `%2%\' in %3% is not aligned"),
210 "kmm", KMM.KMM[1], "DEF_KMM")$$END$
211 $END$
212$END$
Note: See TracBrowser for help on using the repository browser.