qi777ji 发表于 2019-4-24 16:47

【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]
查看完整版本: 【RT-Thread读书笔记】之二 实现多线程