構造体のポインタ配列を指定メモリに割り当てたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
みほ

構造体のポインタ配列を指定メモリに割り当てたい

#1

投稿記事 by みほ » 13年前

こんにちは。

みほといいます。

構造体のポインタ配列を指定メモリに割り当てたいのですが、出来ません。

どこが悪いでしょうか?

下にソースプログラムを書きます。
----------------------------------------------------------------------------

//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;

}

box
記事: 2002
登録日時: 13年前

Re: 構造体のポインタ配列を指定メモリに割り当てたい

#2

投稿記事 by box » 13年前

みほ さんが書きました: 構造体のポインタ配列を指定メモリに割り当てたいのですが、出来ません。
何が、どのように、できないのでしょうか。
コンパイルができないんだったらコンパイルエラーのメッセージを載せてほしいし、
実行ができないんだったら実行時のエラーメッセージを載せてほしいです。

単に「できません」というのは、何も言ってないのと同じではないかなぁ、と思ってみたりするわけで。
バグのないプログラムはない。
プログラムは思ったとおりには動かない。書いたとおりに動く。

アバター
h2so5
副管理人
記事: 2212
登録日時: 13年前
住所: 東京
連絡を取る:

Re: 構造体のポインタ配列を指定メモリに割り当てたい

#3

投稿記事 by h2so5 » 13年前

みほ さんが書きました:

コード:

#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);
とりあえず、ADR_MA0は定義されていないのでコンパイルエラーになるかと。

みほ

Re: 構造体のポインタ配列を指定メモリに割り当てたい

#4

投稿記事 by みほ » 13年前

boxさま、h2so5さま

お返事ありがとうございます。
今日、試したら出来ていました。
勘違いをしていました。

printf("%08X ",&rfx[0]);で表示すると、0x00001000とでるはずだと勘違いしていました。
表示されるのは&rfx[0]へのポインタを格納しているメモリが出ていたため、
それが0x00001000じゃないからおかしいと勘違いしてました。

それとメモリ表示コマンドで見ているアドレスを間違えていました。
0x00001000をみたら、0xDDが書かれていました。

ちなみに、組み込み基板という学校にある小さなコンピュータでやってます。
それを232というコネクタでパソコンと接続して、コンソールというアプリから実行やメモリ表示のコマンドをやっています。
使いにくいです。

h2so5さん

すいません。
転記ミスです。
rxf[0] = (struct type_fifo *)(ADR_MAP0);
でした。
コンパイルと実行は出来ていました。

閉鎖

“C言語何でも質問掲示板” へ戻る