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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- システム CPUの問題について 2 2022/07/09 12:04
- CPU・メモリ・マザーボード CPUで動作しているOSについての質問です。 3 2023/05/05 00:10
- その他(自然科学) 科学技術計算の仕事について 2 2023/02/04 18:09
- IT・エンジニアリング シェルスクリプトは誹謗中傷対象ですか? 3 2022/04/22 09:40
- 仕事術・業務効率化 効率的な勉強方法(分野問わず)を教えてください 1 2023/08/16 01:33
- その他(プログラミング・Web制作) 次に、楽天のアジャイル就活に参加して、1日で内定を獲得できる。私は大企業に就職できる? 2 2022/04/17 13:38
- C言語・C++・C# C言語の質問です。 以下の命令を実行するプログラムを作りました ①文字列aとbの長さを表示 ②aとb 1 2022/04/29 15:35
- ノートパソコン Windows 10 動作改善方法 6 2023/04/26 22:30
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ビットをローテートするプログ...
-
newしないオブジェクトについて
-
c言語のポインタへの文字列入力...
-
プログラムが途中で強制終了し...
-
allocってなんですか?
-
構造体でchar name[]と*nameの...
-
C言語 mallocとfreeについて
-
c言語のメモリリークについての...
-
大容量の静的な確保の限界値
-
mallocでメモリーを確保しよう...
-
配列の添え字の最大数とは?
-
ポインタのポインタの初期化法
-
free関数で動作が止まる
-
reallocの断片化対策について
-
VBからMFC-DLL呼び出し
-
C++で、メンバもヒープに確保さ...
-
ヒープメモリの解放について
-
malloc関数(strtok関数の自作版...
-
win32APIのHeapAlloc()の使い方...
-
文字列を格納する配列を、動的...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
c言語のポインタへの文字列入力...
-
mallocについて
-
newしないオブジェクトについて
-
allocってなんですか?
-
配列の添え字の最大数とは?
-
ヒープメモリの解放について
-
プログラムが途中で強制終了し...
-
Accessで、メモリを開放するタ...
-
malloc呼び出し時のセグメンテ...
-
ビットをローテートするプログ...
-
C++で、メンバもヒープに確保さ...
-
void*型のデータサイズ
-
入れ子になった構造体について
-
C言語に関する質問
-
スタック破壊の上手な見つけ方...
-
mallocで確保するメモリの領域...
-
C++のnewで確保したメモリーの...
-
指定したメモリアドレスの値の...
-
ヒープ領域の限界値設定
-
構造体でchar name[]と*nameの...
おすすめ情報