logo资料库

c_user.RTEMS_C语言用户指南.双语.V20131224.pdf

第1页 / 共737页
第2页 / 共737页
第3页 / 共737页
第4页 / 共737页
第5页 / 共737页
第6页 / 共737页
第7页 / 共737页
第8页 / 共737页
资料共737页,剩余部分请下载后查看
目录
图表目录
前 言
1 概述
1.1 简介
1.2 实时应用系统
1.3 实时执行器
1.4 RTEMS应用架构
1.5 RTEMS内部架构
1.6 用户定制和扩展
1.7 可移植性
1.8 内存需求
1.9 读者
1.10 约定
1.11 手册组织
2 关键概念
2.1 简介
2.2 对象
2.2.1 对象名称
2.2.2 对象ID
2.2.2.1 32位对象ID格式
2.2.2.2 16位对象ID格式
2.2.3 对象ID描述
2.3 通信和同步
2.4 时间
2.5 内存管理
3 RTEMS数据类型
3.1 简介
3.2 数据类型列表
4 调度概念
4.1 简介
4.2 调度算法
4.2.1 优先级调度
4.2.2 确定性优先级调度
4.2.3 简单优先级调度
4.2.4 简单SMP优先级调度
4.2.5 最早截止期限优先调度
4.2.6 恒定带宽服务器调度(CBS)
4.3 调度修改机制
4.3.1 任务优先级和调度
4.3.2 抢占
4.3.3 时间片轮转
4.3.4 手动轮转
4.4 分发任务
4.5 任务状态转换
5 初始化管理器
5.1 简介
5.2 背景知识
5.2.1 初始化任务
5.2.2 系统初始化
5.2.3 空闲任务
5.2.4 初始化管理器失败
5.3 操作
5.3.1 初始化RTEMS
5.3.2 关闭RTEMS
5.4 指令
5.4.1 INITIALIZE_DATA_STRUCTURES - 初始化RTEMS数据结构
5.4.2 INITIALIZE _BEFORE_DRIVERS – 设备驱动前的初始化
5.4.3 INITIALIZE_DEVICE_DRIVERS – 初始化设备驱动程序
5.4.4 INITIALIZE_START_MULTITASKING – 完成初始化并启动多任务
5.4.5 SHUTDOWN_EXECUTIVE – 关闭RTEMS
6 任务管理器
6.1 简介
6.2 背景知识
6.2.1 任务定义
6.2.2 任务控制块
6.2.3 任务状态
6.2.4 任务优先级
6.2.5 任务模式
6.2.6 访问任务参数
6.2.7 浮点考虑
6.2.8 每任务变量
6.2.9 建立任务属性集
6.2.10 建立一个模式和掩码
6.3 操作
6.3.1 创建任务
6.3.2 获取任务ID
6.3.3 启动和重启任务
6.3.4 挂起和恢复任务
6.3.5 延迟当前执行的任务
6.3.6 改变任务优先级
6.3.7 改变任务模式
6.3.8 记事本位置
6.3.9 任务删除
6.4 指令
6.4.1 TASK_CREATE – 创建一个任务
6.4.2 TASK_IDENT – 获得一个任务的ID
6.4.3 TASK_SELF - 获取调用者ID
6.4.4 TASK_START – 启动一个任务
6.4.5 TASK_RESTART – 重启一个任务
6.4.6 TASK_DELETE – 删除一个任务
6.4.7 TASK_SUSPEND – 挂起一个任务
6.4.8 TASK_RESUME – 恢复一个任务
6.4.9 TASK_IS_SUSPENDED – 确定一个任务是否挂起
6.4.10 TASK_SET_PRIORITY – 设置任务优先级
6.4.11 TASK_MODE – 改变当前任务模式
6.4.12 TASK_GET_NOTE – 获得任务记事本入口
6.4.13 TASK_SET_NOTE – 设置任务记事本入口
6.4.14 TASK_WAKE_AFTER – 在间隔后唤醒
6.4.15 TASK_WAKE_WHEN – 在指定的时间唤醒
6.4.16 ITERATE_OVER_ALL_THREADS – 遍历任务
6.4.17 TASK_VARIABLE_ADD – 关联每任务变量
6.4.18 TASK_VARIABLE_GET – 获取每任务变量的值
6.4.19 TASK_VARIABLE_DELETE – 移除每任务变量
7 中断管理器
7.1 简介
7.2 背景知识
7.2.1 处理一个中断
7.2.2 RTEMS中断级
7.2.3 通过RTEMS禁用中断
7.3 操作
7.3.1 建立一个ISR
7.3.2 ISR可以调用的指令
7.4 指令
7.4.1 INTERRUPT_CATCH – 建立一个ISR
7.4.2 INTERRUPT_DISABLE – 禁用中断
7.4.3 INTERRUPT_ENABLE – 启用中断
7.4.4 INTERRUPT_FLASH – 临时中断
7.4.5 INTERRUPT_IS_IN_PROGRESS - 是否正在运行一个ISR
8 时钟管理器
8.1 简介
8.2 背景知识
8.2.1 必要的支持
8.2.2 时间和日期数据结构
8.2.3 时钟节拍和时间片轮转
8.2.4 延时
8.2.5 超时
8.3 操作
8.3.1 通知一个节拍
8.3.2 设置时间
8.3.3 获取时间
8.4 指令
8.4.1 设置日期和时间
8.4.2 CLOCK_GET – 获得日期和时间信息
8.4.3 CLOCK_GET_TOD – 获得符合TOD格式的日期和时间
8.4.4 CLOCK_GET_TOD_TIMEVAL – 获得符合timeval格式的日期和时间
8.4.5 CLOCK_GET_SECONDS_SINCE EPOCH – 获得自新纪元以来的秒数
8.4.6 CLOCK_GET_TICKS_PER_SECOND – 获得每秒的节拍数
8.4.7 CLOCK_GET_TICKS_SINCE BOOT – 获得自引导以来的节拍数
8.4.8 CLOCK_GET_UPTIME – 获得自引导以来的时间
8.4.9 CLOCK_GET_UPTIME_TIMEVAL – 获得自引导以来符合timeval格式的时间
8.4.10 CLOCK_GET_UPTIME_SECONDS – 获得自引导以来的秒数
8.4.11 CLOCK_SET_NANOSECONDS_EXTENSION - 从最近的节拍处理程序安装纳秒功能
8.4.12 CLOCK_TICK – 通知一个时钟节拍
9 定时器管理器
9.1 简介
9.2 背景知识
9.2.1 必要的支持
9.2.2 定时器
9.2.3 定时器服务器
9.2.4 定时器服务例程
9.3 操作
9.3.1 创建一个定时器
9.3.2 获取定时器ID
9.3.3 开始一个间隔定时器
9.3.4 开始一个日历时间定时器
9.3.5 取消一个定时器
9.3.6 重置一个定时器
9.3.7 开始定时器服务器
9.3.8 删除一个定时器
9.4 操作
9.4.1 TIMER_CREATE – 创建一个定时器
9.4.2 TIMER _IDENT – 获得一个定时器的ID
9.4.3 TIMER_CANCEL – 取消一个定时器
9.4.4 TIMER_DELETE – 删除一个定时器
9.4.5 TIMER_FIRE_AFTER - 在间隔之后触发定时器
9.4.6 TIMER_FIRE_WHEN – 在指定的时间触发定时器
9.4.7 TIMER_INITIATE_SERVER – 为基于任务的定时器开始服务器
9.4.8 TIMER_SERVER_FIRE_AFTER – 在间隔之后触发基于任务的定时器
9.4.9 TIMER_SERVER_FIRE_WHEN – 在指定的时间触发基于任务的定时器
9.4.10 TIMER_RESET – 重置一个间隔定时器
10 单调速率管理器
10.1 简介
10.2 背景知识
10.2.1 单调速率管理器所必要的支持
10.2.2 周期统计
10.2.3 单调速率管理器定义
10.2.4 单调速率调度算法
10.2.5 可调度性分析
10.2.5.1 假设
10.2.5.2 处理器利用率规则
10.2.5.3 处理器利用率规则示例
10.2.5.4 最早截止期限规则
10.2.5.5 最早截止期限规则示例
10.2.5.6 放宽假设
10.2.5.7 延伸阅读
10.3 操作
10.3.1 创建一个单调速率周期
10.3.2 操纵一个周期
10.3.3 获取一个周期的状态
10.3.4 取消一个周期
10.3.5 删除一个单调速率周期
10.3.6 示例
10.3.7 简单周期任务
10.3.8 多周期任务
10.4 指令
10.4.1 RATE_MONOTONIC_CREATE – 创建一个单调速率周期
10.4.2 RATE_MONOTONIC_IDENT – 获得一个周期的ID
10.4.3 RATE _MONOTONIC_CANCEL – 取消一个周期
10.4.4 RATE_MONOTONIC_DELETE – 删除一个单调速率周期
10.4.5 RATE_MONOTONIC_PERIOD – 推断当前的/启动下一个周期
10.4.6 RATE_MONOTONIC_GET STATUS – 从一个周期获取状态
10.4.7 RATE_MONOTONIC_GET_STATISTICS – 从一个周期获取统计数据
10.4.8 RATE_MONOTONIC_RESET_STATISTICS – 为一个周期重置统计数据
10.4.9 RATE_MONOTONIC_RESET_ALL_STATISTICS – 为所有周期重置统计信息
10.4.10 RATE_MONOTONIC_REPORT_STATISTICS – 打印周期统计报告
11 信号量管理器
11.1 简介
11.2 背景知识
11.2.1 嵌套资源访问
11.2.2 优先级反转
11.2.3 优先级继承
11.2.4 优先级置项
11.2.5 创建一个信号量属性集
11.2.6 建立一个信号量获取选项集
11.3 操作
11.3.1 创建一个信号量
11.3.2 获取信号量ID
11.3.3 捕获一个信号量
11.3.4 释放一个信号量
11.3.5 删除一个信号量
11.4 指令
11.4.1 SEMAPHORE_CREATE – 创建一个信号量
11.4.2 SEMAPHORE_IDENT – 获得一个信号量的ID
11.4.3 SEMAPHORE_DELETE – 删除一个信号量
11.4.4 SEMAPHORE_OBTAIN – 捕获一个信号量
11.4.5 SEMAPHORE_RELEASE – 释放一个信号量
11.4.6 SEMAPHORE_FLUSH – 解锁所有任务以等待一个信号量
12 屏障管理器
12.1 简介
12.2 背景知识
12.2.1 自动与手动屏障比较
12.2.2 建立屏障属性集
12.3 操作
12.3.1 创建一个屏障
12.3.2 获取屏障ID
12.3.3 在一个屏障等待
12.3.4 释放一个屏障
12.3.5 删除一个屏障
12.4 指令
12.4.1 BARRIER_CREATE – 创建一个屏障
12.4.2 BARRIER_IDENT – 获得一个屏障的ID
12.4.3 BARRIER_DELETE – 删除一个屏障
12.4.4 BARRIER_OBTAIN – 捕获一个屏障
12.4.5 BARRIER_RELEASE – 释放一个屏障
13 消息管理器
13.1 简介
13.2 背景知识
13.2.1 消息
13.2.2 消息队列
13.2.3 建立一个消息队列属性集
13.2.4 建立一个MESSAGE_QUEUE_RECEIVE选项集
13.3 操作
13.3.1 创建一个消息队列
13.3.2 获取消息队列ID
13.3.3 接收一个消息
13.3.4 发送一个消息
13.3.5 广播一个消息
13.3.6 删除一个消息队列
13.4 指令
13.4.1 MESSAGE_QUEUE_CREATE – 创建一个队列
13.4.2 MESSAGE_QUEUE_IDENT – 获得一个队列的ID
13.4.3 MESSAGE_QUEUE_DELETE – 删除一个队列
13.4.4 MESSAGE_QUEUE_SEND – 放置消息到一个队列的后面
13.4.5 MESSAGE_QUEUE_URGENT – 放置消息到一个队列的前面
13.4.6 MESSAGE_QUEUE_BROADCAST – 广播N个消息到一个队列
13.4.7 MESSAGE_QUEUE_RECEIVE – 从一个队列接收消息
13.4.8 MESSAGE_QUEUE_GET_NUMBER_PENDING – 获得一个挂起队列的消息数量
13.4.9 MESSAGE_QUEUE_FLUSH – 清空一个队列的所有消息
14 事件管理器
14.1 简介
14.2 背景知识
14.2.1 事件集
14.2.2 建立一个事件集或条件
14.2.3 建立一个EVEN_RECEIVE选项集
14.3 操作
14.3.1 发送一个事件集
14.3.2 接收一个事件集
14.3.3 确定挂起的事件集
14.3.4 接收所有挂起的事件
14.4 指令
14.4.1 EVENT_SEND – 发送事件集到一个任务
14.4.2 EVENT_RECEIVE – 接收事件条件
15 信号管理器
15.1 简介
15.2 背景知识
15.2.1 信号管理器定义
15.2.2 ASR和ISR的比较
15.2.3 建立一个信号集
15.2.4 建立一个ASR模式
15.3 操作
15.3.1 建立一个ASR
15.3.2 发送一个信号集
15.3.3 处理一个ASR
15.4 指令
15.4.1 SIGNAL_CATCH – 建立一个ASR
15.4.2 SIGNAL_SEND – 发送信号集到一个任务
16 分区管理器
16.1 简介
16.2 背景知识
16.2.1 分区管理器定义
16.2.2 建立一个分区属性集
16.3 操作
16.3.1 创建一个分区
16.3.2 获取分区ID
16.3.3 捕获一个缓冲区
16.3.4 释放一个缓冲区
16.3.5 删除一个分区
16.4 指令
16.4.1 PARTITION_CREATE – 创建一个分区
16.4.2 PARTITION_IDENT – 获得一个分区的ID
16.4.3 PARTITION_DELETE – 删除一个分区
16.4.4 PARTITION_GET_BUFFER – 从一个分区获得缓冲区
16.4.5 PARTITION_RETURN_BUFFER - 将缓冲区返回给一个分区
17 区域管理器
17.1 简介
17.2 背景知识
17.2.1 区域管理器定义
17.2.2 建立一个属性集
17.2.3 建立一个选项集
17.3 操作
17.3.1 创建一个区域
17.3.2 获取区域ID
17.3.3 增加内存到一个区域
17.3.4 捕获一个段
17.3.5 释放一个段
17.3.6 获取一个段的大小
17.3.7 改变一个段的大小
17.3.8 删除一个区域
17.4 指令
17.4.1 REGION_CREATE –创建一个区域
17.4.2 REGION _IDENT – 获得一个区域的ID
17.4.3 REGION_DELETE – 删除一个区域
17.4.4 REGION_EXTEND – 增加内存到一个区域
17.4.5 REGION_GET_SEGMENT – 从一个区域获得段
17.4.6 REGION_RETURN_SEGMENT – 将段返回给一个区域
17.4.7 REGION_GET_SEGMENT_SIZE – 获取一个段的大小
17.4.8 REGION_RESIZE_SEGMENT – 改变一个段的大小
18 双端口内存管理器
18.1 简介
18.2 背景知识
18.3 操作
18.3.1 创建一个端口
18.3.2 获取端口ID
18.3.3 转换一个地址
18.3.4 删除一个DPMA端口
18.4 指令
18.4.1 PORT_CREATE – 创建一个端口
18.4.2 PORT_IDENT – 获得一个端口的ID
18.4.3 PORT_DELETE – 删除一个端口
18.4.4 PORT_EXTERNAL_TO_INTERNAL - 将外部地址转换到内部地址
18.4.5 PORT_INTERNAL_TO_EXTERNAL - 将内部地址转换到外部地址
19 I/O管理器
19.1 简介
19.2 背景知识
19.2.1 设备驱动表
19.2.2 主、次设备号
19.2.3 设备名称
19.2.4 设备驱动环境
19.2.5 运行时驱动注册
19.2.6 设备驱动接口
19.2.7 设备驱动初始化
19.3 操作
19.3.1 注册和查找名称
19.3.2 访问一个设备驱动
19.4 指令
19.4.1 IO_REGISTER_DRIVER – 注册一个设备驱动
19.4.2 IO_UNREGISTER_DRIVER – 注销一个设备驱动
19.4.3 IO_INITIALIZE – 初始化一个设备驱动
19.4.4 IO_REGISTER_NAME – 注册一个设备
19.4.5 IO_LOOKUP_NAME – 查找一个设备
19.4.6 IO_OPEN – 打开一个设备
19.4.7 IO_CLOSE – 关闭一个设备
19.4.8 IO_READ – 从一个设备读
19.4.9 IO_WRITE – 写到一个设备
19.4.10 IO_CONTROL – 特殊设备服务
20 致命错误管理器
20.1 简介
20.2 背景知识
20.3 操作
20.3.1 通知一个致命错误
20.4 指令
20.4.1 FATAL_ERROR_OCCURRED – 调用致命错误处理程序
20.4.2 FATAL - 使用错误源调用致命错误处理程序
20.4.3 EXCEPTION_FRAME_PRINT – 打印异常帧
20.4.4 FATAL_SOURCE_DESCRIPTION – 返回对一个致命源的描述
20.4.5 INTERNAL_ERROR_DESCRIPTION - 返回对一个内部错误码的描述
21 板级支持包
21.1 简介
21.2 复位和初始化
21.2.1 中断堆栈要求
21.2.2 处理器具有一个单独的中断堆栈
21.2.3 处理器不具有单独的中断堆栈
21.3 设备驱动
21.3.1 时钟节拍设备驱动
21.4 用户扩展
21.5 多处理器通信接口(MPCI)
21.5.1 紧耦合系统
21.5.2 松耦合系统
21.5.3 混合耦合系统
21.5.4 异构系统
22 用户扩展管理器
22.1 简介
22.2 背景知识
22.2.1 扩展集
22.2.2 TCB扩展区
22.2.3 扩展
22.2.3.1 TASK_CREATE扩展
22.2.3.2 TASK_START扩展
22.2.3.3 TASK_RESTART扩展
22.2.3.4 TASK_DELETE扩展
22.2.3.5 TASK_SWITCH扩展
22.2.3.6 TASK_BEGIN扩展
22.2.3.7 TASK_EXITTED扩展
22.2.3.8 FATAL错误扩展
22.2.4 调用顺序
22.3 操作
22.3.1 创建一个扩展集
22.3.2 获取扩展集ID
22.3.3 删除一个扩展集
22.4 指令
22.4.1 EXTENSION_CREATE – 创建一个扩展集
22.4.2 EXTENSION_IDENT – 获得一个扩展集的ID
22.4.3 EXTENSION_DELETE – 删除一个扩展集
23 配置一个系统
23.1 简介
23.2 默认值选择哲学
23.3 确定RTEMS工作区大小
23.4 RTEMS工作区大小估计的潜在问题
23.5 配置示例
23.5.1 无限对象
23.5.2 每个对象类无限对象实例
23.5.3 无限对象实例
23.5.4 启用无限对象实例
23.5.5 指定无限对象分配大小
23.6 经典API配置
23.6.1 指定最大经典API任务
23.6.2 禁用经典API记事本
23.6.3 指定最大经典API定时器
23.6.4 指定最大经典API信号量
23.6.5 指定最大经典API消息队列
23.6.6 指定最大经典API屏障
23.6.7 指定最大经典API周期
23.6.8 指定最大经典API分区
23.6.9 指定最大经典API区域
23.6.10 指定最大经典API端口
23.6.11 指定最大经典API用户扩展
23.7 经典API初始化任务表配置
23.7.1 实例化经典API初始化任务表
23.7.2 指定经典API初始化任务入口点
23.7.3 指定经典API初始化任务名称
23.7.4 指定经典API初始化任务栈大小
23.7.5 指定经典API初始化任务优先级
23.7.6 指定经典API初始化任务属性
23.7.7 指定经典API初始化任务模式
23.7.8 指定经典API初始化任务参数
23.7.9 不使用生成的初始化任务表
23.8 POSIX API配置
23.8.1 指定最大POSIX API线程
23.8.2 指定最大POSIX API互斥体
23.8.3 指定最大POSIX API条件变量
23.8.4 指定最大POSIX API键
23.8.5 指定最大POSIX API定时器
23.8.6 指定最大POSIX API排队信号
23.8.7 指定最大POSIX API消息队列
23.8.8 指定最大POSIX API消息队列描述符
23.8.9 指定最大POSIX API信号量
23.8.10 指定最大POSIX API屏障
23.8.11 指定最大POSIX API自旋锁
23.8.12 指定最大POSIX API读/写锁
23.9 POSIX初始化线程表配置
23.9.1 实例化POSIX API初始化线程表
23.9.2 指定POSIX API初始化线程入口点
23.9.3 指定POSIX API初始化线程栈大小
23.9.4 不使用生成的POSIX初始化线程表
23.10 基本系统信息
23.10.1 单独或统一的工作区
23.10.2 每个时钟节拍的长度
23.10.3 指定时间片轮转量子
23.10.4 指定线程优先级数量
23.10.5 指定最大任务大小
23.10.6 配置中断堆栈的大小
23.10.7 预留任务/线程栈内存在最小值上方
23.10.8 自动归零RTEMS工作区和C程序堆
23.10.9 启用任务栈使用检查
23.10.10 指定应用特定的用户扩展
23.11 配置自定义任务栈分配
23.11.1 自定义任务栈分配器初始化
23.11.2 自定义任务栈分配器
23.11.3 自定义任务栈析构函数
23.12 为经典API消息缓冲区配置内存
23.12.1 为单个经典消息API消息队列计算内存
23.12.2 为所有经典消息API消息队列预留内存
23.13 不常用的配置参数
23.13.1 指定内存开销
23.13.2 不生成配置信息
23.14 C库支持配置
23.14.1 启用Malloc家族统计
23.14.2 指定文件描述符的最大数量
23.14.3 禁用POSIX Termios支持
23.14.4 指定POSIX Termios的最大端口
23.15 文件系统配置参数
23.15.1 提供应用程序特定的挂载表
23.15.2 配置miniIMFS作为根文件系统
23.15.3 配置devFS作为根文件系统
23.15.4 禁用文件系统支持
23.16 块设备缓存配置
23.16.1 启用块设备缓存
23.16.2 缓存大小
23.16.3 缓冲区最小大小
23.16.4 缓冲区最大大小
23.16.5 换出任务交换周期
23.16.6 换出任务最大块保持时间
23.16.7 换出任务优先级
23.16.8 每个预读请求的最大块
23.16.9 每个写请求的最大块
23.16.10 块设备缓存任务的任务栈大小
23.16.11 预读任务优先级
23.16.12 换出工作者任务计数
23.16.13 换出工作者任务优先级
23.17 BSP特定的设置
23.17.1 禁用BSP配置设置
23.17.2 指定BSP支持sbrk()
23.17.3 指定BSP特定空闲任务
23.17.4 指定BSP空闲任务栈大小的建议值
23.17.5 指定BSP特定用户扩展
23.17.6 指定BSP特定中断堆栈大小
23.17.7 指定BSP特定最大设备数量
23.17.8 BSP推荐的已清除的RTEMS工作区
23.17.9 指定BSP先决条件驱动
23.18 空闲任务配置
23.18.1 指定应用特定的空闲任务体
23.18.2 指定空闲任务栈大小
23.18.3 指定空闲任务执行应用初始化
23.19 调度算法配置
23.19.1 使用确定性优先级调度
23.19.2 使用简单优先级调度
23.19.3 使用最早截止期限优先调度
23.19.4 使用恒定带宽服务调度
23.19.5 使用简单SMP优先级调度
23.19.6 配置一个用户提供的调度
23.20 SMP特定配置参数
23.20.1 指定应用使用多核心(是SMP)
23.20.2 指定SMP系统最大处理器数量
23.21 设备驱动表
23.21.1 指定应用定义的设备驱动表
23.21.2 指定最大设备驱动数量
23.21.3 指定最大设备数量
23.21.4 启用控制台设备驱动
23.21.5 启用时钟驱动
23.21.6 启用基准定时器驱动
23.21.7 指定时钟和基准定时器驱动是不需要的
23.21.8 启用实时时钟驱动
23.21.9 启用看门狗设备驱动
23.21.10 启用图像帧缓冲设备驱动
23.21.11 启用根设备驱动
23.21.12 指定应用必需的设备驱动
23.21.13 指定额外的应用设备驱动
23.21.14 启用/dev/null设备驱动
23.21.15 启用/dev/zero设备驱动
23.22 多处理配置
23.22.1 指定应用将使用多处理
23.22.2 配置多处理器配置的节点号
23.22.3 配置多处理器配置的最大节点数量
23.22.4 配置多处理器配置的最大全局对象数量
23.22.5 配置多处理器配置的最大代理服务器数量
23.22.6 配置多处理器配置的MPCI
23.22.7 不生成多处理器配置表
23.23 Ada任务
23.23.1 指定应用包含Ada代码
23.23.2 指定Ada任务的最大数量
23.23.3 指定假Ada任务的最大数量
23.24 配置数据结构
24 多处理管理器
24.1 简介
24.2 背景知识
24.2.1 节点
24.2.2 全局对象
24.2.3 全局对象表
24.2.4 远程操作
24.2.5 代理服务器
24.2.6 多处理器配置表
24.3 多处理器通信接口层
24.3.1 INITIALIZATION
24.3.2 GET_PACKET
24.3.3 RETURN_PACKET
24.3.4 RECEIVE_PACKET
24.3.5 SEND_PACKET
24.3.6 支持异构环境
24.4 操作
24.4.1 通知一个数据包
24.5 指令
24.5.1 MULTIPROCESSING_ANNOUNCE – 通知一个包的到达
25 栈边界检查
25.1 简介
25.2 背景知识
25.2.1 任务栈
25.2.2 执行
25.3 操作
25.3.1 初始化栈边界检查器
25.3.2 检查溢出的任务栈
25.3.3 报告任务栈的使用率
25.3.4 当一个任务溢出栈时
25.4 例程
25.4.1 STACK_CHECKER_IS_BLOWN - 有当前任务溢出它的栈
25.4.2 STACK_CHECKER_REPORT_USAGE - 报告任务栈的使用率
26 CPU使用率统计
26.1 简介
26.2 背景知识
26.3 操作
26.3.1 报告CPU使用率统计
26.3.2 复位CPU使用率统计
26.4 指令
26.4.1 cpu_usage_report - 报告CPU使用率统计
26.4.2 cpu_usage_reset - 复位CPU使用率统计
27 对象服务
27.1 简介
27.2 背景知识
27.2.1 API
27.2.2 对象类
27.2.3 对象名称
27.3 操作
27.3.1 分解和重组一个对象ID
27.3.2 打印一个对象ID
27.4 指令
27.4.1 BUILD_NAME - 建立取自于字符的对象名称
27.4.2 OBJECT_GET_CLASSIC_NAME - 从ID查找名称
27.4.3 OBJECT_GET_NAME – 以字符串形式获取对象名称
27.4.4 OBJECT_SET_NAME - 设置对象名称
27.4.5 OBJECT_ID_GET_API – 从ID获取API
27.4.6 OBJECT_ID_GET_CLASS - 从ID获取类
27.4.7 OBJECT_ID_GET_NODE -从ID获取节点
27.4.8 OBJECT_ID_GET_INDEX - 从ID获取索引
27.4.9 BUILD_ID - 从组件建立对象ID
27.4.10 OBJECT_ID_API_MINIMUM - 获取最小API值
27.4.11 OBJECT_ID_API_MAXIMUM - 获取最大API值
27.4.12 OBJECT_API_MINIMUM_CLASS - 获取最小类值
27.4.13 OBJECT_API_MAXIMUM_CLASS - 获取最大类值
27.4.14 OBJECT_GET_API_NAME - 获取API名称
27.4.15 OBJECT_GET_API_CLASS_NAME - 获取类名称
27.4.16 OBJECT_GET_CLASS_INFORMATION - 获取类信息
28 链表
28.1 简介
28.2 背景知识
28.2.1 节点
28.2.2 控件
28.3 操作
28.3.1 多线程
28.3.2 创建一个链表
28.3.3 遍历一个链表
28.4 指令
28.4.1 用节点初始化链表
28.4.2 初始化成空的
28.4.3 是NULL节点吗?
28.4.4 头部
28.4.5 尾部
28.4.6 两个节点相等吗?
28.4.7 链表是空的吗?
28.4.8 这是链表上的第一个节点吗?
28.4.9 这是链表上的最后一个节点吗?
28.4.10 这个链表只有一个节点吗?
28.4.11 返回链表的节点数量(无保护)
28.4.12 这个节点是链表的头部吗?
28.4.13 这个节点是链表的尾部吗?
28.4.14 提取节点
28.4.15 获得第一个节点
28.4.16 插入一个节点
28.4.17 添加一个节点
28.4.18 追加一个节点
29 Timespec助手
29.1 简介
29.2 背景知识
29.2.1 时间存储约定
29.3 操作
29.3.1 设置和获取timespec值
29.3.2 timespec数学函数
29.3.3 比较struct timespec实例
29.3.4 转换和有效性检查
29.4 指令
29.4.1 TIMESPEC_SET - 设置struct timespec实例
29.4.2 TIMESPEC_ZERO - 归零struct timespec实例
29.4.3 TIMESPEC IS VALID - 检查struct timespec实例的有效性
29.4.4 TIMESPEC_ADD_TO - 两个struct timespec实例相加
29.4.5 TIMESPEC_SUBTRACT - 两个struct timespec实例相减
29.4.6 TIMESPEC_DIVIDE - 两个struct timespec实例相除
29.4.7 TIMESPEC_DIVIDE_BY_INTEGER - struct timespec实例除以整数
29.4.8 TIMESPEC_LESS_THAN - 小于运算符
29.4.9 TIMESPEC_GREATER_THAN - 大于运算符
29.4.10 TIMESPEC_EQUAL_TO - 检查timespec等式
29.4.11 TIMESPEC_GET_SECONDS - 获得struct timespec实例的秒部分
29.4.12 TIMESPEC_GET_NANOSECONDS - 获得struct timespec实例的纳秒部分
29.4.13 TIMESPEC_TO_TICKS - 转换struct timespec实例到节拍
29.4.14 TIMESPEC_FROM_TICKS - 转换节拍到struct timespec表示法
30 恒定带宽服务器调度器API
30.1 简介
30.2 背景知识
30.2.1 恒定带宽服务器定义
30.2.2 处理周期任务
30.2.3 注册回调函数
30.2.4 限制
30.3 操作
30.3.1 设置服务器
30.3.2 附加任务到服务器
30.3.3 从服务器分离任务
30.3.4 示例
30.4 指令
30.4.1 CBS_INITIALIZE - 初始化CBS库
30.4.2 CBS_CLEANUP - 清除CBS库
30.4.3 CBS_CREATE_SERVER - 创建新的带宽服务器
30.4.4 CBS_ATTACH_THREAD - 附加线程到服务器
30.4.5 CBS_DETACH_THREAD - 从服务器分离线程
30.4.6 CBS_DESTROY_SERVER - 销毁带宽服务器
30.4.7 CBS_GET_SERVER_ID - 获得服务器的ID
30.4.8 CBS_GET_PARAMETERS - 获得服务器的调度参数
30.4.9 CBS_SET_PARAMETERS - 设置调度参数
30.4.10 CBS_GET_EXECUTION_TIME - 获得已流逝的执行时间
30.4.11 CBS_GET-REMAINING_BUDGET - 获得剩余的执行时间
30.4.12 CBS_GET_APPROVED_BUDGET - 获得调度器核准的执行时间
31 指令状态码
32 实例应用
33 术语
命令和变量索引
概念索引
RTEMS C User’s Guide Edition 4.10.99.0, for RTEMS 4.10.99.0 24 February 2013 RTEMS C 语言用户指南 版本:4.10.99.0,适用于 RTEMS 4.10.99.0 2013 年 2 月 24 日 (译注:本文档的英文原版经常更新,但本页上所注的日期并不更新,本次翻译 所依据的英文原版是 20130610 版。) 翻译:Tony Zhu bizasia@126.com On-Line Applications Research Corporation 在线应用研究公司
On-Line Applications Research Corporation TEXinfo 2012-11-08.11 在线应用研究公司 TEXinfo 2012-11-08.11 COPYRIGHT c 1988 - 2013. On-Line Applications Research Corporation (OAR). 版权所有 c 1988 - 2013 在线应用研究公司 The authors have used their best efforts in preparing this material. These efforts include the development, research, and testing of the theories and programs to determine their effectiveness. No warranty of any kind, expressed or implied, with regard to the software or the material contained in this document is provided. No liability arising out of the application or use of any product described in this document is assumed. The authors reserve the right to revise this material and to make changes from time to time in the content hereof without obligation to notify anyone of such revision or changes. The RTEMS Project is hosted at http: / /www .rtems .com. Any inquiries concerning RTEMS, its related support components, its documentation, or any custom services for RTEMS should be directed to the contacts listed on that site. A current list of RTEMS Support Providers is at http://www.rtems.com/oarsupport. 作者已经尽最大努力编制本材料。这些努力包括理论和程序的开发、研究与测试 以确定它们的有效性。对于软件或包含在本文档中的材料,我们不提供任何类型 的明示或暗示的保证。我们不承担本文档所描述的在应用程序或产品的使用中所 产生的责任。作者保留修改本材料和不定期改变内容的权利,对这些修改没有义 务通知任何人。RTEMS 项目托管在 http://www .rtems .com。任何涉及 RTEMS 的 查询、相关的支持组件、文档或任何定制服务,可以通过在该网站上的通讯录联 系。一个当前的 RTEMS 支持提供者列表在 http://www.rtems.com/oarsupport。
3 Table of Contents List of Figures ······································································· 47 Preface ················································································· 49 1 Overview ········································································ 55 1.1 Introduction ································································································· 55 1.2 Real-time Application Systems ····································································· 56 1.3 Real-time Executive ······················································································ 57 1.4 RTEMS Application Architecture ·································································· 59 1.5 RTEMS Internal Architecture ········································································ 60 1.6 User Customization and Extensibility ·························································· 64 1.7 Portability ····································································································· 64 1.8 Memory Requirements ················································································ 65 1.9 Audience ······································································································ 65 1.10 Conventions ······························································································· 66 1.11 Manual Organization ·················································································· 67 2 Key Concepts ·································································· 73 2.1 Introduction ································································································· 73 2.2 Objects ········································································································· 73 2.2.1 Object Names ····················································································· 74 2.2.2 Object IDs ··························································································· 75 2.2.2.1 Thirty-Two Object ID Format ··················································· 75 2.2.2.2 Sixteen Bit Object ID Format ···················································· 76 2.2.3 Object ID Description ········································································· 77 2.3 Communication and Synchronization ·························································· 78 2.4 Time ············································································································· 80 2.5 Memory Management ················································································· 82 3 RTEMS Data Types ·························································· 83 3.1 Introduction ································································································· 83 3.2 List of Data Types ························································································· 83
4 4 Scheduling Concepts ······················································· 93 4.1 Introduction ································································································· 93 4.2 Scheduling Algorithms ················································································· 93 4.2.1 Priority Scheduling ············································································· 94 4.2.2 Deterministic Priority Scheduler ························································ 96 4.2.3 Simple Priority Scheduler ··································································· 96 4.2.4 Simple SMP Priority Scheduler ·························································· 97 4.2.5 Earliest Deadline First Scheduler ······················································· 97 4.2.6 Constant Bandwidth Server Scheduling (CBS) ··································· 99 4.3 Scheduling Modification Mechanisms ······················································· 100 4.3.1 Task Priority and Scheduling ···························································· 101 4.3.2 Preemption ······················································································ 101 4.3.3 Timeslicing ······················································································· 101 4.3.4 Manual Round-Robin ······································································· 102 4.4 Dispatching Tasks ······················································································· 102 4.5 Task State Transitions ················································································· 103 5 Initialization Manager··················································· 111 5.1 Introduction ······························································································· 111 5.2 Background ································································································ 111 5.2.1 Initialization Tasks ············································································ 112 5.2.2 System Initialization ········································································· 112 5.2.3 The Idle Task ····················································································· 113 5.2.4 Initialization Manager Failure ·························································· 113 5.3 Operations ································································································· 115 5.3.1 Initializing RTEMS ············································································· 115 5.3.2 Shutting Down RTEMS ····································································· 117 5.4 Directives ··································································································· 117 5.4.1 INITIALIZE_DATA_STRUCTURES - Initialize RTEMS Data Structures · 118 5.4.2 INITIALIZE_BEFORE_DRIVERS - Perform Initialization Before Device Drivers ······························································································ 119 5.4.3 INITIALIZE_DEVICE_DRIVERS - Initialize Device Drivers ··················· 120 5.4.4 INITIALIZE_START_MULTITASKING – Complete Initialization and Start Multitasking ····················································································· 122 5.4.5 SHUTDOWN_EXECUTIVE - Shutdown RTEMS ·································· 124 6 Task Manager ······························································· 125
5 6.1 Introduction ······························································································· 125 6.2 Background ································································································ 126 6.2.1 Task Definition ·················································································· 127 6.2.2 Task Control Block ············································································ 127 6.2.3 Task States ························································································ 128 6.2.4 Task Priority ······················································································ 129 6.2.5 Task Mode ························································································ 130 6.2.6 Accessing Task Arguments ······························································· 133 6.2.7 Floating Point Considerations ·························································· 133 6.2.8 Per Task Variables ············································································· 135 6.2.9 Building a Task Attribute Set ···························································· 136 6.2.10 Building a Mode and Mask ···························································· 137 6.3 Operations ································································································· 139 6.3.1 Creating Tasks ·················································································· 139 6.3.2 Obtaining Task IDs ············································································ 140 6.3.3 Starting and Restarting Tasks ··························································· 140 6.3.4 Suspending and Resuming Tasks ······················································ 141 6.3.5 Delaying the Currently Executing Task ············································· 142 6.3.6 Changing Task Priority ······································································ 142 6.3.7 Changing Task Mode ········································································ 143 6.3.8 Notepad Locations ··········································································· 143 6.3.9 Task Deletion ···················································································· 143 6.4 Directives ··································································································· 144 6.4.1 TASK_CREATE - Create a task ··························································· 145 6.4.2 TASK_IDENT - Get ID of a task ·························································· 150 6.4.3 TASK_SELF - Obtain ID of caller ························································ 152 6.4.4 TASK_START - Start a task ································································· 153 6.4.5 TASK_RESTART - Restart a task ························································· 155 6.4.6 TASK_DELETE - Delete a task ···························································· 157 6.4.7 TASK_SUSPEND - Suspend a task ····················································· 159 6.4.8 TASK_RESUME - Resume a task ······················································· 161 6.4.9 TASK_IS_SUSPENDED - Determine if a task is Suspended ··············· 163 6.4.10 TASK_SET_PRIORITY - Set task priority ·········································· 164 6.4.11 TASK_MODE - Change the current task mode ······························· 166 6.4.12 TASK_GET_NOTE - Get task notepad entry ···································· 169 6.4.13 TASK_SET_NOTE - Set task notepad entry ····································· 171 6.4.14 TASK_WAKE_AFTER - Wake up after interval ································· 173 6.4.15 TASK_WAKE_WHEN - Wake up when specified ····························· 174
6 6.4.16 ITERATE_OVER_ALL_THREADS - Iterate Over Tasks ······················· 175 6.4.17 TASK_VARIABLE_ADD - Associate per task variable ······················· 176 6.4.18 TASK_VARIABLE_GET - Obtain value of a per task variable ··········· 178 6.4.19 TASK_VARIABLE_DELETE - Remove per task variable ···················· 180 7 Interrupt Manager ························································ 181 7.1 Introduction ······························································································· 181 7.2 Background ································································································ 181 7.2.1 Processing an Interrupt ···································································· 182 7.2.2 RTEMS Interrupt Levels ···································································· 184 7.2.3 Disabling of Interrupts by RTEMS ···················································· 184 7.3 Operations ································································································· 185 7.3.1 Establishing an ISR ··········································································· 185 7.3.2 Directives Allowed from an ISR ························································ 185 7.4 Directives ··································································································· 187 7.4.1 INTERRUPT_CATCH - Establish an ISR ·············································· 188 7.4.2 INTERRUPT_DISABLE - Disable Interrupts ········································ 189 7.4.3 INTERRUPT_ENABLE - Enable Interrupts ········································· 190 7.4.4 INTERRUPT_FLASH - Flash Interrupts ·············································· 191 7.4.5 INTERRUPT_IS_IN_PROGRESS - Is an ISR in Progress ······················ 192 8 Clock Manager ······························································ 193 8.1 Introduction ······························································································· 193 8.2 Background ································································································ 194 8.2.1 Required Support ············································································· 194 8.2.2 Time and Date Data Structures ························································ 194 8.2.3 Clock Tick and Timeslicing ······························································· 195 8.2.4 Delays ······························································································· 196 8.2.5 Timeouts ·························································································· 196 8.3 Operations ································································································· 197 8.3.1 Announcing a Tick ············································································ 197 8.3.2 Setting the Time ··············································································· 197 8.3.3 Obtaining the Time ·········································································· 198 8.4 Directives ··································································································· 199 8.4.1 CLOCK SET - Set date and time ························································ 200 8.4.2 CLOCK_GET - Get date and time information ·································· 202 8.4.3 CLOCK_GET_TOD - Get date and time in TOD format ····················· 204
7 8.4.4 CLOCK_GET_TOD_TIMEVAL - Get date and time in timeval format 205 8.4.5 CLOCK_GET_SECONDS_SINCE EPOCH - Get seconds since epoch ·· 207 8.4.6 CLOCK_GET_TICKS_PER_SECOND - Get ticks per second ················ 209 8.4.7 CLOCK_GET_TICKS_SINCE BOOT - Get ticks since boot ··················· 210 8.4.8 CLOCK_GET_UPTIME - Get the time since boot ······························ 211 8.4.9 CLOCK_GET_UPTIME_TIMEVAL - Get the time since boot in timeval format ······························································································ 212 8.4.10 CLOCK_GET_UPTIME_SECONDS - Get the seconds since boot ····· 213 8.4.11 CLOCK_SET_NANOSECONDS_EXTENSION - Install the nanoseconds since last tick handler ······································································· 214 8.4.12 CLOCK_TICK - Announce a clock tick ············································· 216 9 Timer Manager ····························································· 217 9.1 Introduction ······························································································· 217 9.2 Background ································································································ 218 9.2.1 Required Support ············································································· 218 9.2.2 Timers ······························································································ 218 9.2.3 Timer Server ····················································································· 219 9.2.4 Timer Service Routines ···································································· 219 9.3 Operations ································································································· 220 9.3.1 Creating a Timer ··············································································· 220 9.3.2 Obtaining Timer IDs ········································································· 220 9.3.3 Initiating an Interval Timer ······························································ 221 9.3.4 Initiating a Time of Day Timer ·························································· 221 9.3.5 Canceling a Timer ············································································· 222 9.3.6 Resetting a Timer ············································································· 222 9.3.7 Initiating the Timer Server ······························································· 222 9.3.8 Deleting a Timer ··············································································· 223 9.4 Directives ··································································································· 223 9.4.1 TIMER_CREATE - Create a timer ······················································· 224 9.4.2 TIMER _IDENT - Get ID of a timer ···················································· 225 9.4.3 TIMER_CANCEL - Cancel a timer ······················································ 226 9.4.4 TIMER_DELETE - Delete a timer ······················································· 227 9.4.5 TIMER_FIRE_AFTER - Fire timer after interval ································· 228 9.4.6 TIMER_FIRE_WHEN - Fire timer when specified ····························· 229 9.4.7 TIMER_INITIATE_SERVER - Initiate server for task-based timers ···· 231 9.4.8 TIMER_SERVER_FIRE_AFTER - Fire task-based timer after interval 233 9.4.9 TIMER_SERVER_FIRE_WHEN - Fire task-based timer when specified
8 ·········································································································· 235 9.4.10 TIMER_RESET - Reset an interval timer ········································· 237 10 Rate Monotonic Manager ··········································· 239 10.1 Introduction ····························································································· 239 10.2 Background ······························································································ 240 10.2.1 Rate Monotonic Manager Required Support ································ 240 10.2.2 Period Statistics ·············································································· 240 10.2.3 Rate Monotonic Manager Definitions ··········································· 242 10.2.4 Rate Monotonic Scheduling Algorithm ·········································· 243 10.2.5 Schedulability Analysis ··································································· 246 10.2.5.1 Assumptions ········································································ 246 10.2.5.2 Processor Utilization Rule ···················································· 247 10.2.5.3 Processor Utilization Rule Example ····································· 247 10.2.5.4 First Deadline Rule ······························································· 248 10.2.5.5 First Deadline Rule Example ················································ 249 10.2.5.6 Relaxation of Assumptions ·················································· 251 10.2.5.7 Further Reading ··································································· 252 10.3 Operations ······························································································· 253 10.3.1 Creating a Rate Monotonic Period ················································· 253 10.3.2 Manipulating a Period ···································································· 253 10.3.3 Obtaining the Status of a Period ···················································· 254 10.3.4 Canceling a Period ········································································· 255 10.3.5 Deleting a Rate Monotonic Period ················································· 255 10.3.6 Examples ························································································ 255 10.3.7 Simple Periodic Task ······································································· 256 10.3.8 Task with Multiple Periods ····························································· 258 10.4 Directives ································································································· 261 10.4.1 RATE_MONOTONIC_CREATE - Create a rate monotonic period ···· 262 10.4.2 RATE_MONOTONIC_IDENT - Get ID of a period ···························· 263 10.4.3 RATE _MONOTONIC_CANCEL - Cancel a period ···························· 264 10.4.4 RATE_MONOTONIC_DELETE - Delete a rate monotonic period ···· 265 10.4.5 RATE_MONOTONIC_PERIOD - Conclude current/Start next period ·········································································································· 266 10.4.6 RATE_MONOTONIC_GET STATUS - Obtain status from a period ··· 268 10.4.7 RATE_MONOTONIC_GET_STATISTICS – Obtain statistics from a period ······························································································· 270 10.4.8 RATE_MONOTONIC_RESET_STATISTICS – Reset statistics for a period
分享到:
收藏