zoukankan      html  css  js  c++  java
  • 线程的创建

    线程的创建

    线程的组成:

    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%;

  • 相关阅读:
    微信小程序自定义navigationBar
    微信小程序-自动定位并将经纬度解析为具体地址
    a conexant audio couldnot befound
    平衡二叉树(AVL)java实现
    二叉树的各种非递归遍历
    选择排序
    快速排序
    冒泡排序
    数组洗牌
    haffman树c实现
  • 原文地址:https://www.cnblogs.com/zhang-han/p/14122929.html
Copyright © 2011-2022 走看看