Changeset 167 for UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/makeoffset.c
- Timestamp:
- Mar 8, 2016, 8:37:45 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
UsbWattMeter/trunk/asp_dcre/arch/rx630_ccrx/makeoffset.c
-
Property svn:mime-type
changed from
text/x-csrc
totext/x-csrc; charset=SHIFT_JIS
r164 r167 8 8 * Copyright (C) 2008-2010 by Witz Corporation, JAPAN 9 9 * 10 * ãLì ÒÍCȺÌ(1)`(4)Ìðð½·êÉÀèC{\tgEF 11 * Ai{\tgEFAðüϵ½àÌðÜÞDȺ¯¶jðgpE¡»Eü 12 * ÏEÄzziȺCpÆÄÔj·é±Æð³Åø·éD 13 * (1) {\tgEFAð\[XR[hÌ`Åp·éêÉÍCãLÌì 14 * \¦C±Ìpð¨æÑºLÌ³ÛØKèªC»ÌÜÜÌ`Å\[ 15 * XR[hÉÜÜêĢ鱯D 16 * (2) {\tgEFAðCCu`®ÈÇC¼Ì\tgEFAJÉg 17 * pÅ«é`ÅÄzz·éêÉÍCÄzzɺ¤hL 18 gip 19 * Ò}j 20 AÈÇjÉCãLÌì \¦C±Ìpð¨æÑºL 21 * Ì³ÛØKèðfÚ·é±ÆD 22 * (3) {\tgEFAðC@íÉgÝÞÈÇC¼Ì\tgEFAJÉg 23 * pūȢ`ÅÄzz·éêÉÍCÌ¢¸ê©Ìðð½·± 24 * ÆD 25 * (a) Äzzɺ¤hL 26 gipÒ}j 27 AÈÇjÉCãLÌ 28 * ì \¦C±Ìpð¨æÑºLÌ³ÛØKèðfÚ·é±ÆD 29 * (b) ÄzzÌ`ÔðCÊÉèßéû@ÉæÁÄCTOPPERSvWFNgÉ 30 * ñ·é±ÆD 31 * (4) {\tgEFAÌpÉæè¼ÚIܽÍÔÚIɶ¶é¢©Èé¹ 32 * Q©çàCãLì Ò¨æÑTOPPERSvWFNgðÆÓ·é±ÆD 33 * ܽC{\tgEFAÌ[UܽÍGh[U©çÌ¢©Èé 34 * RÉîÿ©çàCãLì Ò¨æÑTOPPERSvWFNgð 35 * ÆÓ·é±ÆD 36 * 37 * {\tgEFAÍC³ÛØÅñ³êÄ¢éàÌÅ éDãLì Ò¨ 38 * æÑTOPPERSvWFNgÍC{\tgEFAÉÖµÄCÁèÌgpÚI 39 * ÉηéK«àÜßÄC¢©ÈéÛØàsíÈ¢DܽC{\tgEF 40 * AÌpÉæè¼ÚIܽÍÔÚIɶ¶½¢©Èé¹QÉÖµÄàC» 41 * ÌÓCðíÈ¢D 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 * の責任を負わない. 42 38 * 43 39 * @(#) $Id$ … … 46 42 47 43 /* 48 * offset.inc ( àµÍ offset.h) É¢Ä49 * 50 * offset.inc Í\¢ÌÌÁèÌvfª\¢ÌÌæª©ç½oCgÚÉ51 * ¶Ý·é©Æ¢¤±Æâ, ÁèÌrbgtB[hªæª©ç52 * ½oCgæÌ½rbgÚɶݷé©, Æ¢¤îñð53 * AZu¾êt@CÉ^¦é½ßɶݵĢé.54 * 55 * offset.inc t@CÌgÍ, PÈéV{è`t@CÅ é.56 * V{Æ¢ÁÄàè`·éV{̼ÌÉÍp^[ª è,57 * 嫪¯ÄÌ3íÞɪÞÅ«é.58 * 59 * < \¢Ì¼>_<vf¼> (á) TCB_sp, TCB_pc, TCB_enatex ÈÇ60 * < \¢Ì¼>_<vf¼>_bit (á) TCB_enatex_bit ÈÇ61 * < \¢Ì¼>_<vf¼>_mask (á) TCB_enatex_mask ÈÇ62 * 63 * ( á)44 * offset.inc (もしくは offset.h) について 45 * 46 * offset.inc は構造体の特定の要素が構造体の先頭から何バイト目に 47 * 存在するかということや, 特定のビットフィールドが先頭から 48 * 何バイト先の何ビット目に存在するか, という情報を 49 * アセンブリ言語ファイルに与えるために存在している. 50 * 51 * offset.inc ファイルの中身は, 単なるシンボル定義ファイルである. 52 * シンボルといっても定義するシンボルの名称にはパターンがあり, 53 * 大きく分けて次の3種類に分類できる. 54 * 55 * <構造体名>_<要素名> (例) TCB_sp, TCB_pc, TCB_enatex など 56 * <構造体名>_<要素名>_bit (例) TCB_enatex_bit など 57 * <構造体名>_<要素名>_mask (例) TCB_enatex_mask など 58 * 59 * (例) 64 60 * TCB_texptn .equ 14 65 61 * TCB_sp .equ 20 … … 69 65 * TCB_enatex_mask .equ 0040H 70 66 * 71 * êÔͶßÍÁèÌvfª\¢ÌÌæª©ç½oCgæÉ é©72 * Æ¢¤±Æð¦·lɯéx̼Ì.73 * ñÔÚÍÁèÌrbgtB[hÌrbgª, ºÊ©ç¦Ä74 * ½rbgÚÉ é©Æ¢¤±Æð¦·lɯéx̼Ì.75 * 0 ©çnÜélÅ\»·é. ÅàºÊÌrbgÍæ0rbgÅ é.76 * OÔÚÍæÙÇÌ <\¢Ì¼>_<vf¼>_bit ÆàÖA·éª,77 * ÁèÌrbgtB[hÌrbgÌ}XNl̼Ì.78 * _bit Æ *_mask ÌlÌÔÉÍÌÖWª é.67 * 一番はじめは特定の要素が構造体の先頭から何バイト先にあるか 68 * ということを示す数値につけるラベルの名称. 69 * 二番目は特定のビットフィールド中のビットが, 下位から数えて 70 * 何ビット目にあるかということを示す数値につけるラベルの名称. 71 * 0から始まる数値で表現する. 最も下位のビットは第0ビットである. 72 * 三番目は先ほどの <構造体名>_<要素名>_bit とも関連するが, 73 * 特定のビットフィールド中のビットのマスク値の名称. 74 * _bit と *_mask の値の間には次の関係がある. 79 75 * (*_mask) == (1 << *_bit) 80 * * ( á) TCB_enatex_bit ª 6 Ì, TCB_enatex_mask Í40H81 * 82 * ¿ÈÝÉM32C˶ÌÀÅÍ, ÁèrbgÌ`FbNÈÇÉ83 * rbg½ßAhbVOðgpµÄ¢éÌÅ *_mask Æ¢¤xÍ84 * gpµÄ¢È¢.76 * * (例) TCB_enatex_bit が 6 の時, TCB_enatex_mask は 40H 77 * 78 * ちなみにM32C依存部の実装では, 特定ビットのチェックなどに 79 * ビット命令アドレッシングを使用しているので *_mask というラベルは 80 * 使用していない. 85 81 */ 86 82 87 83 /* 88 * offset.inc Ììèû(M32C^[Qbg˶ü¯) 89 * 90 * GNU CRpCðp¢Ä¢é^[Qbg˶É¢ÄÍ, 91 * J[lÌgbvfBNgÌºÉ é util Æ¢¤fBNgÌ 92 * ºÉ genoffset Æ¢¤ perl XNvgªpÓ³êÄ¢éÌÅ, 93 * ÁÉè®Å offset.h ð쬷éKvÍÈ¢. 94 * genoffset Í GNU J«ðzèµÄ쬳êÄ¢éÌÅ, 95 * ¶¬³êéAZu¾ê^½ßⶬK¥ÌÙÈé¼Ì 96 * CRpCÉÍ»ÌÜÜKpūȢÂ\«ª é. 97 * »±Å, ±±ÅÍWindows« ü¯Ì genoffset ðpÓ¹¸, 98 * ìèûð±±ÉLµ, èìÆÅ offset.inc ð쬵Äàç¤±ÆÆ 99 * ·é. ȺɻÌû@ð¦·. Ȩ, ±Ìû@ÍM32CÌJ«â 100 * ½ßZbgÉ˶µÄ¢é½ß, ¼Ì^[QbgðgpµÄ¢éêÍ 101 * »ÌÜÜKpūȢ. 102 * 103 * 1. makeoffset.c Æ¢¤t@C©çCRpCðgpµÄ 104 * AZu¾êt@C makeoffset.a30 𶬷é. 105 * RpCIvVÍJ[lR[hÉ^¦éàÌÆ¯¶ 106 * àÌð^¦é. 107 * lTX»c[ TM ðgpµÄ¢éêÍ, vWFNgGfB^Ì 108 * ¶¬èr 109 [©ç makeoffset.a30 ðIÑ, ENbNj 110 [Ì 111 * ¢ªrh£ðIð·é±ÆÅ¶¬Å«é. 112 * àµÍR}hvvgÅCNt@CƯ¶fBNgÉ 113 * Ú®µ, "make -f CNt@C¼ makeoffset.a30" ð 114 * ÀsµÄà¯lÌʪ¾çêé. (CNt@CÍTMªgpµÄ 115 * ¢éàÌÆ¯¶t@CðwèÂ\) 116 * 117 * 2. æÙÇÌ 1. ÌìÆÅ¾çê½, makeoffset.a30 t@C©ç 118 * "! BEGIN XXXX" ÅͶÜè "! END" ÅIíÁÄ¢éªðT·. 119 * 120 * 4Ó è, »ê¼êµ¸ÂÙÈéÌÅÉྷé. 121 * (Ⱥ, à¾ÅÍAZu¾êt@CÌRgsÍÈ) 122 * 123 * (1) \¢ÌÌæª©çoÖÌItZbg 84 * offset.inc の作り方(M32Cターゲット依存部向け) 85 * 86 * GNU Cコンパイラを用いているターゲット依存部については, 87 * カーネルのトップディレクトリの下にある util というディレクトリの 88 * 下に genoffset という perl スクリプトが用意されているので, 89 * 特に手動で offset.h を作成する必要はない. 90 * genoffset は GNU 開発環境を想定して作成されているので, 91 * 生成されるアセンブリ言語疑似命令や生成規則の異なる他の 92 * Cコンパイラにはそのまま適用できない可能性がある. 93 * そこで, ここではWindows環境 向けの genoffset を用意せず, 94 * 作り方をここに記し, 手作業で offset.inc を作成してもらうことと 95 * する. 以下にその方法を示す. なお, この方法はM32Cの開発環境や 96 * 命令セットに依存しているため, 他のターゲットを使用している場合は 97 * そのまま適用できない. 98 * 99 * 1. makeoffset.c というファイルからCコンパイラを使用して 100 * アセンブリ言語ファイル makeoffset.a30 を生成する. 101 * コンパイルオプションはカーネルコードに与えるものと同じ 102 * ものを与える. 103 * ルネサス製ツール TM を使用している場合は, プロジェクトエディタの 104 * 生成手順ビューから makeoffset.a30 を選び, 右クリックメニューの 105 * 「部分ビルド」を選択することで生成できる. 106 * もしくはコマンドプロンプトでメイクファイルと同じディレクトリに 107 * 移動し, "make -f メイクファイル名 makeoffset.a30" を 108 * 実行しても同様の結果が得られる. (メイクファイルはTMが使用して 109 * いるものと同じファイルを指定可能) 110 * 111 * 2. 先ほどの 1. の作業で得られた, makeoffset.a30 ファイルから 112 * "! BEGIN XXXX" ではじまり "! END" で終わっている部分を探す. 113 * 114 * 4箇所あり, それぞれ少しずつ異なるので順に説明する. 115 * (以下, 説明中ではアセンブリ言語ファイルのコメント行は省く) 116 * 117 * (1) 構造体の先頭からメンバへのオフセット 124 118 * 125 119 * ! BEGIN TCB_texptn … … 127 121 * ! END 128 122 * 129 * ãL"! BEGIN"Ìãë̶ñªoffset.incÅè`·éV{¼ÆÈé.130 * »ÌV{ÌlÍ, sÌbset½ßÌæ2IyhÌlÅ é131 * 0000000eH ª»êÉ·é. ±êª\¢ÌÌæª©çtexptnÜÅÌ132 * ItZbglÆÈé. µ½ªÁıÌê, offset.inc ÉÍ123 * 上記"! BEGIN"の後ろの文字列がoffset.incで定義するシンボル名となる. 124 * そのシンボルの値は, 次行のbset命令の第2オペランドの値である 125 * 0000000eHがそれに相当する. これが構造体の先頭からtexptnまでの 126 * オフセット値となる. したがってこの場合, offset.inc には 133 127 * TCB_texptn .equ 14 134 * Æ¢¤sðLq·é.135 * 136 * (2) \¢ÌÌoª\¢ÌÅ, »ÌÌoÉηéItZbg137 * 138 * TCB_sp É¢ÄàÙÚ¯l¾ª, sp ÍTCB\¢Ì̼ÚÌ139 * oÅÈTCB\¢ÌÌoÅ éTSKCTXB\¢ÌÌoÅ140 * é_ªÙÈé. »êÅàè`·éV{¼ÆµÄÍ141 * TCB_sp Ìæ¤É\»·é. AZu¾êt@CÅÍ128 * という行を記述する. 129 * 130 * (2) 構造体のメンバが構造体で, その中のメンバに対するオフセット 131 * 132 * TCB_sp についてもほぼ同様だが, sp はTCB構造体の直接の 133 * メンバでなくTCB構造体のメンバであるTSKCTXB構造体のメンバで 134 * ある点が異なる. それでも定義するシンボル名としては 135 * TCB_sp のように表現する. アセンブリ言語ファイルでは 142 136 * 143 137 * ! BEGIN TCB_sp … … 149 143 * ! END * 150 144 * 151 * Ìæ¤ÉÈè,14H(=20) ªßélÈÌÅoffset.inc ÉÍÌæ¤É152 * Lq·é.145 * のようになり,14H(=20) が求める値なのでoffset.inc には次のように 146 * 記述する. 153 147 * 154 148 * TCB_sp .equ 20 155 149 * 156 * (3) oªÖÖÌ|C^Å Á½ê157 * 158 * Í TCB_pc Ìê.150 * (3) メンバが関数へのポインタであった場合 151 * 152 * 次は TCB_pc の場合. 159 153 * 160 154 * ! BEGIN TCB_pc … … 163 157 * ! END 164 158 * 165 * pc à sp Ư¶, TCB\¢Ì̼ÚÌoÅÍÈ¢ª166 * TCB_pc Æ\»µÄ¢é. ±êÍÖÌAhXði[·éÏÈÌÅ,159 * pc も sp と同じく, TCB構造体の直接のメンバではないが 160 * TCB_pc と表現している. これは関数のアドレスを格納する変数なので, 167 161 * (((TCB *)0)->tskctxb.pc)(); 168 * ƵÄÖÄÑoµÌæ¤ÉLq·éÆãLÌæ¤ÈAZu¾ê169 * R[hðoÍ·é. V{è`·éÛÌV{¼Í¡ÜÅÆ170 * ¯¶, TCB_pc Æ·é.171 * ßélÍ\¢Ì©çÖ|C^ÜÅÌItZbgÅ è, ãÌmov.l172 * ½ßÌÊ©ç 00000018H(=24) ÆÈé.173 * µ½ªÁÄ, offset.inc ÉÍÌæ¤ÉLq·é.162 * として関数呼び出しのように記述すると上記のようなアセンブリ言語 163 * コードを出力する. シンボル定義する際のシンボル名は今までと 164 * 同じく, TCB_pc とする. 165 * 求める値は構造体から関数ポインタまでのオフセットであり, 上のmov.l 166 * 命令の結果から 00000018H(=24) となる. 167 * したがって, offset.inc には次のように記述する. 174 168 * 175 169 * TCB_pc .equ 24 176 170 * 177 * (4) \¢ÌÌoªrbgtB[hÅ»ÌrbgÊuàmè½¢ê171 * (4) 構造体のメンバがビットフィールドでそのビット位置も知りたい場合 178 172 * 179 173 * ! BEGIN TCB_enatex … … 181 175 * ! END 182 176 * 183 * ¡ÜÅÆ¯l, BEGIN Ìã̶ñðV{¼Æ·é.184 * ±±ÅÌTCB_enatexÌlÍ\¢ÌÌæª©çrbgtB[hðÜÞo185 * CgÜÅÌItZbgÅ, M32CÌrbg½ßAhbVOÍwèÅ«186 * érbgÊuª0©ç7ÌÔÉûÜ鿤ÉANZX·éAhXÉK187 * ªÁ¦çêéÌÅ cH+1(=13) ÆÈÁÄ¢é. ܽ, rbgtB[h188 * ÌźÊrbg©çÌrbgÊuÍ 6ÆÈé.189 * ÈãæèÌæ¤É±ÆªÅ«é.177 * 今までと同様, BEGIN の後の文字列をシンボル名とする. 178 * ここでのTCB_enatexの値は構造体の先頭からビットフィールドを含むバ 179 * イトまでのオフセットで, M32Cのビット命令アドレッシングは指定でき 180 * るビット位置が0から7の間に収まるようにアクセスするアドレスに適当 181 * 数が加えられるので cH+1(=13) となっている. また, ビットフィールド 182 * 中の最下位ビットからのビット位置は 6となる. 183 * 以上より次のように書くことができる. 190 184 * 191 185 * TCB_enatex .equ 13 -
Property svn:mime-type
changed from
Note:
See TracChangeset
for help on using the changeset viewer.