【RT-Thread读书笔记】之二 实现多线程
本帖最后由 qi777ji 于 2019-4-25 11:08 编辑我们常规裸机系统就是在main函数里顺序无限循环,而多线程系统中为多个独立且无法返回的函数称为线程。裸机系统不用关心变量存放位置他们都会存放在栈空间里。多线程系统每个线程都是相互独立的必须事先预定义好,每个线程通常都是存在预定义好的全局数组称为线程栈,而在RT-Thread中凡涉及到数据类型时会用typedef重新取一个以rt_xxx前缀的类型名,所以预定义全局数组类型不要搞错!/* RT-Thread basic data type definitions */
typedef signed char rt_int8_t; /**<8bit integer type */
typedef signed short rt_int16_t; /**< 16bit integer type */
typedef signed long rt_int32_t; /**< 32bit integer type */
typedef unsigned char rt_uint8_t; /**<8bit unsigned integer type */
typedef unsigned short rt_uint16_t; /**< 16bit unsigned integer type */
typedef unsigned long rt_uint32_t; /**< 32bit unsigned integer type */
typedef int rt_bool_t; /**< boolean type */
线程是独立函数,主体无限循环且不能返回。线程由系统调度,由额外的线程控制块定义,系统对线程的全部操作可以通过线程控制块完成。线程控制块使用结构体struct在rtdef.h里来定义,包涵线程指针、入口地址、栈起始地址、栈大小等成员变量。
/**
* Thread structure
*/
struct rt_thread
{
/* rt object */
char name; /**< the name of thread */
rt_uint8_ttype; /**< type of object */
rt_uint8_tflags; /**< thread's flags */
。。。。。。。
};
typedef struct rt_thread *rt_thread_t;
最后线程初始化函数rt_thresd_init(),他在thread.c中定义需要添加到工程的srtt/source组中。在rtthread.h中声明,所有跟线程相关的函数都在这定义。
static 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)
{
/* init thread list */
rt_list_init(&(thread->tlist));
。。。。。。
}
此内容由EEWORLD论坛网友qi777ji原创,如需转载或用于商业用途需征得作者同意并注明出处
页:
[1]