Skip to the content.
« Previous Index Next »

Firmware Coding Standard — Static Allocation (FreeRTOS)

1) Scope & Rationale


2) Configuration Requirements


3) Approved APIs (MUST Use)


4) Prohibited or Restricted


5) Lifetime & Placement Rules


6) Sizing & Alignment


7) API Usage Rules


8) Verification & Instrumentation


9) Documentation Requirements

For every kernel object, document in the module README or header:


10) Exceptions Process


11) Reference Snippets

Queue (static)

static StaticQueue_t s_q_cb;
static uint8_t s_q_store[ QUEUE_LEN * ITEM_SIZE ];
static QueueHandle_t s_q;

void Q_Init(void) {
  s_q = xQueueCreateStatic(QUEUE_LEN, ITEM_SIZE, s_q_store, &s_q_cb);
  configASSERT(s_q);
}

Task (static) + Idle/Timer hooks

static StaticTask_t s_tcb;
static StackType_t s_stack[STACK_SZ];
static TaskHandle_t s_task;

void Tasks_Init(void) {
  s_task = xTaskCreateStatic(TaskFn, "worker", STACK_SZ, NULL, PRI, s_stack, &s_tcb);
  configASSERT(s_task);
}

/* Provide these when fully static */
void vApplicationGetIdleTaskMemory(StaticTask_t **tcb, StackType_t **stk, uint32_t *sz);
void vApplicationGetTimerTaskMemory(StaticTask_t **tcb, StackType_t **stk, uint32_t *sz);

Event group (static)

static StaticEventGroup_t s_evt_cb;
static EventGroupHandle_t s_evt;

void Evt_Init(void) {
  s_evt = xEventGroupCreateStatic(&s_evt_cb);
  configASSERT(s_evt);
}

12) Code Review Checklist (Static Focus)


« Previous Index Next »