source: asp3_wo_tecs/trunk/kernel/genoffset.tf@ 302

Last change on this file since 302 was 302, checked in by ertl-honda, 7 years ago

TECSレスのASP3の開発のため以下のtrunkからコピー
http://dev.toppers.jp/svn/asp3/branches/WO_TECS-3.C.0

File size: 5.0 KB
Line 
1$
2$ TOPPERS/ASP Kernel
3$ Toyohashi Open Platform for Embedded Real-Time Systems/
4$ Advanced Standard Profile Kernel
5$
6$ Copyright (C) 2011 by Embedded and Real-Time Systems Laboratory
7$ Graduate School of Information Science, Nagoya Univ., JAPAN
8$
9$ 上記著作権者
10は,以下の(1)〜(4)の条件を満たす場合に限り,本ソフトウェ
11$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
12$ 変・再é…
13å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
14$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
15$ 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
16$ スコード中に含まれていること.
17$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
18$ 用できる形で再é…
19å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
20å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
21$ 者
22マニュアルなど)に,上記の著作権表示,この利用条件および下記
23$ の無保証規定を掲載すること.
24$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
25$ 用できない形で再é…
26å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
27$ と.
28$ (a) 再é…
29å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
30マニュアルなど)に,上記の著
31$ 作権表示,この利用条件および下記の無保証規定を掲載すること.
32$ (b) 再é…
33å¸ƒã®å½¢æ…
34‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
35$ 報告すること.
36$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
37$ 害からも,上記著作権者
38およびTOPPERSプロジェクトをå…
39è²¬ã™ã‚‹ã“と.
40$ また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
41$ 由に基づく請求からも,上記著作権者
42およびTOPPERSプロジェクトを
43$ å…
44è²¬ã™ã‚‹ã“と.
45$
46$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者
47お
48$ よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
49$ に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
50$ アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
51$ の責任を負わない.
52$
53$ $Id: genoffset.tf 480 2016-01-03 07:37:12Z ertl-hiro $
54$
55
56$
57$ オフセットファイル生成用のテンプレートファイル
58$
59
60$
61$ #defineディレクティブの生成
62$
63$FUNCTION DEFINE$
64 #define $ARGV[1]$$TAB$$FORMAT("%d", +ARGV[2])$$NL$
65$END$
66
67$
68$ ビットのサーチ
69$
70$FUNCTION SEARCH_BIT$
71 $_val = ARGV[1]$
72 $FOREACH _val_bit RANGE(0,7)$
73 $IF (_val & 1) != 0$
74 $RESULT = _val_bit$
75 $END$
76 $_val = _val >> 1$
77 $END$
78$END$
79
80$
81$ ビットフィールドのオフセットとビット位置の定義の生成
82$
83$FUNCTION DEFINE_BIT$
84 $label = ARGV[1]$
85 $struct_size = ARGV[2]$
86 $output_size = ARGV[3]$
87
88 $top = SYMBOL(label)$
89 $IF !LENGTH(top)$
90 $ERROR$$FORMAT("label %1% not found", label)$$END$
91 $ELSE$
92 $val = 0$
93 $FOREACH i RANGE(0,struct_size-1)$
94 $tmp_val = PEEK(top + i, 1)$
95 $IF val == 0 && tmp_val != 0$
96 $val = tmp_val$
97 $offset = i$
98 $END$
99 $END$
100
101 $IF val == 0$
102 $ERROR$$FORMAT("bit not found in %1%", ARGV[1])$$END$
103 $ELSE$
104 $val_bit = SEARCH_BIT(val)$
105 $RESULT = {}$
106 $IF EQ(output_size, "W")$
107 $IF SIL_ENDIAN_BIG$
108 $val_bit = val_bit + 24 - ((offset & 0x03) << 3)$
109 $ELSE$
110 $val_bit = val_bit + ((offset & 0x03) << 3)$
111 $END$
112 $offset = offset & ~0x03$
113 $ELSE$$IF EQ(output_size, "H")$
114 $IF SIL_ENDIAN_BIG$
115 $val_bit = val_bit + 8 - ((offset & 0x01) << 3)$
116 $ELSE$
117 $val_bit = val_bit + ((offset & 0x01) << 3)$
118 $END$
119 $offset = offset & ~0x01$
120 $END$$END$
121 $END$
122
123 #define $label$$TAB$$FORMAT("%d", +offset)$$NL$
124 #define $label$_bit$TAB$$FORMAT("%d", +val_bit)$$NL$
125 #define $label$_mask$TAB$$FORMAT("0x%x", 1 << val_bit)$$NL$
126 $END$
127$END$
128
129$
130$ バイトé…
131ç½®ã®ãƒã‚§ãƒƒã‚¯
132$
133$FUNCTION MAGIC_CHECK$
134 $size = ARGV[1]$
135 $check = ARGV[2]$
136
137 $label = FORMAT("MAGIC_%d", +size)$
138 $top = SYMBOL(label)$
139 $IF !LENGTH(top)$
140 $ERROR$$FORMAT("label %1% not found", label)$$END$
141 $ELSE$
142 $FOREACH offset RANGE(1,size)$
143 $IF SIL_ENDIAN_BIG$
144 $val = PEEK(top + offset - 1, 1)$
145 $ELSE$
146 $val = PEEK(top + size - offset, 1)$
147 $END$
148 $IF val != AT(check, offset - 1)$
149 $ERROR$$FORMAT("value check of %1% failed", label)$$END$
150 $END$
151 $END$
152 $END$
153$END$
154
155$MAGIC_CHECK(1, { 0x12 })$
156$MAGIC_CHECK(2, { 0x12, 0x34 })$
157$MAGIC_CHECK(4, { 0x12, 0x34, 0x56, 0x78 })$
158
159$
160$ タイムスタンプファイルの生成
161$
162$FILE "offset.timestamp"$
163
164$
165$ ファイルヘッダの生成
166$
167$FILE "offset.h.new"$
168/* offset.h */$NL$
169$NL$
Note: See TracBrowser for help on using the repository browser.