• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:仮想ベクタテーブルについて)

仮想ベクタテーブルとは?

pyonmaeの回答

  • pyonmae
  • ベストアンサー率64% (40/62)
回答No.2

こんにちは。 たびたびすみません。 ROMベクタ方式に対する、仮想ベクタ方式のメリットは、Flash焼きこみ回数云々というより、もっと広い意味で、「やらなくてもいい、無用な手間が省ける」ですかねぇ。。。 逆に言うと、ROMベクタだと、やらなくてもいい、無用な手間が発生すると思うんですが。 繰り返しになりますが、どうしてそんなに使いたくないのかが分からないです。 理由はないんですか。そうなんですか・・・? しかしながら、プロセッサがH8Sとなると、事情がちょっと変わってきますね。 どっちかというとJTAGデバッグが一般的なような。 デバッガが準備できるなら、素直にそっちにすれば、仮想がどうとかいう問題も含めて色々解決しますが、どうでしょう。 でも、少々カネがかかってくるし、それこそFlash書き込み回数がハネ上がるので、避けたくなる気持ちも、分かります。 そうなると、H8Sで仮想ベクタは準備が少々面倒くさいので、場合によっては質問者さんの方式(ROMベクタ)がベストかも知れません。 色々検討してみてください。

danna1123
質問者

お礼

参考になりました。 どうもありがとうございました。

