我定義設備訪問如從而如何強制內存位置在ACSL中有效?
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高達MY_DEVICE_ADDRESS +的sizeof(結構mydevice在)被認爲是有效的?
編輯:下面是不起作用
#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-WP -wp即食-wp-INIT const的-wp模型類型化試驗的嘗試。 c
我以某種方式懷疑你描述的問題與你的內存位置的volatile性質有關(儘管這確實是其他問題的根源)。從你所描述的,我懷疑'MY_DEVICE_ADDRESS'是一個絕對的物理地址(例如0xdeadbeef)。你可以提供一個MWE,並指明你打算使用哪個插件(再次,我想這是WP,我恐怕無法證明絕對內存地址的任何內容) – Virgile
是的,它是WP和是的它是一個絕對的物理地址。這就是我害怕的,我會看看開發者是否有解決方案。 – Yifan