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

137 lines
3.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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();
}