実現したいこと
通常変数を作成するとランダムでアドレスが割り振られますが、そのアドレスを自分自身で指定したいです。
#追記
マイコンのCPUのメモリマップを参照して、RAMやCPU内のキャッシュ、ROM(メモリマップからアクセスできないかもしれません)それぞれに割り当てられたアドレス内で、アドレスを任意で指定してデータを代入したいです。
なぜ必要か(追記しました)
メモリに放射線を照射するとSEUと呼ばれるメモリのビット反転が起こることがあります。
この頻度を確かめるためにRAMやeMMCやCPU内のメモリ(キャッシュ)に一定値データを書き込み、一定時間後に読み込むことで書き込んだデータと読み込んだデータを比較するプログラムを作成しようと考えています。
#試したこと
ポインタのアドレスを指定することは出来ましたが、下のプログラムのようにポインタ変数の指すアドレス内に値を代入すると、VSCode上ではコンパイルができたものの結果が出力されませんでした。
「 gcc -o test test.c 」はできましたが「 ./test 」を実行しても何も表示されませんでした。
test.c
1#include <stdio.h> 2 3int main(void) 4{ 5 int *var = (int*)0x40001000; 6 *var = 5; 7 printf("%d\n",*var); 8 printf("%p\n",var); 9 return 0; 10}
参照 : メモリ内の特定の絶対アドレスに変数を配置する方法(GCCを使用)
環境(追記しました)
マイコンで試す前にPC上でテストしていました。
PCでの環境
・Widows10
・Visual Studio Code
・GCC
NXP社製マイコン i.MX8MMの環境
・Linux
回答2件
あなたの回答
tips
プレビュー