source: EcnlProtoTool/trunk/asp3_dcre/kernel/genoffset.trb@ 270

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

mruby版ECNLプロトタイピング・ツールを追加

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