线程的创建

线程的创建

线程的组成:

RT-Thread 中,线程由三部分组成:线程代码(入口函数)、线程控制块、线程堆栈。

线程代码

无限循环结构:

void thread_entry(void *parameter)
{
	while(1)
	{
        /* 等待事件的发生*/              
        .
        .
        /* 处理事件*/    
	}    
}

顺序执行结构:

void thread_entry(void *parameter)
{
    /* 事务1处理*/  
    /* 事务2处理*/              
    .
    .
    /* 事务N处理*/ 
}

线程控制块

​ 线程控制块是操作系统用于管理线程的一个数据结构, 它会存放线程的一些信息, 例如优先级、 线程名称、 线程状态等, 也包含线程与线程之间连接用的链表结构, 线程等待事件集合等。

struct rt_thread 

struct rt_thread *rt_thread_t

线程栈

​ RT-Thread 每个线程都具有独立的栈空间, 当进行线程切换时, 系统会将当前线程的上下文保存在线程栈中, 当线程要恢复运行时, 再从线程栈中读取上下文信息, 恢复线程的运行。

​ 线程上下文是指线程执行时的环境,具体来说就是各个变量和数据包括所有寄存器变量、堆栈信息、内存信息等。

​ 线程栈在形式上是一段连续的内存空间 ,我们可以通过定义一个数组或者申请一段动态内存来作为线程的栈。

线程创建

创建静态线程:

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,v
                        rt_uint8_t        priority,
                        rt_uint32_t       tick)

创建动态线程:

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)

启动线程

rt_err_t rt_thread_startup(rt_thread_t thread)

调用此函数后创建的线程会被加入到线程的就绪队列,执行调度

系统滴答时钟

​ 每一个操作系统中都存在一个“系统心跳”时钟,是操作系统中最小的时钟单位。这个时钟负责系统和时间相关的一些操作。作为操作系统运行的时间尺度,心跳时钟是由硬件定时器的定时中断产生。

​ 时钟节拍使得内核可以将线程延时若干个整数时钟节拍,以及线程等待事件发生时,提供等待超时的依据。

​ 系统的心跳时钟我们也常称之为系统滴答,系统滴答的频率需要我们根据 cpu的处理能力来决定。

​ 频率越快,内核函数介入系统运行的几率就越大,内核占用的处理器时间就越长,系统的负荷就变大;

频率越小,时间处理精度又不够;

​ 在 stm32 平台上一般设置系统滴答频率为 100HZ,即每个滴答的时间是 10ms

GPIO驱动架构操作IO

IO初始化:

void rt_pin_mode(rt_base_t pin, rt_base_t mode)
                                            //PIN_MODE_OUTPUT
                                            //PIN_MODE_INPUT
                                            //PIN_MODE_INPUT_PULLUP
                                            //PIN_MODE_INPUT_PULLDOWN
                                            //PIN_MODE_OUTPUT_OD

IO写入:

void rt_pin_write(rt_base_t pin, rt_base_t value)
                                            //PIN_HIGH
                                            //PIN_LOW                          

IO读出:

int  rt_pin_read(rt_base_t pin)

线程栈大小设置使用率推荐为70%;

原文地址:https://www.cnblogs.com/zhang-han/p/14122929.html