source: azure_iot_hub/trunk/asp3_dcre/kernel/genoffset.trb@ 389

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

ビルドが通るよう更新

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-ruby;charset=UTF-8
File size: 4.8 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# 上記著作権者は,以下の(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$
40#
41
42#
43# オフセットファイル生成用の生成スクリプト
44#
45
46#
47# タイムスタンプファイルの指定
48#
49$timeStampFileName = "offset.timestamp"
50
51#
52# offset.hの先頭部分の生成
53#
54$offsetH = GenFile.new("offset.h")
55$offsetH.add2("/* offset.h */")
56
57#
58# #defineディレクティブの生成
59#
60def GenerateDefine(symbol, value)
61 $offsetH.add("#define #{symbol}\t#{value}")
62end
63
64#
65# ビットのサーチ
66#
67def SearchBit(val)
68 (0..7).each do |valBit|
69 if (val & 1) != 0
70 return valBit
71 end
72 val >>= 1
73 end
74end
75
76#
77# ビットフィールドのオフセットとビット位置の定義の生成
78#
79def GenerateDefineBit(label, structSize, outputSize)
80 top = SYMBOL(label)
81 if top.nil?
82 error_exit("label `#{label}' not found")
83 else
84 val = 0
85 offset = 0
86 0.upto(structSize - 1).each do |i|
87 tmpVal = PEEK(top + i, 1)
88 if tmpVal != 0
89 val = tmpVal
90 offset = i
91 break
92 end
93 end
94
95 if val == 0
96 error_exit("bit not found in `#{label}'")
97 else
98 valBit = SearchBit(val)
99 case outputSize
100 when "W"
101 if $SIL_ENDIAN_BIG
102 valBit = valBit + 24 - ((offset & 0x03) << 3)
103 else
104 valBit = valBit + ((offset & 0x03) << 3)
105 end
106 offset &= ~0x03
107 when "H"
108 if $SIL_ENDIAN_BIG
109 valBit = valBit + 8 - ((offset & 0x01) << 3)
110 else
111 valBit = valBit + ((offset & 0x01) << 3)
112 end
113 offset &= ~0x01
114 end
115 end
116
117 $offsetH.add("#define #{label}\t#{offset}")
118 $offsetH.add("#define #{label}_bit\t#{valBit}")
119 $offsetH.add("#define #{label}_mask\t#{sprintf("0x%x", 1 << valBit)}")
120 end
121end
122
123#
124# バイト配置のチェック
125#
126def magicCheck(size, check)
127 label = "MAGIC_#{size}"
128 top = SYMBOL(label)
129 if top.nil?
130 error_exit("label `#{label}' not found")
131 else
132 1.upto(size).each do |offset|
133 if $SIL_ENDIAN_BIG
134 val = PEEK(top + offset - 1, 1)
135 else
136 val = PEEK(top + size - offset, 1)
137 end
138 if val != check.at(offset - 1)
139 error_exit("value check of `#{label}' failed")
140 end
141 end
142 end
143end
144
145magicCheck(1, [ 0x12 ])
146magicCheck(2, [ 0x12, 0x34 ])
147magicCheck(4, [ 0x12, 0x34, 0x56, 0x78 ])
Note: See TracBrowser for help on using the repository browser.