wiced_result_t wiced_rtos_create_worker_thread( wiced_worker_thread_t* worker_thread, uint8_t priority, uint32_t stack_size, uint32_t event_queue_size ) { memset( worker_thread, 0, sizeof( *worker_thread ) ); if ( wiced_rtos_init_queue( &worker_thread->event_queue, "worker queue", sizeof(wiced_event_message_t), event_queue_size ) != WICED_SUCCESS ) { return WICED_ERROR; } if ( wiced_rtos_create_thread( &worker_thread->thread, WICED_PRIORITY_TO_NATIVE_PRIORITY( priority ), "worker thread", worker_thread_main, stack_size, (void*) worker_thread ) != WICED_SUCCESS ) { wiced_rtos_deinit_queue( &worker_thread->event_queue ); return WICED_ERROR; } return WICED_SUCCESS; }
wiced_result_t wiced_rtos_create_thread( wiced_thread_t* thread, uint8_t priority, const char* name, wiced_thread_function_t function, uint32_t stack_size, void* arg ) { /* Limit priority to default lib priority */ if ( priority > RTOS_HIGHEST_PRIORITY ) { priority = RTOS_HIGHEST_PRIORITY; } return host_rtos_create_thread_with_arg( WICED_GET_THREAD_HANDLE( thread ), function, name, NULL, stack_size, WICED_PRIORITY_TO_NATIVE_PRIORITY( priority ), (uint32_t) arg ); }
/** * Main function - starts ThreadX * Called from the crt0 _start function * */ int main( void ) { #if defined ( __IAR_SYSTEMS_ICC__ ) /* IAR allows init functions in __low_level_init(), but it is run before global * variables have been initialised, so the following init still needs to be done * When using GCC, this is done in crt0_GCC.c */ init_architecture( ); init_platform( ); #endif /* #elif defined ( __IAR_SYSTEMS_ICC__ ) */ #ifndef WICED_DISABLE_WATCHDOG /* Start the watchdog kicking thread */ xTaskCreate( system_monitor_thread_main, (signed char*)"system monitor", SYSTEM_MONITOR_THREAD_STACK_SIZE/sizeof( portSTACK_TYPE ), NULL, RTOS_HIGHEST_PRIORITY, &system_monitor_thread_handle); #endif /* WICED_DISABLE_WATCHDOG */ /* Create an initial thread */ xTaskCreate( application_thread_main, (signed char*)"app_thread", APPLICATION_STACK_SIZE/sizeof( portSTACK_TYPE ), NULL, WICED_PRIORITY_TO_NATIVE_PRIORITY(WICED_APPLICATION_PRIORITY), &app_thread_handle); #ifdef __GNUC__ { wiced_result_t result; result = wiced_freertos_init_malloc_mutex(); wiced_assert( "Unable t create a freertos malloc mutex", result == WICED_SUCCESS ); (void) result; } #endif /* ifdef __GNUC__ */ /* Start the FreeRTOS scheduler - this call should never return */ vTaskStartScheduler( ); /* Should never get here, unless there is an error in vTaskStartScheduler */ return 0; }