一、内核标志flag

在内核对象控制块中有一个标志成员flag(rt_uint8_t flag; ),这个标志在不同有内核对象中具有不同的含义。rt-thread的内核对象有定时器、线程、信号量、互斥锁、事件、邮箱、消息队列、内存堆、设备、模块,这些内核对象都继承了内核对象的成员,其中也就包含了内核对象的flag成员,因此,内核对象成员flag在这些不同的场合是具体不同的含义的。

二、flag在定时器中的定义   

#define RT_TIMER_FLAG_DEACTIVATED       0x0             /**< timer is deactive *///定时器未激活,即初始化值
#define RT_TIMER_FLAG_ACTIVATED 0x1 /**< timer is active *///定时器激活,当定时器start后将会置为此状态
#define RT_TIMER_FLAG_ONE_SHOT 0x0 /**< one shot timer *///单次定时器.即定时器时间一到自动失效
#define RT_TIMER_FLAG_PERIODIC 0x2 /**< periodic timer *///周期定时器.即时间一到,自动时行下一次定时
#define RT_TIMER_FLAG_HARD_TIMER 0x0 /**< hard timer,the timer's callback function will be called in tick isr. *///硬时钟.硬件定时器中断模式
#define RT_TIMER_FLAG_SOFT_TIMER 0x4 /**< soft timer,the timer's callback function will be called in timer thread. *///软件时钟.软件定时器线程模式

三、flag在线程中的定义

线程虽然也继承了内核对象,但是它的数据定义并未直接包含内核对象结构体变量成员,而是直接在线程控制块中包含其成员,如下:

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 */ #ifdef RT_USING_MODULE
void *module_id; /**< id of application module */
#endif rt_list_t list; /**< the object list */
rt_list_t tlist; /**< the thread list */
......

由以上线程控制块定义可知,从开始到list成员都是保持与内核对象一致,至于为什么会是这样,估计是RTT作者应该是很早之前就写好了线程相关的代码,所以一直沿续至今.注意,在线程控制块中是flags,多了一个s,但这并不妨碍它继承自内核对象控制块的特点,但是这个内核对象的flags对于线程,在内核中似乎并没有多大的作用,从线程的初始化接口函数中可以看出并没有使用这个flags参数,也没有从外部实参传进来,似乎RTT作者将它遗忘了,或是暂时还没有想好在线程中如何使用这个参数.

四、flag在IPC中的定义

RTT在IPC对象在信号量,互斥锁,事件,邮件,消息队列这五类这里我们统称为IPC内核对象。flag在这些IPC内核对象中只有两种定义:

#define RT_IPC_FLAG_FIFO                0x00            /**< FIFOed IPC. @ref IPC. *///按队列先进先出的方式处理.
#define RT_IPC_FLAG_PRIO 0x01 /**< PRIOed IPC. @ref IPC. *///按线程优先级的方式处理,即哪个线程的优先级高,则哪个先操作.

五、其他

flag在设备、内存池、内存堆中均没有用到。flag在模块中有用到,bit0被用作带entry point与否标志。

六、RT-thread内核总结

在rtthread-2.0.0正式版中,系统内核主要在src文件夹中:

在前面所讲的rtthread有关内核的章节中,主要对其中10个源文件所涉及的内核对象作了详细介绍:

对于其中kservice.c(有关链表初始化,往前插入,向后插入)、memheap.c(内存堆)、mempool.c(内在池)、moudule.c(moudule.h,应用模块)、slab.c(SLAB内存管理算法)5个部份没有详细介绍。

