A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
PICの知識はありませんが、単純に固定アドレスのメモリを参照するという質問ですよね?
typedef unsigned char byte;
/* 連続した領域を構造体で定義するケース */
struct mmio1_t
{
byte reg0;
byte reg1;
};
#define mmio1 ((volatile struct mmio1_t *)0x0000)
#define mmio1R (*mmio1)
/* 連続した領域を配列として使用するケース */
#define mmio2 ((volatile byte *)0x1000)
/* 個別に定義するケース */
#define mmio3 (*(volatile byte *)0x2000)
#define mmio4 (*(volatile byte *)0x2001)
/* サンプル */
int main()
{
mmio1->reg0 = mmio2[0];
mmio2[1] = mmio3;
mmio4 = mmio1R.reg1;
return 0;
}
No.2
- 回答日時:
OSがないなら、Cで全部メモリー管理するんでしょうか?
ちょっと危ない気もしますが、やるなら、メモリーアロケート関数をいじるとかが必要かもしれません。ライブラリーのソースがついてくるならいいんですけど、ないなら、標準ライブラリーを全部捨てないとダメかもしれません。(内部でalloc関数を呼ぶので)
いまいち良くわかってないのですが、そのままだとベクター領域を壊すって事なんでしょうか? であれば、自動割り当てを細工するしかないと思います。コンパイラーのオプションかリンカーのオプションでなどで対応できないでしょうか。恐らく、単純に2つの開始アドレス(ラベル)で、スタティック領域とダイナミック領域が管理されているだけだと思います。
C言語の中でプログラムの開始アドレスを知るのは、関数へのポインターを使います。
void vectorA(void) {
:
}
#define INT_VECTOR_ORG 0x00001000
int initialize() {
void (*intVector)(void)[];
intVector = INT_VECTOR_ORG;
intVector[xx] = vectorA;
}
こんなイメージ。
コンパイラー通してないので不正確かも。それと、キャストしないと怒られると思いますが、キャストに自信がないので省略してます。
参考URL:http://www.systeminfinity.co.jp/sub/tech/doc/c_p …
No.1
- 回答日時:
絶対アドレスで指定したいんですかね?
コンパイラーの自動割り当てを使わないなら、自分で計算式を作るしかないかな。
単純なコンパイラーなら、、、
#define BEGIN 0x80000000
#define A BEGIN
#define B (BEGIN + sizeof(struct atype))
:
:
#define ORG_SIZE (Z + sizeof (struct ztype))
orginalAreaInit() {
OSのアロケートコール(ORG_SIZE);
}
accessA (int x) {
(int *)A = x;
}
こんな感じ?
面倒なら、ポインター代入で。
ただ、sizeofがどういう値を指すのかはコンパイラー依存だったり、アラインを考えないとまずいことになりますんで、実装への依存性が高まります。要は、通常ポインターにはアドレスが入りますんでそれを自分で制御する事になります。(言語仕様にありませんので何が起きても不思議じゃないです。検証してからやってください)
この回答へのお礼
お礼日時:2007/02/21 18:56
回答ありがとうございます。
質問なのですが今回のPICボードにはOSが乗っていません。
ベクター領域を指定してプログラムメモリ確保したいのですが
C言語のコマンドでプログラムメモリの指定がわかりません。
その辺についでアドバイスを頂けないでしょうか。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
void*型のデータサイズ
-
c言語のポインタへの文字列入力...
-
リスト構造をファイルに出力
-
dllを使用しVB側に文字列...
-
指定したメモリアドレスの値の...
-
callocの処理速度
-
行数の変動にも対応したファイ...
-
DLLのマルチスレッドの動作につ...
-
文字列ポインタとgets関数の関...
-
関数から配列を返すには?
-
ExcelVBAで質問です。離れた二...
-
C言語 構造体の中に共用体を定...
-
VBAのプログラムで、DIAG = 1# ...
-
System.IO.Directory.GetFiles...
-
C言語のプログラムについてです
-
「#undef」と「#define」の使い...
-
C言語 strstrの実装
-
define で 配列
-
fopne で失敗する原因
-
C言語にて構造体のメンバがNULL...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
allocってなんですか?
-
newしないオブジェクトについて
-
c言語のポインタへの文字列入力...
-
ヒープメモリの解放について
-
配列の添え字の最大数とは?
-
stringの最大サイズ
-
C++で、メンバもヒープに確保さ...
-
プログラムが途中で強制終了し...
-
void*型のデータサイズ
-
malloc呼び出し時のセグメンテ...
-
スタック破壊の上手な見つけ方...
-
ビットをローテートするプログ...
-
構造体でchar name[]と*nameの...
-
mallocについて
-
GDI+におけるメモリの開放について
-
ポインタのポインタの初期化法
-
構造体を使ったファイルの読み込み
-
C言語 mallocとfreeについて
-
HEAP に関すること
-
VBからMFC-DLL呼び出し
おすすめ情報