2017-08-16 10 views
0

定数のアドレスが変更されていることを知っているか、それについてAdaが保護されていますか?Adaで値を変更する定数

私は現在大きなプロジェクトに取り組んでおり、私はプロジェクトのすべてのコードを読むことができません。しかし、私はその一部をデバッグする必要があります。そして私は奇妙な問題を抱えています。実際、私は My_Var : constant Integer :=1;のような変数の宣言を私のパッケージに入れました(My_Packageと呼んでください) 次に、プロジェクト(ブラックボックス)の変数にいくつかのことが行われました そして最後にそのコードを実行すると、

My_Package.My_Var<=0それは、私の質問はであることやADAは、その周りに固定され、私の定数の変更のアドレスを知っている何かをTrue

をすることができます返しますか?

PS:私はif My_Package.My_Var<=0

PS PSの後に私のエラーを取得するまで、私は(gdb) watch My_Package.My_Varと何がプログラムを停止しました:(Iも一定の値を返すfunctionで私の定数を変更しようとバグはそれで行って変数がどこで変更されるかを私に知らせることはできませんでした) あなたが私を助けてくれることを願っています。

ありがとう

+0

定数は、読み取り専用のハードウェアポートに(アドレスのアスペクトを使用して)マップできます。そのような定数は、通常、揮発性とマークされるべきであるため、(ハードウェア状態の変化を観察するために)再読み込みされます。これは、組み込みプロセッサ(MCU)ターゲットにはしばしば適用されます...あなたはどのターゲットシステムを扱っていますか? –

+0

私は組み込みx86で動作するはずのコードで作業していますが、Linux x86を使用する必要があります。 それは私が持っていた挙動かもしれません(ハードウェアのアドレスはLinuxのコンパイルには対応していません) –

答えて

1

定数のアドレスを知っているものは、それを変更できる可能性があります。例外は、定数が(EP)ROMに格納されている場合、またはコンパイラがオペレーティングシステムと協調して実行可能ファイルの読み取り専用セクションに置く場合です。

通常、必要な作業を行うのに十分な気があれば、Adaではすべての安全対策を回避できます。

関連する問題