7#include "porting_assistant.h"
15 "Failed to allocate 1560 bytes. Check that your heap is configured correctly\n\n");
26 FIRST_ALLOCATION_SIZE = 100,
27 REALLOCATION_SIZE = 200,
34 "Failed to allocate %d bytes. Check that your heap is configured correctly\n\n",
35 FIRST_ALLOCATION_SIZE);
36 return TEST_FAILED_NON_CRITICAL;
38 memset(
buf, 0xc0, FIRST_ALLOCATION_SIZE);
43 TEST_LOG_APPEND(
"Failed to reallocate %d bytes. Check that your heap supports realloc\n\n",
45 return TEST_FAILED_NON_CRITICAL;
50 for (ii = 0; ii < FIRST_ALLOCATION_SIZE; ii++)
54 TEST_LOG_APPEND(
"Reallocated block contents mismatch at offset %u\n\n", ii);
55 return TEST_FAILED_NON_CRITICAL;
63static void test_func()
71 struct mmosal_task *task_handle =
73 if (task_handle == NULL)
75 TEST_LOG_APPEND(
"mmosal_task_create() returned NULL; expected a task handle.\n\n");
86 if (task_handle == NULL)
88 TEST_LOG_APPEND(
"Test failed: Porting Assistant relies on OS features such as task "
89 "pre-emption for the remaining tests.\n\n");
92 "Please ensure Porting Assistant's app_init() is launched as a task, and\n");
93 TEST_LOG_APPEND(
"that your port starts its task scheduler.\n\n");
95 TEST_LOG_APPEND(
"For example, on a FreeRTOS port this would use xTaskCreate() and "
96 "vTaskStartScheduler().\n\n");
99 "See mmosal_main() and mmosal_task_create() from the provided EKH05 port as\n");
100 TEST_LOG_APPEND(
"a reference (review mmosal_shim_freertos.c).\n\n");
115 int32_t delta = (int32_t)(end_time - start_time);
116 if (delta < 49 || delta > 51)
118 TEST_LOG_APPEND(
"Time delta (%ld ms) did not match sleep time (50 ms)\n\n", delta);
132 TASK_ERROR_GET_ACTIVE_INVALID,
136static volatile enum task_state task_state = TASK_NOT_STARTED;
138static struct mmosal_task *
volatile task_handle;
141static void new_task_main(
void *arg)
145 task_state = TASK_STARTED;
153 task_state = TASK_ERROR_GET_ACTIVE_INVALID;
157 task_state = TASK_TERMINATING;
166 if (task_handle == NULL)
168 TEST_LOG_APPEND(
"mmosal_task_create() returned NULL; expected a task handle.\n\n");
169 return TEST_FAILED_NON_CRITICAL;
176 if (task_state != TASK_STARTED)
178 TEST_LOG_APPEND(
"The task created with mmosal_task_create() did not run.\n\n");
179 return TEST_FAILED_NON_CRITICAL;
187 case TASK_TERMINATING:
190 case TASK_ERROR_GET_ACTIVE_INVALID:
191 TEST_LOG_APPEND(
"mmosal_task_get_active() did not return the correct task handle.\n\n");
192 return TEST_FAILED_NON_CRITICAL;
195 TEST_LOG_APPEND(
"Task in unexpected state %d.\n\n", task_state);
196 return TEST_FAILED_NON_CRITICAL;
#define mmosal_malloc(size)
Allocate memory of the given size and return a pointer to it (malloc).
#define mmosal_realloc(ptr, size)
Equivalent of standard library realloc().
void mmosal_free(void *p)
Free the given memory allocation.
struct mmosal_task * mmosal_task_create(mmosal_task_fn_t task_fn, void *argument, enum mmosal_task_priority priority, unsigned stack_size_u32, const char *name)
Create a new task.
struct mmosal_task * mmosal_task_get_active(void)
Get the handle of the active task.
const char * mmosal_task_name(void)
Get the name of the running task.
void mmosal_task_sleep(uint32_t duration_ms)
Sleep for a period of time, yielding during that time.
void mmosal_task_delete(struct mmosal_task *task)
Delete the given task.
@ MMOSAL_TASK_PRI_HIGH
High priority.
@ MMOSAL_TASK_PRI_NORM
Normal priority.
uint32_t mmosal_get_time_ms(void)
Get the system time in milliseconds.
static unsigned char buf[1024]
Statically allocated buffer for MQTT.
const struct test_step test_step_os_malloc
Test definition.
const struct test_step test_step_os_active_context
Test definition.
const struct test_step test_step_os_task_preemption
Test definition.
const struct test_step test_step_os_realloc
Test definition.
const struct test_step test_step_os_time
Test definition.
const struct test_step test_step_os_task_creation
Test definition.