Files
TAIXIN/sdk/lib/misc/rtt/rt_thread.c

137 lines
3.1 KiB
C
Raw Permalink Normal View History

#include "rtthread.h"
rt_thread_t rt_thread_create(const char *name, void (*entry)(void *parameter), void *parameter,
rt_uint32_t stack_size, rt_uint8_t priority, rt_uint32_t tick)
{
struct rt_thread *thd = os_malloc(sizeof(struct rt_thread));
void *stack = os_malloc(stack_size+124); //124 = sizeof(ktask_t)
if(stack == RT_NULL)
{
os_printf("[%s]:stack malloc failed!!!\n",__FUNCTION__); //usb任务栈使用sram空间避免打到psram动态申请导致usb异常
return NULL;
}
if (thd) {
os_task_init((const uint8 *)name, thd, entry, (uint32)parameter);
os_task_set_priority(thd, priority);
os_task_set_stack(thd, stack, stack_size+124); //124 = sizeof(ktask_t)
}
return thd;
}
rt_err_t rt_thread_delete(rt_thread_t thread)
{
rt_err_t ret;
ret = os_task_del(thread);
if(thread->stack)
{
os_free(thread->stack);
}
os_free(thread);
return ret;
}
rt_err_t rt_thread_init(struct rt_thread *thread, const char *name, void (*entry)(void *parameter),
void *parameter, void *stack_start, rt_uint32_t stack_size,
rt_uint8_t priority, rt_uint32_t tick)
{
void *stack = RT_NULL;
rt_uint32_t stacksize = 0;
stacksize = stack_size+124; //124 = sizeof(ktask_t)
stack = os_malloc(stacksize); //usb任务栈使用sram空间避免打到psram动态申请导致usb异常
if(stack == RT_NULL)
{
os_printf("[%s]:stack malloc failed!!!\n",__FUNCTION__);
return RT_ERROR;
}
if(stack_start)
{
os_printf("[%s]:This api auto malloc stack, you can free your stack space!!!\r\n");
}
os_task_init((const uint8 *)name, thread, entry, (uint32)parameter);
os_task_set_priority(thread, priority);
os_task_set_stack(thread, stack, stacksize);
return RT_EOK;
}
rt_err_t rt_thread_detach(rt_thread_t thread)
{
rt_err_t ret;
ret = os_task_del(thread);
if(thread->stack)
{
os_free(thread->stack);
thread->stack = NULL;
}
return ret;
}
rt_thread_t rt_thread_self(void)
{
return (rt_thread_t)os_task_data(os_task_current());
}
rt_thread_t rt_thread_find(char *name)
{
return NULL;
}
rt_err_t rt_thread_startup(rt_thread_t thread)
{
return os_task_run(thread);
}
rt_err_t rt_thread_yield(void)
{
return os_task_yield();
}
rt_err_t rt_thread_delay(rt_tick_t tick)
{
os_sleep_ms(os_jiffies_to_msecs(tick));
return RET_OK;
}
rt_err_t rt_thread_delay_until(rt_tick_t *tick, rt_tick_t inc_tick)
{
return RT_ERROR;
}
rt_err_t rt_thread_mdelay(rt_int32_t ms)
{
os_sleep_ms(ms);
return RET_OK;
}
rt_err_t rt_thread_control(rt_thread_t thread, int cmd, void *arg)
{
return RT_ERROR;
}
rt_err_t rt_thread_suspend(rt_thread_t thread)
{
return os_task_suspend(thread);
}
rt_err_t rt_thread_resume(rt_thread_t thread)
{
return os_task_resume(thread);
}
void rt_thread_timeout(void *parameter)
{
}
void rt_enter_critical(void)
{
os_sched_disable();
}
void rt_exit_critical(void)
{
os_sched_enbale();
}