Ignore:
Timestamp:
Jun 10, 2015, 8:40:31 PM (9 years ago)
Author:
coas-nagasima
Message:

SHIFT_JISのコードにcharsetプロパティを付けた

File:
1 edited

Legend:

Unmodified
Added
Removed
  • uKadecot/trunk/ssp/arch/rx630_ccrx/makeoffset.c

    • Property svn:mime-type changed from text/plain to text/plain; charset=SHIFT_JIS
    r101 r107  
    77 *  Copyright (C) 2008-2010 by Witz Corporation, JAPAN
    88 *
    9  *  ã‹L’˜ìŒ ŽÒ‚́CˆÈ‰º‚Ì (1)`(4) ‚ÌðŒ‚©CFree Software Foundation
    10  *  ‚É‚æ‚Á‚ÄŒö•\‚³‚ê‚Ä‚¢‚é GNU General Public License ‚Ì Version 2 ‚É‹L
    11  *  q‚³‚ê‚Ä‚¢‚éðŒ‚ð–ž‚½‚·ê‡‚ÉŒÀ‚èC–{ƒ\ƒtƒgƒEƒFƒAi–{ƒ\ƒtƒgƒEƒFƒA
    12  *  ‚ð‰ü•Ï‚µ‚½‚à‚Ì‚ðŠÜ‚ށDˆÈ‰º“¯‚¶j‚ðŽg—pE•¡»E‰ü•ÏEÄ”z•ziˆÈ‰ºC
    13  *  —˜—p‚ƌĂԁj‚·‚邱‚Ƃ𖳏ž‚Å‹–‘ø‚·‚éD
    14  *  (1) –{ƒ\ƒtƒgƒEƒFƒA‚ðƒ\[ƒXƒR[ƒh‚ÌŒ`‚Å—˜—p‚·‚éê‡‚ɂ́Cã‹L‚Ì’˜ì
    15  *      Œ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’肪C‚»‚Ì‚Ü‚Ü‚ÌŒ`‚Ń\[
    16  *      ƒXƒR[ƒh’†‚ÉŠÜ‚Ü‚ê‚Ä‚¢‚邱‚ƁD
    17  *  (2) –{ƒ\ƒtƒgƒEƒFƒA‚ðCƒ‰ƒCƒuƒ‰ƒŠŒ`Ž®‚ȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    18  *      —p‚Å‚«‚éŒ`‚ōĔz•z‚·‚éê‡‚ɂ́CÄ”z•z‚É”º‚¤ƒhƒLƒ
    19 ƒƒ“ƒgi—˜—p
    20  *      ŽÒƒ}ƒjƒ
    21 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L
    22  *      ‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    23  *  (3) –{ƒ\ƒtƒgƒEƒFƒA‚ðC‹@Ší‚É‘g‚ݍž‚ނȂǁC‘¼‚̃\ƒtƒgƒEƒFƒAŠJ”­‚ÉŽg
    24  *      —p‚Å‚«‚È‚¢Œ`‚ōĔz•z‚·‚éê‡‚ɂ́CŽŸ‚Ì‚¢‚¸‚ê‚©‚ÌðŒ‚ð–ž‚½‚·‚±
    25  *      ‚ƁD
    26  *    (a) Ä”z•z‚É”º‚¤ƒhƒLƒ
    27 ƒƒ“ƒgi—˜—pŽÒƒ}ƒjƒ
    28 ƒAƒ‹‚Ȃǁj‚ɁCã‹L‚Ì’˜
    29  *        ìŒ •\Ž¦C‚±‚Ì—˜—pðŒ‚¨‚æ‚щº‹L‚Ì–³•ÛØ‹K’è‚ðŒfÚ‚·‚邱‚ƁD
    30  *    (b) Ä”z•z‚ÌŒ`‘Ô‚ðC•Ê‚É’è‚ß‚é•û–@‚É‚æ‚Á‚āCTOPPERSƒvƒƒWƒFƒNƒg‚É
    31  *        •ñ‚·‚邱‚ƁD
    32  *  (4) –{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚é‚¢‚©‚Ȃ鑹
    33  *      ŠQ‚©‚ç‚àCã‹L’˜ìŒ ŽÒ‚¨‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚ð–Ɛӂ·‚邱‚ƁD
    34  *
    35  *  –{ƒ\ƒtƒgƒEƒFƒA‚́C–³•ÛØ‚Å’ñ‹Ÿ‚³‚ê‚Ä‚¢‚é‚à‚Ì‚Å‚ ‚éDã‹L’˜ìŒ ŽÒ‚¨
    36  *  ‚æ‚ÑTOPPERSƒvƒƒWƒFƒNƒg‚́C–{ƒ\ƒtƒgƒEƒFƒA‚ÉŠÖ‚µ‚āC‚»‚Ì“K—p‰Â”\«‚à
    37  *  ŠÜ‚߂āC‚¢‚©‚È‚é•ÛØ‚às‚í‚È‚¢D‚Ü‚½C–{ƒ\ƒtƒgƒEƒFƒA‚Ì—˜—p‚É‚æ‚è’¼
    38  *  Ú“I‚Ü‚½‚͊ԐړI‚ɐ¶‚¶‚½‚¢‚©‚Ȃ鑹ŠQ‚ÉŠÖ‚µ‚Ä‚àC‚»‚̐ӔC‚𕉂í‚È‚¢D
     9 *  上記著作権者は,以下の (1)〜(4) の条件か,Free Software Foundation
     10 *  によって公表されている GNU General Public License の Version 2 に記
     11 *  述されている条件を満たす場合に限り,本ソフトウェア(本ソフトウェア
     12 *  を改変したものを含む.以下同じ)を使用・複製・改変・再配布(以下,
     13 *  利用と呼ぶ)することを無償で許諾する.
     14 *  (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
     15 *      権表示,この利用条件および下記の無保証規定が,そのままの形でソー
     16 *      スコード中に含まれていること.
     17 *  (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
     18 *      用できる形で再配布する場合には,再配布に伴うドキュメント(利用
     19 *      者マニュアルなど)に,上記の著作権表示,この利用条件および下記
     20 *      の無保証規定を掲載すること.
     21 *  (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
     22 *      用できない形で再配布する場合には,次のいずれかの条件を満たすこ
     23 *      と.
     24 *    (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
     25 *        作権表示,この利用条件および下記の無保証規定を掲載すること.
     26 *    (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
     27 *        報告すること.
     28 *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
     29 *      害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
     30 *
     31 *  本ソフトウェアは,無保証で提供されているものである.上記著作権者お
     32 *  よびTOPPERSプロジェクトは,本ソフトウェアに関して,その適用可能性も
     33 *  含めて,いかなる保証も行わない.また,本ソフトウェアの利用により直
     34 *  接的または間接的に生じたいかなる損害に関しても,その責任を負わない.
    3935 *
    4036 */
     
    4238
    4339/*
    44  *      offset.inc (‚à‚µ‚­‚Í offset.h) ‚ɂ‚¢‚Ä
    45  *
    46  *        offset.inc ‚͍\‘¢‘Ì‚Ì“Á’è‚Ì—v‘f‚ª\‘¢‘̂̐擪‚©‚牽ƒoƒCƒg–Ú‚É
    47  *      ‘¶Ý‚·‚é‚©‚Æ‚¢‚¤‚±‚Æ‚â, “Á’è‚̃rƒbƒgƒtƒB[ƒ‹ƒh‚ªæ“ª‚©‚ç
    48  *      ‰½ƒoƒCƒgæ‚̉½ƒrƒbƒg–Ú‚É‘¶Ý‚·‚é‚©, ‚Æ‚¢‚¤î•ñ‚ð
    49  *      ƒAƒZƒ“ƒuƒŠŒ¾Œêƒtƒ@ƒCƒ‹‚É—^‚¦‚邽‚ß‚É‘¶Ý‚µ‚Ä‚¢‚é.
    50  *
    51  *        offset.inc ƒtƒ@ƒCƒ‹‚Ì’†g‚Í, ’P‚È‚éƒVƒ“ƒ{ƒ‹’è‹`ƒtƒ@ƒCƒ‹‚Å‚ ‚é.
    52  *      ƒVƒ“ƒ{ƒ‹‚Æ‚¢‚Á‚Ä‚à’è‹`‚·‚éƒVƒ“ƒ{ƒ‹‚Ì–¼Ì‚ɂ̓pƒ^[ƒ“‚ª‚ ‚è,
    53  *      ‘å‚«‚­•ª‚¯‚ÄŽŸ‚Ì3Ží—Þ‚É•ª—Þ‚Å‚«‚é.
    54  *
    55  *      <\‘¢‘Ì–¼>_<—v‘f–¼>     (—á) TCB_sp, TCB_pc, TCB_enatex ‚È‚Ç
    56  *      <\‘¢‘Ì–¼>_<—v‘f–¼>_bit (—á) TCB_enatex_bit ‚È‚Ç
    57  *      <\‘¢‘Ì–¼>_<—v‘f–¼>_mask (—á) TCB_enatex_mask ‚È‚Ç
    58  *
    59  *      (—á)
     40 *      offset.inc (もしくは offset.h) について
     41 *
     42 *        offset.inc は構造体の特定の要素が構造体の先頭から何バイト目に
     43 *      存在するかということや, 特定のビットフィールドが先頭から
     44 *      何バイト先の何ビット目に存在するか, という情報を
     45 *      アセンブリ言語ファイルに与えるために存在している.
     46 *
     47 *        offset.inc ファイルの中身は, 単なるシンボル定義ファイルである.
     48 *      シンボルといっても定義するシンボルの名称にはパターンがあり,
     49 *      大きく分けて次の3種類に分類できる.
     50 *
     51 *      <構造体名>_<要素名>    (例) TCB_sp, TCB_pc, TCB_enatex など
     52 *      <構造体名>_<要素名>_bit        (例) TCB_enatex_bit など
     53 *      <構造体名>_<要素名>_mask (例) TCB_enatex_mask など
     54 *
     55 *      ()
    6056 *              TCB_texptn              .equ    14
    6157 *              TCB_sp                  .equ    20
     
    6561 *              TCB_enatex_mask         .equ    0040H
    6662 *
    67  *        ˆê”Ô‚Í‚¶‚ß‚Í“Á’è‚Ì—v‘f‚ª\‘¢‘̂̐擪‚©‚牽ƒoƒCƒgæ‚É‚ ‚é‚©
    68  *      ‚Æ‚¢‚¤‚±‚Æ‚ðŽ¦‚·”’l‚ɂ‚¯‚郉ƒxƒ‹‚Ì–¼Ì.
    69  *        “ñ”Ô–Ú‚Í“Á’è‚̃rƒbƒgƒtƒB[ƒ‹ƒh’†‚̃rƒbƒg‚ª, ‰ºˆÊ‚©‚琔‚¦‚Ä
    70  *      ‰½ƒrƒbƒg–Ú‚É‚ ‚é‚©‚Æ‚¢‚¤‚±‚Æ‚ðŽ¦‚·”’l‚ɂ‚¯‚郉ƒxƒ‹‚Ì–¼Ì.
    71  *      0‚©‚çŽn‚܂鐔’l‚Å•\Œ»‚·‚é. Å‚à‰ºˆÊ‚̃rƒbƒg‚Í‘æ0ƒrƒbƒg‚Å‚ ‚é.
    72  *        ŽO”Ԗڂ͐æ‚Ù‚Ç‚Ì <\‘¢‘Ì–¼>_<—v‘f–¼>_bit ‚Æ‚àŠÖ˜A‚·‚邪,
    73  *      “Á’è‚̃rƒbƒgƒtƒB[ƒ‹ƒh’†‚̃rƒbƒg‚̃}ƒXƒN’l‚Ì–¼Ì.
    74  *      _bit ‚Æ *_mask ‚Ì’l‚ÌŠÔ‚É‚ÍŽŸ‚ÌŠÖŒW‚ª‚ ‚é.
     63 *        一番はじめは特定の要素が構造体の先頭から何バイト先にあるか
     64 *      ということを示す数値につけるラベルの名称.
     65 *        二番目は特定のビットフィールド中のビットが, 下位から数えて
     66 *      何ビット目にあるかということを示す数値につけるラベルの名称.
     67 *      0から始まる数値で表現する. 最も下位のビットは第0ビットである.
     68 *        三番目は先ほどの <構造体名>_<要素名>_bit とも関連するが,
     69 *      特定のビットフィールド中のビットのマスク値の名称.
     70 *      _bit と *_mask の値の間には次の関係がある.
    7571 *              (*_mask) == (1 << *_bit)
    76  * *    (—á) TCB_enatex_bit ‚ª 6 ‚ÌŽž, TCB_enatex_mask ‚Í 40H
    77  *
    78  *        ‚¿‚È‚Ý‚ÉM32CˆË‘¶•”‚ÌŽÀ‘•‚Å‚Í, “Á’èƒrƒbƒg‚̃`ƒFƒbƒN‚È‚Ç‚É
    79  *      ƒrƒbƒg–½—߃AƒhƒŒƒbƒVƒ“ƒO‚ðŽg—p‚µ‚Ä‚¢‚é‚Ì‚Å *_mask ‚Æ‚¢‚¤ƒ‰ƒxƒ‹‚Í
    80  *      Žg—p‚µ‚Ä‚¢‚È‚¢.
     72 * *    (例) TCB_enatex_bit が 6 の時, TCB_enatex_mask は 40H
     73 *
     74 *        ちなみにM32C依存部の実装では, 特定ビットのチェックなどに
     75 *      ビット命令アドレッシングを使用しているので *_mask というラベルは
     76 *      使用していない.
    8177 */
    8278
    8379/*
    84  *      offset.inc ‚̍ì‚è•û(M32Cƒ^[ƒQƒbƒgˆË‘¶•”Œü‚¯)
    85  *
    86  *        GNU CƒRƒ“ƒpƒCƒ‰‚ð—p‚¢‚Ä‚¢‚éƒ^[ƒQƒbƒgˆË‘¶•”‚ɂ‚¢‚Ä‚Í,
    87  *      ƒJ[ƒlƒ‹‚̃gƒbƒvƒfƒBƒŒƒNƒgƒŠ‚̉º‚É‚ ‚é util ‚Æ‚¢‚¤ƒfƒBƒŒƒNƒgƒŠ‚Ì
    88  *      ‰º‚É genoffset ‚Æ‚¢‚¤ perl ƒXƒNƒŠƒvƒg‚ª—pˆÓ‚³‚ê‚Ä‚¢‚é‚Ì‚Å,
    89  *      “Á‚ÉŽè“®‚Å offset.h ‚ðì¬‚·‚é•K—v‚Í‚È‚¢.
    90  *        genoffset ‚Í GNU ŠJ”­ŠÂ‹«‚ð‘z’肵‚č쐬‚³‚ê‚Ä‚¢‚é‚Ì‚Å,
    91  *      ¶¬‚³‚ê‚éƒAƒZƒ“ƒuƒŠŒ¾Œê‹^Ž—–½—߂␶¬‹K‘¥‚̈قȂ鑼‚Ì
    92  *      CƒRƒ“ƒpƒCƒ‰‚É‚Í‚»‚Ì‚Ü‚Ü“K—p‚Å‚«‚È‚¢‰Â”\«‚ª‚ ‚é.
    93  *        ‚»‚±‚Å, ‚±‚±‚Å‚ÍWindowsŠÂ‹« Œü‚¯‚Ì genoffset ‚ð—pˆÓ‚¹‚¸,
    94  *      ì‚è•û‚ð‚±‚±‚É‹L‚µ, Žèì‹Æ‚Å offset.inc ‚ðì¬‚µ‚Ä‚à‚炤‚±‚Æ‚Æ
    95  *      ‚·‚é. ˆÈ‰º‚É‚»‚Ì•û–@‚ðŽ¦‚·. ‚È‚¨, ‚±‚Ì•û–@‚ÍM32C‚ÌŠJ”­ŠÂ‹«‚â
    96  *      –½—߃Zƒbƒg‚Ɉˑ¶‚µ‚Ä‚¢‚邽‚ß, ‘¼‚̃^[ƒQƒbƒg‚ðŽg—p‚µ‚Ä‚¢‚éê‡‚Í
    97  *      ‚»‚Ì‚Ü‚Ü“K—p‚Å‚«‚È‚¢.
    98  *
    99  *  1.  makeoffset.c ‚Æ‚¢‚¤ƒtƒ@ƒCƒ‹‚©‚çCƒRƒ“ƒpƒCƒ‰‚ðŽg—p‚µ‚Ä
    100  *      ƒAƒZƒ“ƒuƒŠŒ¾Œêƒtƒ@ƒCƒ‹ makeoffset.a30 ‚𐶐¬‚·‚é.
    101  *      ƒRƒ“ƒpƒCƒ‹ƒIƒvƒVƒ‡ƒ“‚̓J[ƒlƒ‹ƒR[ƒh‚É—^‚¦‚é‚à‚Ì‚Æ“¯‚¶
    102  *      ‚à‚Ì‚ð—^‚¦‚é.
    103  *      ƒ‹ƒlƒTƒX»ƒc[ƒ‹ TM ‚ðŽg—p‚µ‚Ä‚¢‚éê‡‚Í, ƒvƒƒWƒFƒNƒgƒGƒfƒBƒ^‚Ì
    104  *      ¶¬Žè‡ƒrƒ
    105 [‚©‚ç makeoffset.a30 ‚ð‘I‚Ñ, ‰EƒNƒŠƒbƒNƒƒjƒ
    106 [‚Ì
    107  *      ¢•”•ªƒrƒ‹ƒh£‚ð‘I‘ð‚·‚é‚±‚ƂŐ¶¬‚Å‚«‚é.
    108  *      ‚à‚µ‚­‚̓Rƒ}ƒ“ƒhƒvƒƒ“ƒvƒg‚сƒCƒNƒtƒ@ƒCƒ‹‚Æ“¯‚¶ƒfƒBƒŒƒNƒgƒŠ‚É
    109  *      ˆÚ“®‚µ, "make -f ƒƒCƒNƒtƒ@ƒCƒ‹–¼ makeoffset.a30" ‚ð
    110  *      ŽÀs‚µ‚Ä‚à“¯—l‚ÌŒ‹‰Ê‚ª“¾‚ç‚ê‚é. (ƒƒCƒNƒtƒ@ƒCƒ‹‚ÍTM‚ªŽg—p‚µ‚Ä
    111  *      ‚¢‚é‚à‚Ì‚Æ“¯‚¶ƒtƒ@ƒCƒ‹‚ðŽw’è‰Â”\)
    112  *
    113  *  2.  æ‚Ù‚Ç‚Ì 1. ‚̍ì‹Æ‚Å“¾‚ç‚ꂽ, makeoffset.a30 ƒtƒ@ƒCƒ‹‚©‚ç
    114  *      "! BEGIN XXXX"  ‚Å‚Í‚¶‚Ü‚è "! END" ‚ŏI‚í‚Á‚Ä‚¢‚é•”•ª‚ð’T‚·.
    115  *
    116  *      4‰ÓŠ‚ ‚è, ‚»‚ꂼ‚ꏭ‚µ‚¸‚ˆقȂé‚̂ŏ‡‚Éà–¾‚·‚é.
    117  *      (ˆÈ‰º, à–¾’†‚ł̓AƒZƒ“ƒuƒŠŒ¾Œêƒtƒ@ƒCƒ‹‚̃Rƒƒ“ƒgs‚͏Ȃ­)
    118  *
    119  * (1)  \‘¢‘̂̐擪‚©‚烁ƒ“ƒo‚ւ̃IƒtƒZƒbƒg
     80 *      offset.inc の作り方(M32Cターゲット依存部向け)
     81 *
     82 *        GNU Cコンパイラを用いているターゲット依存部については,
     83 *      カーネルのトップディレクトリの下にある util というディレクトリの
     84 *      下に genoffset という perl スクリプトが用意されているので,
     85 *      特に手動で offset.h を作成する必要はない.
     86 *        genoffset は GNU 開発環境を想定して作成されているので,
     87 *      生成されるアセンブリ言語疑似命令や生成規則の異なる他の
     88 *      Cコンパイラにはそのまま適用できない可能性がある.
     89 *        そこで, ここではWindows環境 向けの genoffset を用意せず,
     90 *      作り方をここに記し, 手作業で offset.inc を作成してもらうことと
     91 *      する. 以下にその方法を示す. なお, この方法はM32Cの開発環境や
     92 *      命令セットに依存しているため, 他のターゲットを使用している場合は
     93 *      そのまま適用できない.
     94 *
     95 *  1.  makeoffset.c というファイルからCコンパイラを使用して
     96 *      アセンブリ言語ファイル makeoffset.a30 を生成する.
     97 *      コンパイルオプションはカーネルコードに与えるものと同じ
     98 *      ものを与える.
     99 *      ルネサス製ツール TM を使用している場合は, プロジェクトエディタの
     100 *      生成手順ビューから makeoffset.a30 を選び, 右クリックメニューの
     101 *      「部分ビルド」を選択することで生成できる.
     102 *      もしくはコマンドプロンプトでメイクファイルと同じディレクトリに
     103 *      移動し, "make -f メイクファイル名 makeoffset.a30" を
     104 *      実行しても同様の結果が得られる. (メイクファイルはTMが使用して
     105 *      いるものと同じファイルを指定可能)
     106 *
     107 *  2.  先ほどの 1. の作業で得られた, makeoffset.a30 ファイルから
     108 *      "! BEGIN XXXX"  ではじまり "! END" で終わっている部分を探す.
     109 *
     110 *      4箇所あり, それぞれ少しずつ異なるので順に説明する.
     111 *      (以下, 説明中ではアセンブリ言語ファイルのコメント行は省く)
     112 *
     113 * (1)  構造体の先頭からメンバへのオフセット
    120114 *
    121115 *      ! BEGIN TCB_texptn
     
    123117 *      ! END
    124118 *
    125  *      ã‹L"! BEGIN"‚ÌŒã‚ë‚Ì•¶Žš—ñ‚ªoffset.inc‚Å’è‹`‚·‚éƒVƒ“ƒ{ƒ‹–¼‚Æ‚È‚é.
    126  *      ‚»‚̃Vƒ“ƒ{ƒ‹‚Ì’l‚Í, ŽŸs‚Ìbset–½—ß‚Ì‘æ2ƒIƒyƒ‰ƒ“ƒh‚Ì’l‚Å‚ ‚é
    127  *      0000000eH‚ª‚»‚ê‚É‘Š“–‚·‚é. ‚±‚ꂪ\‘¢‘̂̐擪‚©‚çtexptn‚Ü‚Å‚Ì
    128  *      ƒIƒtƒZƒbƒg’l‚Æ‚È‚é. ‚µ‚½‚ª‚Á‚Ä‚±‚̏ꍇ, offset.inc ‚É‚Í
     119 *      上記"! BEGIN"の後ろの文字列がoffset.incで定義するシンボル名となる.
     120 *      そのシンボルの値は, 次行のbset命令の第2オペランドの値である
     121 *      0000000eHがそれに相当する. これが構造体の先頭からtexptnまでの
     122 *      オフセット値となる. したがってこの場合, offset.inc には
    129123 *      TCB_texptn      .equ    14
    130  *      ‚Æ‚¢‚¤s‚ð‹Lq‚·‚é.
    131  *
    132  * (2)  \‘¢‘̂̃ƒ“ƒo‚ª\‘¢‘Ì‚Å, ‚»‚Ì’†‚̃ƒ“ƒo‚ɑ΂·‚éƒIƒtƒZƒbƒg
    133  *
    134  *      TCB_sp ‚ɂ‚¢‚Ä‚à‚Ù‚Ú“¯—l‚¾‚ª, sp ‚ÍTCB\‘¢‘Ì‚Ì’¼Ú‚Ì
    135  *      ƒƒ“ƒo‚Å‚È‚­TCB\‘¢‘̂̃ƒ“ƒo‚Å‚ ‚éTSKCTXB\‘¢‘̂̃ƒ“ƒo‚Å
    136  *      ‚ ‚é“_‚ªˆÙ‚È‚é. ‚»‚ê‚Å‚à’è‹`‚·‚éƒVƒ“ƒ{ƒ‹–¼‚Æ‚µ‚Ä‚Í
    137  *      TCB_sp ‚̂悤‚É•\Œ»‚·‚é. ƒAƒZƒ“ƒuƒŠŒ¾Œêƒtƒ@ƒCƒ‹‚Å‚Í
     124 *      という行を記述する.
     125 *
     126 * (2)  構造体のメンバが構造体で, その中のメンバに対するオフセット
     127 *
     128 *      TCB_sp についてもほぼ同様だが, sp はTCB構造体の直接の
     129 *      メンバでなくTCB構造体のメンバであるTSKCTXB構造体のメンバで
     130 *      ある点が異なる. それでも定義するシンボル名としては
     131 *      TCB_sp のように表現する. アセンブリ言語ファイルでは
    138132 *
    139133 *      ! BEGIN TCB_sp
     
    145139 *      ! END *
    146140 *
    147  *      ‚̂悤‚É‚È‚è,14H(=20) ‚ª‹‚ß‚é’l‚È‚Ì‚Åoffset.inc ‚É‚ÍŽŸ‚̂悤‚É
    148  *      ‹Lq‚·‚é.
     141 *      のようになり,14H(=20) が求める値なのでoffset.inc には次のように
     142 *      記述する.
    149143 *
    150144 *      TCB_sp  .equ    20
    151145 *
    152  * (3)  ƒƒ“ƒo‚ªŠÖ”‚ւ̃|ƒCƒ“ƒ^‚Å‚ ‚Á‚½ê‡
    153  *
    154  *      ŽŸ‚Í TCB_pc ‚̏ꍇ.
     146 * (3)  メンバが関数へのポインタであった場合
     147 *
     148 *      次は TCB_pc の場合.
    155149 *
    156150 *      ! BEGIN TCB_pc
     
    159153 *      ! END
    160154 *
    161  *      pc ‚à sp ‚Æ“¯‚¶‚­, TCB\‘¢‘Ì‚Ì’¼Ú‚̃ƒ“ƒo‚Å‚Í‚È‚¢‚ª
    162  *      TCB_pc ‚Æ•\Œ»‚µ‚Ä‚¢‚é. ‚±‚ê‚͊֐”‚̃AƒhƒŒƒX‚ðŠi”[‚·‚é•Ï”‚È‚Ì‚Å,
     155 *      pc も sp と同じく, TCB構造体の直接のメンバではないが
     156 *      TCB_pc と表現している. これは関数のアドレスを格納する変数なので,
    163157 *      (((TCB *)0)->tskctxb.pc)();
    164  *      ‚Æ‚µ‚Ċ֐”ŒÄ‚яo‚µ‚̂悤‚É‹Lq‚·‚é‚Əã‹L‚̂悤‚ȃAƒZƒ“ƒuƒŠŒ¾Œê
    165  *      ƒR[ƒh‚ðo—Í‚·‚é. ƒVƒ“ƒ{ƒ‹’è‹`‚·‚éÛ‚̃Vƒ“ƒ{ƒ‹–¼‚͍¡‚Ü‚Å‚Æ
    166  *      “¯‚¶‚­, TCB_pc ‚Æ‚·‚é.
    167  *      ‹‚ß‚é’l‚͍\‘¢‘Ì‚©‚çŠÖ”ƒ|ƒCƒ“ƒ^‚܂ł̃IƒtƒZƒbƒg‚Å‚ ‚è, ã‚Ìmov.l
    168  *      –½—ß‚ÌŒ‹‰Ê‚©‚ç  00000018H(=24) ‚Æ‚È‚é.
    169  *      ‚µ‚½‚ª‚Á‚Ä, offset.inc ‚É‚ÍŽŸ‚̂悤‚É‹Lq‚·‚é.
     158 *      として関数呼び出しのように記述すると上記のようなアセンブリ言語
     159 *      コードを出力する. シンボル定義する際のシンボル名は今までと
     160 *      同じく, TCB_pc とする.
     161 *      求める値は構造体から関数ポインタまでのオフセットであり, 上のmov.l
     162 *      命令の結果から         00000018H(=24) となる.
     163 *      したがって, offset.inc には次のように記述する.
    170164 *
    171165 *      TCB_pc  .equ    24
    172166 *
    173  * (4)  \‘¢‘̂̃ƒ“ƒo‚ªƒrƒbƒgƒtƒB[ƒ‹ƒh‚Å‚»‚̃rƒbƒgˆÊ’u‚à’m‚肽‚¢ê‡
     167 * (4)  構造体のメンバがビットフィールドでそのビット位置も知りたい場合
    174168 *
    175169 *      ! BEGIN TCB_enatex
     
    177171 *      ! END
    178172 *
    179  *      ¡‚Ü‚Å‚Æ“¯—l, BEGIN ‚ÌŒã‚Ì•¶Žš—ñ‚ðƒVƒ“ƒ{ƒ‹–¼‚Æ‚·‚é.
    180  *      ‚±‚±‚Å‚ÌTCB_enatex‚Ì’l‚͍\‘¢‘̂̐擪‚©‚çƒrƒbƒgƒtƒB[ƒ‹ƒh‚ðŠÜ‚Þƒo
    181  *      ƒCƒg‚܂ł̃IƒtƒZƒbƒg‚Å, M32C‚̃rƒbƒg–½—߃AƒhƒŒƒbƒVƒ“ƒO‚ÍŽw’è‚Å‚«
    182  *      ‚éƒrƒbƒgˆÊ’u‚ª0‚©‚ç7‚ÌŠÔ‚ÉŽû‚Ü‚é‚悤‚ɃAƒNƒZƒX‚·‚éƒAƒhƒŒƒX‚É“K“–
    183  *      ”‚ª‰Á‚¦‚ç‚ê‚é‚Ì‚Å cH+1(=13) ‚Æ‚È‚Á‚Ä‚¢‚é. ‚Ü‚½, ƒrƒbƒgƒtƒB[ƒ‹ƒh
    184  *      ’†‚̍ʼnºˆÊƒrƒbƒg‚©‚ç‚̃rƒbƒgˆÊ’u‚Í 6‚Æ‚È‚é.
    185  *      ˆÈã‚æ‚莟‚̂悤‚ɏ‘‚­‚±‚Æ‚ª‚Å‚«‚é.
     173 *      今までと同様, BEGIN の後の文字列をシンボル名とする.
     174 *      ここでのTCB_enatexの値は構造体の先頭からビットフィールドを含むバ
     175 *      イトまでのオフセットで, M32Cのビット命令アドレッシングは指定でき
     176 *      るビット位置が0から7の間に収まるようにアクセスするアドレスに適当
     177 *      数が加えられるので cH+1(=13) となっている. また, ビットフィールド
     178 *      中の最下位ビットからのビット位置は 6となる.
     179 *      以上より次のように書くことができる.
    186180 *
    187181 *              TCB_enatex      .equ    13
Note: See TracChangeset for help on using the changeset viewer.