137 lines
3.1 KiB
C
137 lines
3.1 KiB
C
|
|
#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();
|
|||
|
|
}
|
|||
|
|
|