組み込み SW プロジェクトの場合、いくつかのconst volatile TYPE *
ポインターを使用する必要があります。これで、次のような計算関数がいくつかあります。
uint8 calc(const volatile uint8 *array, uint8 value) { ... }
両方の変数のデータは、関数の実行中に変化しません。
呼び出しコードは次のようになります。
const volatile uint8 *array = (const volatile uint8 *)0x00010111;
uint8 value = 8;
uint8 result = calc(array, value);
問題は、揮発性引数なしで計算関数を設計した場合、違いがあるかどうかです。
uint8 calc(const uint8 *array, uint8 value) { ... }
呼び出しでは、volatile をキャストします。
uint8 result = calc((const uint8 *)array, value);
2 番目のソリューションの長所は、柔軟性が高いことです。この関数は、非揮発性変数にも使用できます。しかし、揮発性をキャストし、コンパイラがいくつかの強力な最適化を行った場合、違いはありますか?