スレ立てるまでもない質問はここで 160匹目

■ このスレッドは過去ログ倉庫に格納されています
2022/05/10(火) 14:24:35.29ID:+9FnNLoT
この板はプログラムを作る人のための板です。
あらゆる質問はまず
スレ立てるまでもない質問はここで
スレにしてください。

次スレは>>980が立てること

【前スレ】
スレ立てるまでもない質問はここで 159匹目
https://mevius.5ch.net/test/read.cgi/tech/1644673480/
426419
垢版 |
2022/07/23(土) 00:43:15.10ID:6LmREh/f
>>420
開発時にメモリ上にどのようにデータを配置するかの指定は今は一般的にリンカの仕事
パソコンのプログラムはもちろん、マイコンでも今はリンカに対して配置するアドレスを
指定するのが一般的
ルネサスの場合、現行のRXマイコンやRAマイコンなどもアドレスはリンカに指示する

しかしレガシーな開発環境だとアセンブラコード内にアドレスを直打ち出来たりして
>>416の例はそのケースだと思う。今時の開発環境でこのパターンはレアと
思われるので理解を深める必要はないかも

H8の開発環境はないのでRXマイコン(CS+)の例だけど
RXマイコンのリセットベクタのアドレスは0xFFFFFFFCからの4バイト
リセットが解除されるとこのアドレスの値がPCへロードされる(=書かれているアドレスから実行が始まる)
ttps://uploader.purinka.work/src/20992.png
右のメモリダンプを見ると0xFFFFFFFCの値は0000C0FF。リトルエンディアンなので並べ替えると
0xFFC00000となりこのアドレスから実行が開始される
左の逆アセンブルリストで0xFFC00000を見るとPowerON_Reset_PC関数がある
PowerON_Reset_PC関数のソースコードを見ると
ttps://uploader.purinka.work/src/20994.png
#pragma sectionでResetPRGセクションへ配置するよう指示されている(91行目~)
Pはセクション種別で2文字目以降がセクション名
そしてリンカの設定を見ると
ttps://uploader.purinka.work/src/20993.png
ResetPRGセクションは0xFFC00000が指定されていて上記アドレスと一致する
427419
垢版 |
2022/07/23(土) 00:44:12.83ID:6LmREh/f
>・このCPUはリセットされると0番地から実行を開始する
正確にはこれは間違っている。正しくは0番地に書いてあるアドレスから実行が開始される
リセットベクタというかベクタテーブルには大きく分けて2パターンあって
・該当するアドレスに書いてある命令を実行する
・該当するアドレスにアドレスから実行する
通常はこのどちらか。H8は後者。前者は古い物に多くて、新しめのはほとんど後者

>・H'0000番地の中にH'0400が入っているについて、その入れる処理は、どこがそうなっているんですか?
>.SECTION $VECT0,DATA,LOCATE=H'0000
>.DATA.L _PowerON_Reset ←PowerON_Resetのアドレスが配置される実データ
この部分が該当箇所。最終的なデータを出力しているのはアセンブラ
上にも書いたけどこのような書き方は今の主流ではない

何となくだけど開発ツールの扱いもまだ不慣れなのかな。自分も使いこなせているとは言い難いけど
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況