Content
- 1 Introduction
- 2 Notation
- 3 Tool Usage
- 4 Top Level Elements
- 5 Control Flow Elements
- 6 Data Flow Elements
- 7 Location Attributes
- 8 Loop Bound Attributes
- 9 Time and Execution Attributes
- 10 Control Flow Properties
- 11 Control Flow Constraints
- 12 Data Flow Properties
- 13 Data Flow Constraints
- 14 Future Developments
- 15 Appendix A: FFX Grammar
- 16 Appendix B: Example – output of oRange tool
12 Data Flow Properties
These properties allows to describe the behavior of program data. They are embedded in data element and allows to precise properties of the embedding data item.
The consistency of the data description and of the type description in the application executable (debugging information or high-level sources) must be enforced when processing such information and may be a serious cause for rejecting an FFX file.
12.1 Domain Properties
The domain property definition depends on the real type of the target data item. Both types from program representation and from the FFX description must be consistent to be applied.
DOMAIN-PROPERTY ::= | SCALAR-DOMAIN | POINTER-DOMAIN | ARRAY-DOMAIN | STRUCT-DOMAIN
12.1.1 Scalar Type
SCALAR-PROPERTY ::= | <const value="VALUE"/> | <range lower="VALUE"? upper="VALUE"? step="INT"?/>
A VALUE depends on the type of the data item itself. It may be one of INT, FLOAT or TEXT in case of an enumerated value. The const allows to assign a constant value to the data item while a range allows to defines a range of value according to the lower, upper and step attributes.
Basically, the data item is in the range [lower, upper]. If the lower attribute is not provided, it is considered as -; if the upper is not defined, it the +. The step allows to define non-full set according to, for example, alignment requirements of memory.
The step is only meaningful of the data item type is integer and defined by:
12.1.2 Pointer Type
A pointer may be defined directly by an address or by a symbolic expression designing a data item whose address is obtained.
POINTER-PROPERTY ::= | <address> ADDR </address> | ID-ELEMENT
12.1.3 Array Type
The array domain definition allows to assign values to the different items of an array:
ARRAY-DOMAIN ::= <array> ARRAY-ITEM* </array> ARRAY-ITEM ::= | <item index="INT"> DOMAIN-PROPERTY </item> | <range lower="INT" upper="INT"> DOMAIN-PROPERTY </range> | <other> DOMAIN-PROPERTY </other>
The first allows to assign a domain value to the item of the given index, the next designs a range of items between the lower and the upper indexes (inclusively). The last form can only be unique in the array item list and gives a default value for other items.
12.1.4 Structure Type
The structure type allows to define the domain value of one or several contained fields:
STRUCT-DOMAIN ::= <struct> STRUCT-FIELD* </struct> STRUCT-ITEM ::= <field name="TEXT"> DOMAIN-PROPERTY </field>
12.2 Mutability
FFX is defined in the paradigm of real-time applications running on real hardware host. Therefore, the different data are handled by different entities (tasks, IO registers) of the application and at different time depending on the way the tasks are scheduled (task interlacing, interrupts and preemption).
The goal of this property is to explicit the behavior of the data according to this context. Such an information item may be used to get a better knowledge of the mutation of the data and to improve the accuracy of the analyses.
MUTABILITY-PROPERTY ::= <mutable kind="MUTABILITY-KIND"/> MUTABILITY-KIND ::= stable | out | in
As any property of the data element, the mutability property applies only in the context where it is defined. This lets define different mutability property according to the current execution context.
The meaning of the mutability kinds follows:
stable – the data item is never modified out of the task it is used in (this let an analyzer tracks the behavior of the data item along different start-up of the task),
out – the data item is only modified between the invocations of the task (usually by other tasks): during a task run, its content remains what the task has made with,
in – the data item may be modified at any moment during the run of the task using it.