[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(toppers-users 1362) Re: jsp-1.4 armv4 のstart.S について



小南です。

On Wed, 28 Jan 2004 12:30:52 +0900
bartok at bb-west ne jp wrote:

> 野口です。お世話になります。
> 
> > しかしsample1.cを実行させるとIRQ_Handlerが呼ばれる、またstart.Sで
> > irq_exception->IRQ_Handlerにしても動作が変らないということですので、ベクターテーブル
> > の書換えがかなり初期化のかなり早い段階で行なわれているのではないかと
> > 推測されます。
> 
> 私はアドレス 0 からのベクタは rom 前提で書き換えないものだと
> 思っていたのでそもそもこういう発想が欠落していました。
> IRQ_Handler を登録しているのは stub 用のコードだろうと早合点していました。

** Cut quoted 2 lines by the mail filter. **

少しはお役に立てたようでうれしいです。
私はPC、WSのソフト開発の経験が長いため、逆にメモリというとついついRAMのみを考えてしまい、ROMを無視してしまいがちです。PC、WSの場合はブートの時ぐらいしかROMに用は無いので。
しかしこれらはCPUではなくシステムに依存することですから、ROMにせよRAMにせよ決め付けてはいけませんね。

> 
> 小南さんのおっしゃる通り cpu_initialize () で
> arm_vector_add に*_vector, arm_handler_add に*_exception のアドレスが
> 登録され、 arm_install_handler (IRQ_Number,IRQ_Handler) で
> irq_vector の irq_exception が IRQ_Handler に書き換えられることが確認できま
> した。
> 
> cpu_initialize () 実行後 arm_vector_add は
>     {0x20, 0x24, 0x28, 0x2c, 0x30, 0x34, 0x38, 0x3c}
> となりました。これらは*_vector のアドレスです。

** Cut quoted 34 lines by the mail filter. **
詳しい解説有難うございます。
start.Sのldrについては手元の「TECHIvol.18 ARMプロセッサ入門」でどういう命令か
までは確認しました。第2オペランドはアドレシングモードを表すとされたのですが、start.Sでの表記からは
どれに対応するかが検討がつきませんでした。「arm用gasの表記ルールを確認しなければならないかな」と思いつつ、
そのままにしてしまいました。

細かいことですが、
>     pc      offset  げた    sizeof(UW*) * i     arm_vector_add[i]
>     0x00 +  0x018 + 8 +     0x00                = 0x20

の部分のpcは単にメモリのアドレスを示すものであり、ベクタテーブルの書換え処理でその値を加算(+)する必要は無いですよね。
cpu_initialize()ではPCの値は直接関係しないものと考えてよろしいですか。

----------- 
小南 靖雄
ykominami at nifty com
(NBC00224 at nifty com)