Getting a Memory Block from a Partition
Application code can request a memory block from a partition by calling OSMemGet() as shown in Listing 17-3. The code assumes that the partition was already created.
OS_MEM MyPartition; (1) CPU_INT08U *MyDataBlkPtr;
void MyTask (void *p_arg) { OS_ERR err;
: while (DEF_ON) { : MyDataBlkPtr = (CPU_INT08U *)OSMemGet((OS_MEM *)&MyPartition, (2) (OS_ERR *)&err); if (err == OS_ERR_NONE) { (3) /* You have a memory block from the partition */ } : : } } |
-
- Obtaining a memory block from a partition
- The memory partition control block must be accessible by all tasks or ISRs that will be using the partition.
- Simply call OSMemGet() to obtain a memory block from the desired partition. A pointer to the allocated memory block is returned. This is similar to malloc(), except that the memory block comes from a pool that is guaranteed to not fragment. Also, it’s assumed that your application knows the size of each block so it doesn’t overflow the block with data.
- It is important to examine the returned error code to ensure that there are free memory blocks and that the application can start putting content in the memory blocks.
- Obtaining a memory block from a partition