大概rtthread觉得直接等待的阻塞延时效率不够高,逻辑不够优美;所以它给每个thread都配置了一个rt_timer类型的thread_timer定时器; 所有定时器由定时器链表统一管理,通过对thread_timer定时器统一管理多个线程的延时,效率高,逻辑优美; 2.1 定时器结构体 //rtdef.h #defineRT_TIMER_FLAG_DEACTI...
但是这样在使用RT-Thread堆内存的时候就不太友好了。缺点如下: 堆内存大小是固定的,使得RT-Thread系统没有最大化的利用STM32的内存空间。 在RT-Thread的堆内存中使用了相应的内存算法,容易造成内存碎片化。,所以应将栈剩余的空间全部用于堆内存使用,有关算法可以看RT-Thread内存管理。 发生堆栈溢出的时候,不利于问...
#define RT_USING_TIMER_SOFT 0 // 关闭软件定时器功能,为 1 则打开 #if RT_USING_TIMER_SOFT == 0 #undef RT_USING_TIMER_SOFT #endif #define RT_TIMER_THREAD_PRIO 4 // 设置软件定时器线程的优先级,默认为 4 #define RT_TIMER_THREAD_STACK_SIZE 512 // 设置软件定时器线程的栈大小,默认为 512...
struct rt_timer thread_timer; /* 内置线程定时器 */ void (*cleanup)(struct rt_thread *tid); /* 线程退出清楚函数指针 */ ... rt_uint32_t user_data; /* 用户数据 */ }; typedef struct rt_thread *rt_thread_t; 创建线程 RT-Thread 提供了先管理相关的系统函数:包含:创建 ...
rt_system_timer_thread_init(); /* idle thread initialization */ rt_thread_idle_init(); #ifdef RT_USING_SMP rt_hw_spin_lock(&_cpus_lock); #endif /* RT_USING_SMP */ /* start scheduler */ rt_system_scheduler_start(); /* never reach here */ ...
rt_ubase_t init_tick;/* 线程初始化计数值 */rt_ubase_t remaining_tick;/* 线程剩余计数值 */struct rt_timer thread_timer;/* 内置线程定时器 */void(*cleanup)(struct rt_thread*tid);/* 线程退出清除函数 */rt_uint32_t user_data;/* 用户数据 */}; ...
struct rt_timer thread_timer; /**< built-in thread timer */ void (*cleanup)(struct rt_thread *tid); /**< cleanup function when thread exit */ /* light weight process if present */ #ifdef RT_USING_LWP void *lwp; #endif rt_uint32_t user_data; /**< private user data beyond th...
stack_start=(void*)RT_KERNEL_MALLOC(stack_size); 大小由用户给定,最后返回的时线程栈的起始地址。 然后初始化线程: _rt_thread_init(thread,name,entry,parameter,stack_start,stack_size,priority,tick); 进入函数原型: static rt_err_t_rt_thread_init(struct rt_thread*thread,const char*name,void(*ent...
&timer_thread_stack[0], sizeof(timer_thread_stack), RT_TIMER_THREAD_PRIO, 10); /* startup */ rt_thread_startup(&timer_thread); #endif } 软件定时器线程如下: /* system timer thread entry */ static void rt_thread_timer_entry(void *parameter) ...
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) 1.2 静态创建线程 static struct rt_thread led1_thread; //demo,用户定义的线程句柄 ...