RT-thread内核对象标志flag总结的更多相关文章

  1. SetHandleInformation设置内核对象标志

    当父进程创建子进程时,子进程将继承父进程的内核对象.这时如果要控制子进程使用父进程的内核对象.可以使用 SetHandleInformation设置. BOOL SetHandleInformatio ...

  2. [4]Windows内核情景分析---内核对象

    写过Windows应用程序的朋友都常常听说"内核对象"."句柄"等术语却无从得知他们的内核实现到底是怎样的, 本篇文章就揭开这些技术的神秘面纱. 常见的内核对象 ...

  3. Windows核心编程:第9章 用内核对象进行线程同步

    Github https://github.com/gongluck/Windows-Core-Program.git //第9章 用内核对象进行线程同步.cpp: 定义应用程序的入口点. // #i ...

  4. RT-thread内核之线程内核对象

    在RT-Thread实时操作系统中,任务采用了线程来实现,线程是RT-Thread中最基本的调度单位,它描述了一个任务执行的上下文关系,也描述了这个任务所处的优先等级.重要的任务能拥有相对较高的优先级 ...

  5. windows核心编程---第八章 使用内核对象进行线程同步

    使用内核对象进行线程同步. 前面我们介绍了用户模式下线程同步的几种方式.在用户模式下进行线程同步的最大好处就是速度非常快.因此当需要使用线程同步时用户模式下的线程同步是首选. 但是用户模式下的线程同步 ...

  6. 第9章 用内核对象进行线程同步(4)_死锁(DeadLock)及其他

    9.7 线程同步对象速查表 对象 何时处于未触发状态 何时处于触发状态 成功等待的副作用 进程 进程仍在运行的时候 进程终止的时(ExitProcess.TerminateProcess) 没有 线程 ...

  7. windows核心编程---第三章 内核对象及句柄本质

      本章讨论的是相对抽象的概念,不涉及任何具体的内核对象的细节而是讨论所有内核对象的共有特性. 首先让我们来了解一下什么是内核对象.内核对象通过API来创建,每个内核对象是一个数据结构,它对应一块内存 ...

  8. Windows API学习---线程与内核对象的同步

    前言 若干种内核对象,包括进程,线程和作业.可以将所有这些内核对象用于同步目的.对于线程同步来说,这些内核对象中的每种对象都可以说是处于已通知或未通知的状态之中.这种状态的切换是由Microsoft为 ...

  9. c++事件内核对象(event)进程间激活(转)

    源出处:http://blog.csdn.net/richerg85/article/details/7538493 此文主要说明的是,c++中创建的一个事件内核对象可以在不同的程序(进程)间共用,也 ...

随机推荐

  1. Java基础之instanceof和transient关键字用法

    instanceof 用于检测指定对象是否是某个类(本类.父类.子类.接口)的实例.Java中的instanceof也称为类型比较运算符,因为它将类型与实例进行比较. 返回true或false. 如果 ...

  2. 北京Uber优步司机奖励政策(2月22日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  3. 北京Uber优步司机奖励政策(12月27日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  4. 天津Uber优步司机奖励政策(12月28日到12月29日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  5. 宁波Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  6. vim 打造IDE

    1.MinBufExplorer 2.Ctags Ctags工具是用来遍历源代码文件生成tags文件,这些tags文件能被编辑器或其它工具用来快速查找定位源代码中的符号(tag/symbol),如变量 ...

  7. beego 点滴

    在使用beego时遇到 need a primary key field 1 确保结构中的 字段首字母大写 2 beego默认主键是id 如果主键定义的是其他字段比如userid 那么加上orm pk ...

  8. Andorid自定义attr的各种坑

    本文来自网易云社区 作者:孙有军 在开发Andorid应用程序中,经常会自定义View来实现各种各样炫酷的效果,在实现这吊炸天效果的同时,我们往往会定义很多attr属性,这样就可以在XML中配置我们想 ...

  9. 你需要掌握的http知识

    作为一名前端er,http是我们必须要掌握的,那么我们到底需要掌握哪些东西呢 一.基础知识 这里我们介绍与http相关的TCP.IP.DNS.url.uri 1.IP IP地址是我们很熟悉的东西,最常 ...

  10. 【转】unity 热更新思路和实现

    声明:本文介绍的热更新方案是我在网上搜索到的,然后自己修改了一下,相当于是借鉴了别人的思路,加工成了自己的,在此感谢无私分享经验的朋友们. 想要使用热更新技术,需要规划设计好资源比较策略,资源版本,确 ...