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

Last change on this file was 439, checked in by coas-nagasima, 4 years ago

mrubyを2.1.1に更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 4.5 KB
Line 
1# -*- coding: utf-8 -*-
2#
3# TOPPERS Software
4# Toyohashi Open Platform for Embedded Real-Time Systems
5#
6# Copyright (C) 2011-2018 by Embedded and Real-Time Systems Laboratory
7# Graduate School of Information Science, Nagoya Univ., JAPAN
8#
9# 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
10# ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11# 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
12# (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
13# 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
14# スコード中に含まれていること.
15# (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
16# 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
17# 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
18# の無保証規定を掲載すること.
19# (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
20# 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
21# と.
22# (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
23# 作権表示,この利用条件および下記の無保証規定を掲載すること.
24# (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
25# 報告すること.
26# (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
27# 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
28# また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
29# 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
30# 免責すること.
31#
32# 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
33# よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
34# に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
35# アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
36# の責任を負わない.
37#
38# $Id$
39#
40
41#
42# オフセットファイル生成用の生成スクリプト
43#
44
45#
46# タイムスタンプファイルの指定
47#
48$timeStampFileName = "offset.timestamp"
49
50#
51# offset.hの先頭部分の生成
52#
53$offsetH = GenFile.new("offset.h")
54$offsetH.add2("/* offset.h */")
55
56#
57# ビットのサーチ
58#
59def SearchBit(val)
60 (0..7).each do |valBit|
61 if (val & 1) != 0
62 return valBit
63 end
64 val >>= 1
65 end
66end
67
68#
69# ビットフィールドのオフセットとビット位置の算出
70#
71def BitOffsetPosition(label, structSize, outputSize)
72 top = SYMBOL(label)
73 if top.nil?
74 error_exit("label `#{label}' not found")
75 else
76 val = 0
77 offset = 0
78 0.upto(structSize - 1).each do |i|
79 tmpVal = PEEK(top + i, 1)
80 if tmpVal != 0
81 val = tmpVal
82 offset = i
83 break
84 end
85 end
86
87 if val == 0
88 error_exit("bit not found in `#{label}'")
89 else
90 position = SearchBit(val)
91 case outputSize
92 when 4, "W"
93 if $endianLittle
94 position = position + ((offset & 0x03) << 3)
95 else
96 position = position + 24 - ((offset & 0x03) << 3)
97 end
98 offset &= ~0x03
99 when 2, "H"
100 if $endianLittle
101 position = position + ((offset & 0x01) << 3)
102 else
103 position = position + 8 - ((offset & 0x01) << 3)
104 end
105 offset &= ~0x01
106 end
107 end
108 return offset, position
109 end
110end
111
112# 以下の定義は,過去のバージョンとの互換性のために残している.
113
114#
115# #defineディレクティブの生成
116#
117def GenerateDefine(symbol, value)
118 $offsetH.add("#define #{symbol}\t#{value}")
119end
120
121#
122# ビットフィールドのオフセットとビット位置の定義の生成
123#
124def GenerateDefineBit(label, structSize, outputSize)
125 offset, position = BitOffsetPosition(label, structSize, outputSize)
126 if !offset.nil?
127 GenerateDefine(label, offset)
128 GenerateDefine("#{label}_bit", position)
129 GenerateDefine("#{label}_mask", sprintf("0x%x", 1 << position))
130 end
131end
Note: See TracBrowser for help on using the repository browser.