aboutsummaryrefslogtreecommitdiff
path: root/src/main_rtos.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/main_rtos.c')
-rw-r--r--src/main_rtos.c147
1 files changed, 147 insertions, 0 deletions
diff --git a/src/main_rtos.c b/src/main_rtos.c
new file mode 100644
index 0000000..bcde7cf
--- /dev/null
+++ b/src/main_rtos.c
@@ -0,0 +1,147 @@
+/* FreeRTOS includes. */
+#include "FreeRTOS.h"
+#include "task.h"
+
+/* System headers */
+/* #include <stdio.h> */
+
+/* Master include */
+#include "master_posix.h"
+
+/* Master task priority */
+#define mainPOSIX_MASTER_PRIORITY (tskIDLE_PRIORITY + 4)
+
+int main(void)
+{
+ configASSERT((mainPOSIX_MASTER_PRIORITY < configMAX_PRIORITIES));
+
+ /* const uint32_t ulLongTime_ms = pdMS_TO_TICKS(1000UL); */
+
+ /* Start the task to run POSIX Master */
+ xTaskCreate(vStartPOSIXMaster,
+ "posix",
+ configMINIMAL_STACK_SIZE,
+ NULL,
+ mainPOSIX_MASTER_PRIORITY,
+ NULL);
+
+ vTaskStartScheduler();
+
+ /* If all is well, the scheduler will now be running, and the following
+ * line will never be reached. If the following line does execute, then
+ * there was insufficient FreeRTOS heap memory available for the idle and/or
+ * timer tasks to be created.
+ */
+ /* for(; ;) */
+ /* { */
+ /* /\* Sleep(ulLongTime_ms); *\/ */
+ /* } */
+
+ return 0;
+}
+
+
+/*-----------------------------------------------------------*/
+
+void vAssertCalled(const char * pcFile,
+ uint32_t ulLine)
+{
+ /* const uint32_t ulLongSleep = 1000UL; */
+ volatile uint32_t ulBlockVariable = 0UL;
+ volatile char * pcFileName = ( volatile char * ) pcFile;
+ volatile uint32_t ulLineNumber = ulLine;
+
+ (void) pcFileName;
+ (void) ulLineNumber;
+
+ /* printf("vAssertCalled %s, %ld\n", pcFile, (long) ulLine); */
+ /* fflush(stdout); */
+
+ /* Setting ulBlockVariable to a non-zero value in the debugger will allow
+ * this function to be exited. */
+ taskDISABLE_INTERRUPTS();
+ {
+ while(ulBlockVariable == 0UL)
+ {
+ /* Sleep(ulLongSleep); */
+ }
+ }
+ taskENABLE_INTERRUPTS();
+}
+
+/*-----------------------------------------------------------*/
+
+/* configUSE_STATIC_ALLOCATION is set to 1, so the application must provide an
+ * implementation of vApplicationGetIdleTaskMemory() to provide the memory that is
+ * used by the Idle task. */
+void vApplicationGetIdleTaskMemory(StaticTask_t ** ppxIdleTaskTCBBuffer,
+ StackType_t ** ppxIdleTaskStackBuffer,
+ uint32_t * pulIdleTaskStackSize)
+{
+ /* If the buffers to be provided to the Idle task are declared inside this
+ * function then they must be declared static - otherwise they will be allocated on
+ * the stack and so not exists after this function exits. */
+ static StaticTask_t xIdleTaskTCB;
+ static StackType_t uxIdleTaskStack[ configMINIMAL_STACK_SIZE ];
+
+ /* Pass out a pointer to the StaticTask_t structure in which the Idle
+ * task's state will be stored. */
+ *ppxIdleTaskTCBBuffer = &xIdleTaskTCB;
+
+ /* Pass out the array that will be used as the Idle task's stack. */
+ *ppxIdleTaskStackBuffer = uxIdleTaskStack;
+
+ /* Pass out the size of the array pointed to by *ppxIdleTaskStackBuffer.
+ * Note that, as the array is necessarily of type StackType_t,
+ * configMINIMAL_STACK_SIZE is specified in words, not bytes. */
+ *pulIdleTaskStackSize = configMINIMAL_STACK_SIZE;
+}
+
+/*-----------------------------------------------------------*/
+
+/* configUSE_STATIC_ALLOCATION and configUSE_TIMERS are both set to 1, so the
+ * application must provide an implementation of vApplicationGetTimerTaskMemory()
+ * to provide the memory that is used by the Timer service task. */
+void vApplicationGetTimerTaskMemory(StaticTask_t ** ppxTimerTaskTCBBuffer,
+ StackType_t ** ppxTimerTaskStackBuffer,
+ uint32_t * pulTimerTaskStackSize)
+{
+ /* If the buffers to be provided to the Timer task are declared inside this
+ * function then they must be declared static - otherwise they will be allocated on
+ * the stack and so not exists after this function exits. */
+ static StaticTask_t xTimerTaskTCB;
+ static StackType_t uxTimerTaskStack[ configTIMER_TASK_STACK_DEPTH ];
+
+ /* Pass out a pointer to the StaticTask_t structure in which the Timer
+ * task's state will be stored. */
+ *ppxTimerTaskTCBBuffer = &xTimerTaskTCB;
+
+ /* Pass out the array that will be used as the Timer task's stack. */
+ *ppxTimerTaskStackBuffer = uxTimerTaskStack;
+
+ /* Pass out the size of the array pointed to by *ppxTimerTaskStackBuffer.
+ * Note that, as the array is necessarily of type StackType_t,
+ * configTIMER_TASK_STACK_DEPTH is specified in words, not bytes. */
+ *pulTimerTaskStackSize = configTIMER_TASK_STACK_DEPTH;
+}
+
+/*-----------------------------------------------------------*/
+
+/**
+ * @brief Warn user if pvPortMalloc fails.
+ *
+ * Called if a call to pvPortMalloc() fails because there is insufficient
+ * free memory available in the FreeRTOS heap. pvPortMalloc() is called
+ * internally by FreeRTOS API functions that create tasks, queues, software
+ * timers, and semaphores. The size of the FreeRTOS heap is set by the
+ * configTOTAL_HEAP_SIZE configuration constant in FreeRTOSConfig.h.
+ *
+ */
+void vApplicationMallocFailedHook()
+{
+ taskDISABLE_INTERRUPTS();
+
+ for(;;)
+ {
+ }
+}