1. 线程概念
线程: 就是把整个系统分割成一个个独立且永不返回的函数, 这样的函数我们称之为线程.
void thread_entry(void *para)
{
for (; ;) {
}
}
2. 线程创建
在多线程的系统中, 因每个线程都是独立的, 互不干扰, 因此, 每个线程需要有独立的栈空间, 这个栈空间说白了就是预先定义的全局数组, 可以在程序运行时动态分配, 殊路同归, 都是在位于 RAM 中的一段连续空间.
2.1 定义线程栈
__attribute__((aligned(4)))
unsigned char thread_task1_stack[512];
unsigned char thread_task1_stack[512];
2.2 定义线程函数
void delay(unsigned int count)
{
for (; count != 0; count --);
}
void task1_thread_entry(void *para)
{
for (; ;) {
flag1 = 1;
delay(1000);
flag1 = 0;
delay(1000);
}
}
void task2_thread_entry(void *para)
{
for (; ;) {
flag2 = 1;
delay(1000);
flag2 = 0;
delay(1000);
}
}
2.3 定义线程控制块
线程控制块是系统为了顺利的调度线程, 为每一个线程额外定义了一个线程控制块, 相当于线程的标识符, 里面存放线程的所有信息, 如线程的栈指针, 线程名称, 线程参数等. 有了这个控制块后, 系统对线程的所有操作都可以通过这个线程控制块来实现.
struct rt_thread
{
void *sp;
void *entry;
void *parameter;
void *stack_addr;
unsigned int stack_size;
rt_list_t tlist;
};
typedef struct rt_thread *rt_thread_t;
struct rt_thread rt_task1_thread;
struct rt_thread rt_task1_thread;
2.4 创建线程函数
线程的栈, 线程的函数实体, 线程控制块, 最终需要联系起来才能由系统调度器进行调度. 那
么就由线程初始化函数 rt_thread_init() 来实现联系.
long