関連するQ&A

  • マイコンのメモリマップについて

    マイコンに限った話ではないかとは思いますが、現在マイコンプログラムの勉強をしておりますが、マイコンのデータシートのメモリマップを見ると先頭番地からフラッシュメモリのマッピングがあり、その次に各種レジスタやRAMのマッピングがなされています。 (1)このメモリマップというものは論理アドレスと物理アドレスの対応表のようなものだと解釈しておりますが、この対応表自体はRAMの一部に格納されているのでしょうか? (2)例えばフラッシュメモリの物理アドレスが00~FFまであり、RAMの物理アドレスも00~FFだった場合で且つ フラッシュメモリの後ろにRAMのマップを作る場合、メモリマップの中の論理アドレスは00~2FFまでで物理アドレスはフラッシュメモリの部分は00~FF,RAMのブツリアドレスも00~FFになるという理解で良いですか? ひょっとするとかなり見当違いをしている質問かもしれません。 よろしくお願いします。

  • 割り込みベクターをC言語で書きたい

     皆さん、有難う御座います。時々質問させて頂いています。  今回は、ベクターアドレスをC言語で書く方法について質問します。  ルネサスのH8マイコンを使っています。モニターを使うとRAM上に割り込みの仮想ベクターを作れます。  仮想ベクターには、割り込みのジャンプ先アドレスが書かれます。  現在アセンブラで書いているのですが、C言語で書く方法は無いでしょうか。  二つの方法で書きたいと思っています。  アセンブラで次の二つの方法に相当するC言語命令を知りたい。 (1)ORGとEQU命令を使った方法 (2)ムーブ(Z80ならロード)命令で関数のアドレスをメモリに書く方法  ルネサスにはHEWと言うソフトが有りますが、HEW特有の命令によらず、一般的なコンパイラが持っている機能で実現したい。  以上宜しくお願いします。

  • H8 3687 のベクターテーブルについて

    H8 3687 のベクターテーブルについて質問なんですが、タイマの割込み処理を使用したいんですが、 Sample.cの中に#pragma interrupt timer0_imia(vect=24) ↑                        ↑ プロジェクト名               割込み関数 とすると以下のようなエラーが出て正しくビルドできません。 L3102 (F)Section contents overlap in absolute section "セクション" 絶対アドレスセクションのセクション内データアドレスが重複しています。 ソースプログラムを修正してください。 どうすれば解決できるかわかりません。 ではよろしくお願いします。

  • H8Sで割り込み発生時の飛び先アドレスがRAM上にある場合の割り込み関数の記述方法

    ルネサスのマイコンH8Sのプログラムを組んでおります。 プログラムの構成がBoot部分とアプリケーション部分に分かれており、 Bootはアドレス0番地から、アプリは3000番地以降の領域を使用するようになっています。 完成されたBootを使用してアプリケーションのプログラムを組まなければならなく、また、Bootは変更できないことになっています。 このBootの中のベクターテーブル上で、割り込みが発生した場合の飛び先のアドレスがRAM上になるように設定してあります。 このため、アプリケーションソフトでは、 割り込みが発生した場合のRAM上の飛び先に FLASH ROM上の指定したアドレスにジャンプする命令を書き、 FLASH ROMのジャンプ先には、実行したい関数を書きたいのですが、 (1)RAM上の特定のアドレスからFLASH ROM上の指定したアドレスにジャンプさせる方法。 (2)FLAH ROM上の指定したアドレスに関数を記述する方法。 を知りたいのですが、 どなたか教えて頂けないでしょうか? 開発環境はHew4 言語はC言語を使用しております。 私自身が理解不足であるため質問内容が伝わりにくいかと思いますが、 宜しくお願い致します。

  • ベクタアドレスとは?

    マイコン勉強中の者です。 割り込みが発生するとあらかじめ決められたアドレスを参照する、というのは理解できました。 H8/3694の場合、リセット割り込みのベクタ番号は0で、ベクタアドレスは【H"0000~H"0001】と記載されています。 この【H"0000~H"0001】がよくわかりません。 このH0001またはH0001を参照するとリセット処理(パワーオンリセット?)のプログラムが書かれているんだと解釈しています。 では、H"0000を参照?それともH"0001を参照?どちら?と考えてしまいます。 恐らく私の考え方が間違っているのだと思うのですが・・・。 【H"0000~H"0001】の意味を御教授ください。 よろしく御願いいたします。

  • 仮想記憶システムの問題で…

    主記憶容量-----------------64Kバイト 仮想アドレス空間容量-------8Mバイト ページサイズ---------------8Kバイト ページ追い出しアルゴリズム-LRU (1)ページテーブルの各エントリは物理ページアドレスと9ビットの付加情報から構成されている。ページテーブルのサイズを求めよ。 (2)現在、主記憶上にはどのページも存在していないとする。この状態で、以下に示す仮想ページアドレスに対応する仮想ページが順にアクセスされた。  0, 1, 2, 3, 4, 5, 6, 7, 0, 3, 8, 4, 1, 0, 8 このときのページフォルトが発生する回数を求めよ。 …の2つがどうしてもよく分からないので、解説付きで教えてください。 よろしくお願いします。

  • Windowsの仮想メモリシステムについて

    こんにちは。 OSは現在、WindowsVistaと、Windows7を使っています。 こういったWindows系OS全てに共通している、仮想メモリなどのメモリ関係の用語について、かなり詳しく調べたのですが、最近、それらをきちんと理解できていない事に気づきましたので、今回の質問をさせて頂きます。 まず僕は、メモリ関係の各用語について、以下のように解釈しています。 ---------------------------------------------------------------------------------- ●物理メモリ 基本的にはRAM上にあるメモリの事であり、OSによってアクセスされる。 OSは起動後、各物理メモリに、物理アドレス(物理アドレス空間におけるアドレス)を割り当てる。 ●仮想メモリ領域 仮想メモリ領域は、各プロセスが、メモリを使うためにアクセスするアドレス空間の事であり、物理メモリと、次で説明するページファイルで構成されてる。 現在のWindows系OSでは、プロセスが起動すると、そのプロセスとセットになる、4GBの仮想メモリ領域 (仮想アドレス空間とも呼ばれる) が割り当てられ、実行するプログラムコードと、そのコードが参照して操作するデータが、そこにマップされる。 プロセスの持つ仮想メモリ空間4Gバイトの内、ユーザが使用可能なメモリ領域は、下位2Gバイトであり、上位2Gバイトはシステムによって使用される、「カーネルメモリ」となる。 OSと、コンピュータ上の専用のハードウェアコンポーネントは、プロセスが使用している仮想アドレスを、物理アドレスに変換する処理を行っている。 Windowsの場合、仮想メモリの各フラグメントを、「ページ」といい、サイズは通常 4KB である。 ●ページファイル 物理メモリの不足を補うために、HDDに用意されたメモリ領域の事である。 デフォルトではC:\pagefile.sys というファイルが、ページファイルとなっている。 これによって、RAM容量よりも大きなサイズの、仮想メモリ空間を利用することができる。 ページファイル上に置かれたページにアクセスするには、そのページをRAM上に読み込まなければならないため、現在使われていないRAM上のページとの入れ替えが、OSによって行われる。 このとき、RAM上の不要なページをページファイルに書き出し、RAMから消去することを「ページアウト」あるいは「スワップアウト」と呼び、必要なページをページファイルから読み出し、RAM上に配置することを「ページイン」あるいは「スワップイン」という。 ●コミットページ(コミットチャージ) プロセスに割り当てられた、使用可能な仮想メモリページ全てを表す。 これには、RAMからページアウトされたメモリページも含まれまれる。 コミットページの合計サイズと現在使用中のサイズは、タスクマネージャのパフォーマンスタブにある[ページファイル]の部分で確認できる。 この[ページファイル]という部分は、上で説明したページファイルの事ではなく、 RAMとページファイルの両方に存在している、メモリページのサイズを意味する。 ●ワーキングセットページ プロセスから最も頻繁かつ直近にアクセスされる、常にRAM上にあるメモリページの事である。 ワーキングセットページには、そのプロセスしか使えない部分(プライベートワーキングセット)と、他のプロセスと共有可能な部分がある。 共有可能なワーキングセットは、他のユーザープロセスで、物理メモリが不足し始めた場合に使用できる。 ----------------------------------------------------------------------------------- まず、以上の解釈で、おかしいと思う部分がありましたら、どしどし突っ込んで下さい。 次に、以下のようなコードブロックを含む、C++プログラムを作成して実行しました。 ------------------------------------------------------------ char *p; for(int i=1; i<=2000 ; i++) p=new char[1024*1024]; ------------------------------------------------------------ このコードブロックは、pというポインタに対し、1024×1024B = 1MB のメモリの割り当て作業を、2000回行います。 つまり、このプログラムをビルドして作成された、a.exeという実行ファイルを実行すると、 約2000MBのメモリがa.exeに割り当てられるという事が予想できます。 プログラムの実行中に、タスクマネージャのプロセスタブにある、a.exeの行を見ていると、 メモリに関する列項目値は、 コミットサイズ:2012.928KB=1965.75MB ワーキングセット:4616KB=4.51MB プライベートワーキングセット(a.exeしか使えないワーキングセット):2656KB=2.59MB となっていました。 ワーキングセットページのサイズが4.51MBとしかない事から、約2000MBのメモリの割り当ての大半は、RAM上にはないメモリページ、つまりページファイル上のメモリページを使って行われたのだと、僕は思いました。 ところが、ページファイル上のメモリページの使用量を、専用のソフトで調べてみると、 a.exeの実行前から全く変化していなかったので、実際はページファイル上のメモリページを使用しなかったのだという事になります。 では一体、どこにあるメモリページが、a.exeで使用されたのかという事になります。 この件について、皆さんはどう思われるでしょうか? 長くなりましたが以上です。 何か御存じの方がいらっしゃれば、是非、アドバイスして頂きたく思います。 では、よろしくお願い致します。

  • フラッシュメモリのリードライト

    フラッシュメモリについて教えてください。 あらかじめフラッシュの’あるエリアA’にフラッシュの’別のエリアB’を書き換えるプログラムを書いておいての実行することは可能でしょうか? 読みながら書き換えになりますがアドレスが異なるので可能のような気がするのですがどうでしょうか?

  • 認識されないRAMを仮想HDDに割り当てられるの?

    はじめまして。最近ThinkPad X61を購入予定です。 メモリを2G×2枚増設しても、仕様では3Gしか認識しないそうです。 そこで認識されない1GをRamPhantomやRAMDisk Tweakerなど仮想HDDとして利用できないかなと考えております。 うまくいけば、1GのHDD+メモリ3G(マイコンのプロパティから確認?)にになります。 でも失敗すると、1GのHDD+メモリ2Gになってしまうかなと予想しています。 実際にやってみたことがある方や、環境がある方、 OS32bitのメモリアドレス制限に詳しい方など、何でもいいので知識を貸していただけたらと思います。 参考Link I/OデータのRamPhantom http://www.iodata.jp/prod/memory/list/2004/ramphantom/index.htm インターコムのRAMDisk Tweaker http://www.intercom.co.jp/ramdisk/index.html ERAMフリー http://hp.vector.co.jp/authors/VA000363/release/index.htm http://hp.vector.co.jp/authors/VA000363/test/index.htm AR RAM Disk フリーソフト http://www.forest.impress.co.jp/article/2002/04/12/okiniiri.html

  • 割り込みベクタの機能と実現方法

    (d)割込ベクタの機能と実現方式を説明せよ。 (1)機能 割り込みには、ハードウェア割り込み、ソフトウェア割り込みがあるが、割り込みベクタによって、どのような割り込みが発生したかが分かるようになっている。割り込みの発生要因によって、実行される処理(割り込みハンドラーと呼ばれたりサービスルーチンと言われる)はシステムによって決められている。 (2)実現方法 ベクタテーブルを作成する必要がある。以下それについて具体的に説明する。 多数の割り込み要因がある場合,それぞれに対応する割り込みサービス・ルーチンを作っておく必要がある.そして,割り込み要求信号が発生したときには,要求を出している要因に応じて,正しい割り込みサービス・ルーチンを呼び出さなければならない.そのために用いられるのが割り込みベクタ・テーブルである.それぞれの割り込み要因は,割り込みが受け付けられると,割り込み元を示す番号(割り込みベクタ)を送信する.メモリの中には,この番号と割り込みサービス・ルーチンの先頭アドレス(あるいはそのアドレスへの分岐命令)を対応付けた表(テーブル)を用意しておく.この対応表を,割り込みベクタ・テーブルと呼ぶ.  割り込みは元のソフトウェアの実行を強制的に中断してしまう.このため,特に中断されたくない処理を実行している場合には,その間だけ割り込みを禁止にする機能がある.  また,割り込み要因の中には,割り込み要求を常時有効にしたい要因もあるが,特定の局面でだけ有効にしたい要因もある.そのため,各割り込み要因ごとに,割り込みの受付を無効にする割り込みマスクの機能がある.割り込みマスクで無効にできる割り込みはマスカブル割り込み,割り込みマスクで無効にできない割り込みをノン・マスカブル割り込み(NMI)と呼ぶ.  特に緊急性が高い割り込みにはNMIを用いる. いかがでしょうか? 実現方法のところが答えられていますでしょうか?