调度方法:时间片轮转。

参考文档:Keil参考手册和rtl.h(任务的每个.c文件都应包含此头文件)头文件这两个文档

1)事件管理:让一个进程等待一个事件,这个事件可以由其它进程和中断触发(只能在中断中使用)。事件不用预先创建(但应先set后wait),wflags与event_flags都是u16类型,每一位代表一个事件,所以每个任务可有16个事件(1~16)。设定单一事件event_flags1<<(n-1),因此可以进行位的与或运算。

              os_evt_set(wflags,tmo)
              isr_evt_set(U16 event_flags, OS_TID task_id)     /*触发的2种方法:事务或中断触发*/
    os_evt_wait_and(wflags,tmo)  /*,tmo表示等待时间*/
    os_evt_wait_or(wflags,tmo)  /*事件等待的2种方法:逻辑与、或,调用之后会自动清除*/
    os_evt_get()  
    os_evt_clr(clr_flags,task_id)
   
 
(2)邮箱管理:建立一个邮箱,里面可以存放一定数目的消息(比如20条)。进程可以等待邮箱队列,如果邮箱里有消息,则取出,进程继续执行;如果邮箱为空,则继续等待。
        os_mbx_declare(mailbox1, num), os_mbx_init(mailbox1, sizeof (mailbox1));                    
                     os_mbx_send(mailbox1, msg);, isr_mbx_send()  /*发送邮箱的2种方法:进程或中断*/
        os_mbx_wait(mailbox1, &msg, 0xffff); /*不在同一个文件中需要进行声明extern OS_MBX mailbox1;*/

发送消息进程必须从动态内存池中分配一个内存块、将消息储存在这个内存块中,然后将它的指针传递给信箱。接收消息进程收到这个指针,取出内存块中的消息,然后释放这个内存块。

固定消息长度发送

RTX核有一个功能强大的固定内存块内存分配函数。它们是线程安全可重入,且能被RTX核无限制的使用。建议使用固定内存块分配函数发送固定大小的消息。需要为这个消息对象对内存池作适当地初始化。

U32 mpool[邮箱的条数*(2*sizeof(U32))/4 + 3]; /* Reserve a memory for 16 messages */

_init_box (mpool, sizeof(mpool), sizeof(struct message));

发送方:U32 *mptr;

      mptr = _alloc_box (mpool); /* Allocate a memory for the message */

      mptr[0] = 0x3215fedc; /* Set the message content. */

      mptr[1] = 0x00000015;         

      os_mbx_send (MsgBox, mptr, 0xffff); /* Send a message to a 'MsgBox' */

接收方:  os_mbx_wait (MsgBox, &rptr, 0xffff); /* Wait for the message to arrive. */

      rec_val[0] = rptr[0]; /* Store the content to 'rec_val' */

      rec_val[1] = rptr[1];

      _free_box (mpool, rptr); /* Release the memory block */

变长数据长度信息发送:必须使用可变大小内存块的内存分配函数。 RVCT 库在Stdlib.h文件中提供了这个函数(不可重入)

在malloc()和free()函数执行期间必须禁止系统定时器中断。tsk_lock()函数可禁止定时器中断,而tsk_unlock()函数使能定时器中断。

(3)互斥管理:进程独占的资源,加个锁,别的进程需要等待。
        os_mut_init ()
                            os_mut_wait()  //上锁
                            os_mut_release()  //解锁   
 
(4)信号量管理(计数器型):发送信号量时信号量+1;需求信号量-1(信号量与事件类似,进程等待的信号量大于0时,进程继续执行)。
  os_sem_init,
  os_sem_send,
  os_sem_wait, isr_sem_send  /*发送信号量的2种方法:进程或中断*/
   
 

(5)延时: os_dly_wait(),延时的单位:系统节拍。

任务的创建:__tast关键字来修饰函数,一个任务被创建多次即可以有多个实例。

os_tsk_create (xxx_task, 0);

os_tsk_delete_self ();

id1 = os_tsk_self();   /* Obtain own system task identification number */

2个系统任务  os_clock_demon

      和 os_idle_demon() /*空闲任务的钩子函数*/

#define OS_PRIVCNT     0  /*RTX内核采用 OS_PRIVCNT 使存储空间的利用最优化*/
#define OS_STKCHECK    1  /*堆栈检查:速度慢但可以指出堆栈有问题的任务ID*/
 

堆栈大小(用U32):#define OS_STKSIZE 100 /*所以为400字节*/

