こんにちは。
みほといいます。
構造体のポインタ配列を指定メモリに割り当てたいのですが、出来ません。
どこが悪いでしょうか?
下にソースプログラムを書きます。
----------------------------------------------------------------------------
//rxf[0]をメモリエリア0x00001000に割り当てたい 0x00001000はRAMです。
//rxf[1]をメモリエリア0x00002000に割り当てたい 0x00002000はRAMです。
//rxf[2]をメモリエリア0x00003000に割り当てたい 0x00003000はRAMです。
//rxf[3]をメモリエリア0x00004000に割り当てたい 0x00004000はRAMです。
//rxf[0].fifo[0]が 0x00001000番地に割り当て
//rxf[0].fifo[1]が 0x00001001番地に割り当て
//rxf[0].fifo[511]が0x000011FF番地に割り当て
//rxf[0].rtが 0x00001200番地に割り当て
//構造体です
struct type_fifo{
unsigned char fifo[512];
int rt;
};
//構造体のポインタ配列です。
struct type_fifo *rxf[4]; //グローバルです
#define ADR_MAP0 0x00001000
#define ADR_MAP1 0x00002000
#define ADR_MAP2 0x00003000
#define ADR_MAP3 0x00004000
void main(void) {
//rxf[0] を 固定メモリADR_MA0に割り当てる
rxf[0] = (struct type_fifo *)(ADR_MA0);
//rxf[0].fifo[0] に データ0xDDを代入する。
rxf[0]->fifo[0] = 0xDD;
}
構造体のポインタ配列を指定メモリに割り当てたい
Re: 構造体のポインタ配列を指定メモリに割り当てたい
何が、どのように、できないのでしょうか。みほ さんが書きました: 構造体のポインタ配列を指定メモリに割り当てたいのですが、出来ません。
コンパイルができないんだったらコンパイルエラーのメッセージを載せてほしいし、
実行ができないんだったら実行時のエラーメッセージを載せてほしいです。
単に「できません」というのは、何も言ってないのと同じではないかなぁ、と思ってみたりするわけで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。
プログラムは思ったとおりには動かない。書いたとおりに動く。
Re: 構造体のポインタ配列を指定メモリに割り当てたい
boxさま、h2so5さま
お返事ありがとうございます。
今日、試したら出来ていました。
勘違いをしていました。
printf("%08X ",&rfx[0]);で表示すると、0x00001000とでるはずだと勘違いしていました。
表示されるのは&rfx[0]へのポインタを格納しているメモリが出ていたため、
それが0x00001000じゃないからおかしいと勘違いしてました。
それとメモリ表示コマンドで見ているアドレスを間違えていました。
0x00001000をみたら、0xDDが書かれていました。
ちなみに、組み込み基板という学校にある小さなコンピュータでやってます。
それを232というコネクタでパソコンと接続して、コンソールというアプリから実行やメモリ表示のコマンドをやっています。
使いにくいです。
h2so5さん
すいません。
転記ミスです。
rxf[0] = (struct type_fifo *)(ADR_MAP0);
でした。
コンパイルと実行は出来ていました。
お返事ありがとうございます。
今日、試したら出来ていました。
勘違いをしていました。
printf("%08X ",&rfx[0]);で表示すると、0x00001000とでるはずだと勘違いしていました。
表示されるのは&rfx[0]へのポインタを格納しているメモリが出ていたため、
それが0x00001000じゃないからおかしいと勘違いしてました。
それとメモリ表示コマンドで見ているアドレスを間違えていました。
0x00001000をみたら、0xDDが書かれていました。
ちなみに、組み込み基板という学校にある小さなコンピュータでやってます。
それを232というコネクタでパソコンと接続して、コンソールというアプリから実行やメモリ表示のコマンドをやっています。
使いにくいです。
h2so5さん
すいません。
転記ミスです。
rxf[0] = (struct type_fifo *)(ADR_MAP0);
でした。
コンパイルと実行は出来ていました。