私は今の問題は、私はRTEのチェックを有効にすると、生成された妥当性チェックがACSLでメモリの場所を有効にする方法を教えてください。
を証明することができないことであるデバイスは、私が@ volatile dev->somereg reads somereg_read writes somereg_write;
を使用してアクセスをモデル化してきたようにこれ
volatile struct mydevice * const dev = (struct mydevice *)MY_DEVICE_ADDRESS;
にアクセス定義
/*@ assert rte: mem_access: \valid(dev->somereg); */
MY_DEVICE_ADDRESS MY_DEVICE_ADDRESS +はsizeof(構造体のmydeviceに)まで有効と見なされるように自分のコードに注釈を付ける方法はありますか?
編集:ここでは
FRAMA-C-WP -wp-RTE -wp-のinit-constの-wpモデル型付きテストで
#include <stdint.h> #define MY_DEVICE_ADDRESS (0x80000000) struct mydevice { uint32_t somereg; uint32_t someotherreg; }; volatile struct mydevice * const dev = (struct mydevice *)MY_DEVICE_ADDRESS; /*@ axiomatic Physical_Memory { axiom Dev: \valid((struct mydevice*)MY_DEVICE_ADDRESS); } */ int main(int argc, const char *argv[]) { //@ assert \valid(dev); //@ assert \false; return 0; }
実行]を動作しない試みです。 c
あなたの説明する問題は、実際には他の問題の原因であるにもかかわらず、メモリロケーションの「揮発性」性質に関係しているとは疑いがあります。あなたの記述から、MY_DEVICE_ADDRESSは絶対的な物理アドレス(例えば0xdeadbeef)であると思われます。 MWEを提供して、使用するプラグインを指定することができますか(また、これはWPです、絶対的なメモリアドレスについては何も証明できません)。 – Virgile
はい、それはWPです。絶対物理アドレス。これは私が恐れていることですが、開発者に解決策があるかどうかはわかります。 – Yifan