On Thu, Sep 6, 2018 at 5:10 PM Bart Jacobs <
bart....@cs.kuleuven.be> wrote:
> Instead of `(tcb + tskTaskControlBlock_xMPUSettings_offset)`, write `&tcb->xMPUSettings`.
Thanks. it works.
```
/*@
predicate TCB_t_pred(struct tskTaskControlBlock *tcb) =
tcb->pxTopOfStack |-> _
&*& struct_xMPU_SETTINGS_padding(&tcb->xMPUSettings)
&*& struct_xLIST_ITEM_padding(&tcb->xStateListItem)
&*& struct_xLIST_ITEM_padding(&tcb->xEventListItem)
&*& tcb->uxPriority |-> _
&*& tcb->pxStack |-> ?stack
&*& StackType_pred(stack, _)
&*& chars(tcb->pcTaskName, 16, _)
&*& tcb->pxEndOfStack |-> _
&*& tcb->uxCriticalNesting |-> _
&*& pointers(tcb->pvThreadLocalStoragePointers, 1, _)
&*& tcb->ulRunTimeCounter |-> _
&*& tcb->ucStaticallyAllocated |-> _
&*& tcb->ucDelayAborted |-> _
&*& malloc_block_tskTaskControlBlock(tcb);
@*/
```
I'm little bit confusing. Because...
A. I used `&tcb->foo` at `struct_xLIST_ITEM_padding` chunk.
B. I used `tcb->foo` at `pointers` and `chars` chunk.
What are different? A and B are also showing following style on
the Heap chunks pane of attached screenshot:
```
pxNewTCB0 + foo_bar_offset
```
Best regards,
--
Kiwamu Okabe at METASEPI DESIGN