/* * ======== main_freertos.c ======== */ #include /* POSIX Header files */ #include /* RTOS header files */ #include "FreeRTOS.h" #include "task.h" /* TI-DRIVERS Header files */ #include "ti_drivers_config.h" /* TI-RTOS Header files */ #include extern void * mainThread(void *arg0); /* Stack size in bytes */ #define THREADSTACKSIZE 1024 /* * ======== main ======== */ int main(void) { pthread_t thread; pthread_attr_t pAttrs; struct sched_param priParam; int retc; int detachState; // Call board init functions Board_init(); /* Set priority and stack size attributes */ pthread_attr_init(&pAttrs); priParam.sched_priority = 1; detachState = PTHREAD_CREATE_DETACHED; retc = pthread_attr_setdetachstate(&pAttrs, detachState); if(retc != 0) { /* pthread_attr_setdetachstate() failed */ while(1) { ; } } pthread_attr_setschedparam(&pAttrs, &priParam); retc |= pthread_attr_setstacksize(&pAttrs, THREADSTACKSIZE); if(retc != 0) { /* pthread_attr_setstacksize() failed */ while(1) { ; } } retc = pthread_create(&thread, &pAttrs, mainThread, NULL); if(retc != 0) { /* pthread_create() failed */ while(1) { ; } } /* Start the FreeRTOS scheduler */ vTaskStartScheduler(); return (0); } void vApplicationMallocFailedHook() { /* Handle Memory Allocation Errors */ while(1) { } } void vApplicationStackOverflowHook(TaskHandle_t pxTask, char *pcTaskName) { //Handle FreeRTOS Stack Overflow while(1) { } } void vApplicationTickHook(void) { } void vPreSleepProcessing(uint32_t ulExpectedIdleTime) { } void vApplicationIdleHook(void) { /* Handle Idle Hook for Profiling, Power Management etc */ } #if defined (__GNUC__) void * _sbrk(uint32_t delta) { extern char _end; /* Defined by the linker */ extern char __HeapLimit; static char *heap_end; static char *heap_limit; char *prev_heap_end; if(heap_end == 0) { heap_end = &_end; heap_limit = &__HeapLimit; } prev_heap_end = heap_end; if(prev_heap_end + delta > heap_limit) { return((void *) -1L); } heap_end += delta; return((void *) prev_heap_end); } #endif