3438|0

253

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

【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[RT_NAME_MAX];                      /**< the name of thread */
    rt_uint8_t  type;                                   /**< type of object */
    rt_uint8_t  flags;                                  /**< 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原创,如需转载或用于商业用途需征得作者同意并注明出处

点赞 关注
 

回复
举报
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/7 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表