KEIL_RTX资源介绍的更多相关文章

  1. Puppet自动化运维-资源介绍篇(4)

    1.什么是资源? 资源是Puppet最基础的元素,每个资源的定义都具有标题,类型,以及一系列的属性. 资源定义有如下的特性:   (1) Puppet使用title在编译时区分每个资源,使用命名变量在 ...

  2. Unity编程标准导引-1.2官方资源介绍

    1.2.官方资源介绍 Unity官方提供了丰富的学习和参考资源,有以下类别: Unity手册以及API文档 Unity的官方教程 AssetStore 1.2.1 Unity手册以及API文档 前述文 ...

  3. 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍

    这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...

  4. [vue三部曲]第一部:vue脚手架的搭建和目录资源介绍,超详细!

    第一步 node环境安装 1.1 如果本机没有安装node运行环境,请下载node 安装包进行安装1.2 如果本机已经安装node的运行换,请更新至最新的node 版本下载地址:https://nod ...

  5. puppet(2)-资源介绍

    puppet- 资源介绍: 类型.属性与状态同实现方式分离.仅指定目标状态 type {'title': attribute => value, ... } 查看支持的资源类型: puppet ...

  6. 国外一些好用的UX/UI设计工具和资源介绍

    你今天使用的设计工具也许不再适合以后的网页和APP设计项目了.新的工具不断的推出市场,目标只有一个,让你的工作更快.更容易而且工作成效更好.以下就是各种工具的介绍入口,当您点击标题就会看到各种很好的工 ...

  7. kubernetes的Ingress资源介绍

    Ingress 的资源帮助信息介绍 [root@master ~]# kubectl explain ingress KIND: Ingress VERSION: extensions/v1beta1 ...

  8. Kubernetes的service资源介绍

    service 三种工作模式:userspace.iptables.ipvs 删除手动创建的service [root@master ~]# kubectl delete svc redis serv ...

  9. Android样式(style)和主题(theme)资源介绍-android学习之旅(五十六)

    样式(style)资源 代码示例 <?xml version="1.0" encoding="utf-8"?> <LinearLayout x ...

随机推荐

  1. 人生苦短之Python多线程

    #encoding=utf-8 import threading import time ''' python多线程并不是真正意义上的多线程,通常我们所说的多线程是多个线程同时执行某功能,而在pyth ...

  2. WebDriver API——javascript的相关操作

    有些时候webdriver是没法操作元素或浏览器的,这时候我们可以通过javascript来进行相关的操作,昨天在群里一个朋友定位一个显示框,总是无法定位点击,或者是点击无效,这个时候就可以用java ...

  3. Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=7&arch=x86_64&repo=os&infra=stoc

    今天在使用yum安装文件时,出现了以下问题: root@localhost opt]# yum update Loaded plugins: fastestmirror Could not retri ...

  4. Web前端行业的了解

    即将从事Web前端的工作的 先对即将从事的行业有个了解. Web前端发展史: 第一个网页诞生于90年代初,早期的网页除了一些小图片和毫无布局可言的标题段落,其全由文字构成.然而随着时代的进步,互联网的 ...

  5. 最小点覆盖 hdu--1054

    点击打开题目链接 最小点覆盖=最大二分匹配的 (单向图) ; 最小点覆盖=最大二分匹配的一半 (双向图) ; 证明 所以我们只需求最大匹配,用 匈牙利算法 求出最大匹配,除以二得到答案 具体算法都已经 ...

  6. Linux vSphere SDK for Perl 执行脚本报错

      本人在gentoo系统上安装完vSphere for Perl之后,执行/usr/lib/vmware-viperl/app/vm/vminfo.pl脚本. 提示错误如下: Server vers ...

  7. BZOJ_3489_ A simple rmq problem_KDTree

    BZOJ_3489_ A simple rmq problem_KDTree Description 因为是OJ上的题,就简单点好了.给出一个长度为n的序列,给出M个询问:在[l,r]之间找到一个在这 ...

  8. Exceprtion:e createQuery is not valid without active transaction; nested exception is org.hibernate.HibernateException: createQuery is not valid without active transaction

    如果增加配置了current_session_context_class属性,查询的时候需要session.beginTrasaction()来开启事务

  9. Module:template

    ylbtech-Module: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:http://ylbtech. ...

  10. 双重检查锁实现单例(java)

    单例类在Java开发者中非常常用,但是它给初级开发者们造成了很多挑战.他们所面对的其中一个关键挑战是,怎样确保单例类的行为是单例?也就是说,无论任何原因,如何防止单例类有多个实例.在整个应用生命周期中 ...