1 概述

1.1 功能列表

RW kernel是一个轻量且高效的实时操作系统,提供下面的功能:

(1)交换消息

(2)消息保存

(3)定时器功能

(4)kernel还提供一个用于延迟行为的事件函数

1.2 源文件结构

1.3 包含文件

为了使用内核提供的服务,用户需要包括下面的文件:

(1)ke_task.h

(2)ke_timer.h

1.4 kernel 环境

内核环境结构包括三个队列用于事件、定时器和消息的管理。

(1)evt_field:发送消息的队列,但是不传输给接收器(这个要怎么理解)

(2)queue_sent:发送消息的队列,但是不传输给接收器(这边肯定是有问题的!!)

(2)queue_saved:消息发送队列,但不被接收

(3)queue_timer:定时器队列

(4)mblock_first:指向链表的第一个元素

2 消息

2.1 概述

消息队列提供一种机制传输一个或更多消息给一个任务,下面两个队列被定义:

(1)queue_sent:发送消息队列单不发送给接收方

(2)queue_saved:消息队列发送但不被接收方接收

消息的传输分为三步:(这个在代码中是如何实现的?)

  1. 通过发送任务分发一个消息结构
  2. 添加消息参数
  3. 消息结构推入内核

一个消息由一个唯一的ID定义,这个ID由任务类型和一组升序的数字组成。下面的宏定义了任务的第一个消息ID:

#define KE_FIRST_MSG(task) ((ke_msg_id_t)((task)<<10))

TASK_TYPE[15:10] ID[9:0]                       

一个消息有一列定义于结构体的参数。

2.2 消息实体

(1)hdr:链表的头

(2)hci_type:HCI数据格式(仅被HCI使用)

(3)hci_off:消息中的HCI数据补偿(仅被HCI使用)

(4)hci_len:HCI传输长度(同上)

(5)id:     消息标识

(6)dest_id:内核目的标识

(7)src_id: 内核源的标识

(8)param_len:嵌入式结构参数长度

(9)param:嵌入式结构参数

2.3 消息标识

消息标识定义如下:

Typedef uint16_t ke_msg_id_t;

2.4 参数管理

在消息的分发中,参数的大小被发送并且为其在内核堆中分配内存。为了存储数据,参数中指针将被返回。因为在传输完成后,时序会释放这部分内存。

2.5 消息队列实体

一个消息队列被定义为由消息元素组成的链表:

(1)*first:指向链表的第一个元素

(2)*last:指向最后一个元素

如果核心规范使能,则下面将被添加:

(1)cnt:链表中元素的数目

(2)maxcnt:链表中元素的最大数目

(3)mincnt:链表中元素的最小数目

2.6 消息队列原语

2.6.1 消息分发(函数)

原型:

Void *ke_msg_alloc(ke_msg_id_t const id,

Ke_task_id_t const dest_id,

Ke_task_id_t const src_id,

Uint16_t const param_len)

函数参数表

返回:指向ke_msg参数成员的指针。如果这个参数结构是空,这个指针将指向消息的末尾并且不被使用(除非要检索消息指针或是发送消息)。

描述:这个原语为一个被设定的消息分发内存。内存被动态的分发在堆上并且可用参数结构及的长度被提供,使得分发正确的大小。

2.6.2 消息发送

原型:

Void ke_msg_send(void const *param_ptr)

参数:param_ptr 指向将被发送的消息的参数成员

返回:None

描述:发送被类似ke_msg_alloc()函数分发的消息。内核将会小心释放这个消息的内存。

一旦这个函数被调用,将不可能进入它的任何数据,因为内核可能占用这个消息并且释放原始内存。

2.6.3 消息发送基础(basic该怎么理解,理解成基础好奇怪啊?)

原型:

Void ke_msg_send_basic(ke_msg_id_t const id,

Ke_task_id_t const dest_id,

Ke_task_id_t const src_id)

返回:None

描述:发送一个参数成员长度为0的消息,它将被在内部完成,不需要进行分发。(何为分发allocation)

2.6.4 前向消息

原型:void ke_msg_forward (void const *param_ptr,

ke_task_id_t const dest_id,

ke_task_id_t const src_id)

描述:提供一个消息给另一个任务,通过改变它的目的和源的任务ID。

2.6.5 释放消息

Void ke_msg_free(struct ke_msg const *msg)释放分发的消息

3 时序

3.1 概述

这个时序在主循环的后台被调用,在后台循环中,内核检查事件域是否为空,当通信事件位被置位则执行该事件句柄。

3.2 要求

3.2.1 优先级控制

这个时序检查事件域并获取最高优先级的事件,下面的函数负责发现被设置为最高优先级的事件。

co_clz(field);

事件的优先级被定义在ke_event.h文件中

0具有最高优先级直到31(最低优先级)

3.2.3 保存服务

这个服务允许保存一个消息去存储它在内存而不被注销。如果在一个消息接收后任务状态改变,这个时序将会试图在安排其他消息之前保存消息。

4 任务

4.1 定义

内核任务被定义为

(1)它的任务类型,内核为每个任务单独定义一个常量值。

(2)它的任务描述,一个包含任务所有信息的结构体

(3)在任何状态都能接收的消息

(4)在默认状态能接收的消息

(5)实时任务的数目

(6)任务状态的数目

(7)每个实时任务的当前状态

内核为每个任务描述分配一个指针,被用于处理从从一个任务到另一个任务上的消息传输。

5 内核定时器

5.1 概述

(1)RW内核提供一个时间基准(就是时间计数)

