0

デバイスアクセスを次のように定義します

volatile struct mydevice * const dev = (struct mydevice *)MY_DEVICE_ADDRESS;

を使用してアクセスをモデル化しました

@ volatile dev->somereg reads somereg_read writes somereg_write;

問題は、RTE チェックを有効にすると、生成された有効性チェックを証明できないことです。

/*@ assert rte: mem_access: \valid(dev->somereg); */

MY_DEVICE_ADDRESS + sizeof(struct mydevice) までの MY_DEVICE_ADDRESS が有効と見なされるように、コードに注釈を付ける方法はありますか?

編集:これはうまくいかない試みです

#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;
}

で実行

frama-c-wp -wp-rte -wp-init-const -wp-model 型付き test.c

4

2 に答える 2