Domain Objects
The CANopen stack provides a system object type for managing domains. The domain memory must be a consecutive memory area. The recommended way to allocate this memory area is shown in the following example:
CPU_INT08U DemoDomainMem[DEMO_DOMAIN_SIZE]; /* domain memory area */
The domain object holds all necessary information, which are needed for the domain handling. Note: this structure may be placed into ROM, because it holds only constant values.
const CO_DOMAIN { DEMO_DOMAIN_SIZE, /* size of domain memory */ &DemoDomainMem[0] /* start address of domain memory */ } DemoDomainObj;
To enable the usage of this domain to the CAN network side, the domain object must be added to the object directory:
(CPU_INT32U)&DemoDomainObj /* pointer to domain object */
The internal behavior of the CANopen stack is shown in section "User Type Objects". The system types are implemented identical to user types. The following diagram shows the behavior in combination with the SDO server.