(2)RW内核提供定时器服务:开始和停止计时器

(3)定时器通过一个保存延时消息队列的方法来实现

(4)定时器消息没有参数

5.2 定时器定义

定时器被定义为间隔,最小的一步为10ms

5.3 定时器实体

定时器消息的结构体包括:

(1)*next:  指向下一个定时器的指针

(2)id:     消息定义

(3)task:   目标任务的定义

(4)time:   间隔

5.4定时器设置

RW文档翻译学习——RW-BLE-KERNEL核心函数功能相关推荐

  1. Mr.J-- jQuery学习笔记(二)--核心函数jQuery对象

    核心函数 函数列表 函数说明:jQuery()    主要用于获取HTML DOM元素并将其封装为jQuery对象 jQuery(): jQuery()函数是jQuery库的最核心函数,jQuery的 ...

  2. 从零开始学习jQuery (九) jQuery工具函数

    本系列文章导航 从零开始学习jQuery (一) 开天辟地入门篇 从零开始学习jQuery (二) 万能的选择器 从零开始学习jQuery (三) 管理jQuery包装集 从零开始学习jQuery ( ...

  3. UNIX再学习 -- exit 和 wait 系列函数

    我们一开始讲进程环境时,就有提到了.进程有 8 种方式使进程终止. 其中 5 种为正常终止,它们是: (1)在 main 函数中执行 return (2)调用 exit 函数,并不处理文件描述符,多进 ...

  4. 《Go语言圣经》学习笔记 第五章函数

    <Go语言圣经>学习笔记 第五章 函数 目录 函数声明 递归 多返回值 匿名函数 可变参数 Deferred函数 Panic异常 Recover捕获异常 注:学习<Go语言圣经> ...

  5. jQuery学习之二---jq核心

    还是那句话,我在这边只选择一些我已经看懂的,不能传播错误信息不是吗,哈哈,然后就是我个人觉得比较重要的,OK,下面开始学习,加油啊,一起加油! jQuery核心函数 1.jquery([selecto ...

  6. C语言再学习 -- 关键字return和exit ()函数

    终于到了最后一个关键字 return 了.感觉时间过的飞快,转眼间又是一年,如果时间可以 return 就好了. 一.return 介绍 参看:C语言中return 用法 1.含义: return 表 ...

  7. (转)Linux Kernel核心中文手册

    转自糖蒜的小屋http://blog.csdn.net/seastar_pickle/category/101975.aspx?PageNumber=2 Hardware Basic( 硬件基础知识  ...

  8. Rxswift学习之(一)函数响应式编程思想

    Rxswift学习之(一)函数响应式编程思想 1. 函数响应式编程思想必备基本概念简介 2. iOS中三种编程思想:链式.函数式和响应式编程 2.1 链式编程 2.2 函数式编程 2.3 响应式编程 ...

  9. 回溯算法:从电影蝴蝶效应中学习回溯算法的核心思想

    回溯算法:从电影<蝴蝶效应>中学习回溯算法的核心思想 数独.八皇后.0-1背包.图的着色.旅行商问题.全排列问题都能用到 理解"回溯算法" 回溯的思想,类似枚举搜索,枚 ...

  10. 【学习笔记】C++ 核心编程(二)类和对象——封装

    内容来自小破站<黑马程序员C++>复习自用 [学习笔记]C++ 核心编程(二)类和对象--封装 4 类和对象 4.1 封装 4.1.1 封装的意义(一) 4.1.1 封装的意义(二) 4. ...

最新文章

  1. 多平台、高颜值的网易云第三方播放器
  2. image shadow
  3. 导入之后再执行一个方法_种花生再撒点儿石灰,掌握这两个方法之后,提高产量基本没问题!...
  4. Android 工程的创建
  5. 云计算设计模式(二)——断路器模式
  6. 百度广告点击软件_结束了,百度 “毒瘤” 广告!
  7. 不关注公众号可以获取openid吗_微信公众号粉丝迁移
  8. ArrayList的使用方法【转载】
  9. Java API —— IO流( FileInputStream FileOutputStream BufferedInputStream BufferedOutputStream )...
  10. matlab table中的文字转string_el-table 滚动条美化
  11. 【JAVA程序设计】(C00075)基于SSM的网上汽车租赁管理系统
  12. 用Python设置Excel样式
  13. PyS60 console中文乱码问题
  14. SNP基因数据质控调研
  15. 先进级!阿里云大数据+AI平台通过信通院数据平台整体解决方案最高等级评测
  16. mysql maser-slave
  17. 如何查看Android keystore 签名信息
  18. 机器人门禁控制盒怎么接线方法_门禁电锁如何接线
  19. 基于时延法的麦克风阵列声源定位分析
  20. 夫琅禾费单缝衍射matlab分析,夫琅禾费单缝衍射光强分布MATLAB分析毕业设计论文...

热门文章

  1. 给定一个数组,求数组的最大连续子数组,使得该子数组的和最大
  2. Twitter上热门的技巧与思路
  3. PHP实现简单的网站访客统计
  4. 开源项目之魔兽争霸III外挂程序 Warkeys
  5. 微软代码签名证书使用指南(SignTool)
  6. Python defaultdict() 的理解
  7. 问题分析:5W2H分析法
  8. AWGN信道条件下,基于16QAM+OFDM的误码率计算,并与理论值对比
  9. html 防网页假死,htmlweb开发:防止浏览器假死的方法.doc
  10. 实战大数据平台开发架构讲解,免费大数据教学视频等你来拿