没有合适的资源?快使用搜索试试~ 我知道了~
首页RTX51 Tiny官方文档(中文版)
资源详情
资源评论
资源推荐
RTX51 Tiny 实时操作系统
目录
RTX51 Tiny 用户手册包含如何使用 Keil RTX51 实时系统内核。手册包含章节如下:
总览
简单介绍 RTX51 Tiny 内核
实时系统编程
讨论 RTX51 Tiny 面对及解决的问题
操作原理
讨论如何使用 RTX51 Tiny 切换任务
配置 RTX51 Tiny
讨论如何去给应用程序配置内核
使用 RTX51 Tiny
关注如何使用内核包括创建和编译任务等详细信息
参考库
列出 RTX51 Tiny 库中的所有例程
1
RTX51 Tiny 实时操作系统
总览
RTX51 Tiny 是一个实时系统,它允许你创建可同时执行多个功能或任务的应用程序。
在嵌入式应用中这往往是必须的。虽然可以创建无 RTOS 实时程序(通过执行一个或多个任
务循环),但诸如调度,维护和时序问题,像 RTX51 Tiny 这样的 RTOS 可以解决。
一个实时的操作系统可以灵活的调度系统资源,像 CPU、内存和任务之间的通信。
RTX51 Tiny 是一个功能强大且简单易用的 RTOS,适用于所有 8051 衍生产品。
在 Keil C51 编译器中 RTX51 Tiny 是用标准 C(ANSI C)编写的。C 语言允许你轻松的定
义任务功能而不必进行复杂的栈和变量设置。RTX51 程序需要包含一个特殊的头文件且链
接 RTX51 库到程序中。
1. 新特性
RTX51 Tiny 第二版包含了许多新特性使实时软件开发更容易,如下
代码分段
RTX51 Tiny 现在支持代码分段(需配置文件 L51_BANK.A51 文件)。
明确任务切换
新功能(OS_SWITCH_TASK)可以是一个任务处于就绪状态并立即切换至另一个任
务。
任务就绪标志
新的 RTX51 Tiny 库允许给任务设置就绪状态标志,使任务处于就绪状态,在一个
时间间隔、超时或接受到信号后恢复运行。
CPU 空闲模式
RTX51 Tiny 允许 CPU 处于空闲模式
定时器中断的用户代码支持
开发者可以添加自己的代码到 RTX51 Tiny 定时器中断中,也可以为自己的例程设
置和 RTX51 Tiny 相同的例程(需配置 CONF_TNY.A51)。
支持间隔时间设置
OS_REST+INTERVAL 允许开发者在混合的时间间隔和信号中调用 OS_WAIT 来调整超
时时间。
此外,RTX51 Tiny 已被重新组合以具备灵活性、加速性以及对代码和数据空间要求更
小。
RTX51 Tiny 第二版在显著减小代码量并具有可扩展性。
1) 轮询任务切换被禁用
2) 很少 RTX51 Tiny 系统功能被使用
3) 栈检查被禁用
禁用轮询任务切换被禁用也降低了数据空间要求。
2. 已解决问题
2
RTX51 Tiny 实时操作系统
以下是 RTX51 Tiny 1.06 已知问题的列表,这些问题将在 2.0 版中得以纠正:
1) 在 RTX51 Tiny 1.06 中,当一个中断发生在 OS_WAIT 中时 ISR_SEND_SIGNAL 会破坏”
就绪”状态,这将使任务挂起等待中断的信号,这个问题将在 2.0 版中得以纠正。
2) 在 RTX51 Tiny 1.06 中,当一个信号发生时,在调用 OS_WAIT 时 K_IVL 和 K_SIG 不能
被合并,因为间隔定时器的值不能调整。2.0 版中提供 OS_REST_INTERVAL 例程允许
开发者正确的调整间隔定时器。
3) 在 RTX51 Tiny 1.06 中,TIMESHARING 等同于轮询不能被设置为 1,若是的,如果中
断发生前轮询时间设置,那么轮询将被破坏和延时 256 个时间周期(时钟滴答次
数)而不是 1,这些问题将在 2.0 版中得以解决。
4) 在 RTX51 Tiny 1.06 中,当用户中断执行时间长于系统时钟周期时间,系统时钟计时
器将被递归调用,这将覆盖 SAVEPSW 和 SAVEACC 值,通常会造成系统崩溃。这个
问题将在 2.0 版中得以解决。如果你的应用程序包含了一个中断且执行时间长于系
统时钟周期时间,LONG_USR_INTR 配置选项值将被设置为 1。如果应用程序大部分
时间用于执行高优先级中断例程时,开发者需要这样设置。
3. 产品规格
参数 范围
最大定义任务数量
16
最大激活任务数量
16
代码空间需求
900 Bytes Max
数据空间需求
7 Bytes
栈空间需求
3 Bytes/Task
定时器
0
系统时钟除数
1,000-65535
中断延时
20 Cycles or Less
上下文切换时间
100-700 Cycles
4. 软件工具
RTX51 Tiny 需要使用以下应用软件:
C51 编译器
A51 宏汇编器
BL51 链接器或 LX51 链接器
RTX51TINY.LIB 和 RTX51BT.LIB 库文件必须存放在库文件(\KEIL\C51\LIB)文件夹中。
RTX51TINY.H 头文件必须存放在头文件(\KEIL\C51\INC)文件夹中。
3
RTX51 Tiny 实时操作系统
5. 目标需求
5.1 中断
RTX51 Tiny 与中断函数一同并行工作,中断服务例程通过发送信号或设置任务”就
绪”状态标志与 RTX51 Tiny 任务通讯。
在 RTX51 Tiny 应用程序中中断例程必须被执行且可用,它们遵循一样的标准,无
RTX51 Tiny 应用程序没有中断服务例程管理。
RTX51 Tiny 使用定时器 0,定时器 0 中断和寄存器组 1。如果开发者的程序使用定时
器 0,那么 RTX51 Tiny 将无法正常工作。开发者可以添加自己的定时器 0 ISR 代码到
RTX51 Tiny 定时器 0 ISR 代码尾部(参考硬件定时器获取更多信息)。
RTX51 Tiny 假设始终启用全局中断(EA = 1),RTX51 TinY 需要更改中断系统状态,
以确保内部没有破坏内部结构。RTX51 Tiny 通过更改 EA 状态来启用和禁用中断,这
里不保存和恢复 EA,只是简单的设置和清除。如果开发者禁用中断调用 RTX51 Tiny
例程将无法回应。程序关键部分可能需要短时间的禁用中断,然而,你不可能在禁
用中断时调用 RTX51 Tiny 例程,所有如果你的程序打算禁止中断,那么它因该只是
暂时的。
5.2 重入函数
C51 编译器提供可重入函数可重入函数存储参数和本地变量在可重入栈中,使它们
在递归和多重调用中被保护。RTX51 Tiny 不包含任何可重入栈管理。所以如果你使
用可重入函数在你的应用程序中,你必须保证这些函数不会调用 RTX51 Tiny 系统函
数且可重入函数不会被轮询任务切换中断。
C 函数当只使用寄存器参数和自动变量是真正意义上的可重入且不受任何限制的被
RTX51 Tiny 调用。
非可重入 C 函数不能被其他一些如任务或中断处理程序调用,非可重入函数存储参
数和变量在静态内存段,这些可以被的同时或递归的多个任务调用所覆盖。
你可以为多个处理非重入函数,但你必须保证它们不会被同时调用。通常这意味着
轮询任务调度被禁用且你的飞可重入函数不能调用 RTX51 Tiny 系统函数。
如果你想在你的任务或中断中处理可重入或不可重入函数时,应禁止任务轮询
切换。
5.3 C 库例程
C51 的可重入库例程可以不受任何限制的被调用。对于 C51 不可重入的库例程与不
可重入 C 函数具有相同限制。
5.4 多重数据指针
Keil C51 编译器允许在 8051 系列衍伸产品中使用多重数据指针,然而,RTX51 Tiny
不提供多重数据指针管理,因此你要小心的使用。
你应该禁用轮询任务切换,如果你使用多数据指针。
4
RTX51 Tiny 实时操作系统
5.5 算数单元
Keil C51 编译器允许你在 8051 系列衍伸产品的算数单元,然而,RTX51 Tiny 不提供
算数单元管理,因此你必须小心的使用。
你应该禁用任务轮询切换,如果你使用算数单元。
5.6 寄存器组
RTX51 Tiny 的所有任务都使用寄存器组 0,处于这个原因,所有任务必须在编译时
设置默认为 REGISTERBANK(0)。
中断函数可能使用剩余的寄存器组,然而,RTX51 Tiny 需要 6 字节的永久寄存器组
块。可以在配置文件中设置 RTX51 Tiny 使用的寄存器组。
实时程序
实时程序必须快速的响应实时事件,几个事件可以方便的创建了一个没有实时系统
(RTOS)的程序。随着越来越多的事件加入,程序愈发的复杂,这时一个实时系统变得越
来越重要了。
1. 单任务程序
嵌入式和标准 C 开始执行与 main 函数,在嵌入式应用程序 main 中通常是一个死循环且
连续执行的单任务。
void main(void)
{
While(1){ // repeat forever
do_samething(); //execute the do_samething task
}
}
这个例子中,do_samething 函数可以被认为是一个单任务,就像只有一个任务在执行,
这里不需要多任务处理能力和多任务操作系统。
2. 多任务程序
更复杂的 C 程序的函数或任务可以在循环中实现伪多处理能力。
void main(void)
{
int counter = 0;
while (1){
check_serial_io();
process_serial_cmds();
check_kbd_io();
process_kbd_cmds();
adjust_atrlr_parms();
counter++;
}
}
3. 在上面例子中,每个函数执行一个操作或任务。函数在一个接一个有顺序的执行。
4. 当添加更多任务时调度开始成为一个问题。例如,如果 process_kvd_cmds 函数要长时
5
剩余22页未读,继续阅读
__ALWAYS_RUN__
- 粉丝: 3
- 资源: 9
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- 数据结构1800题含完整答案详解.doc
- 医疗企业薪酬系统设计与管理方案.pptx
- 界面与表面技术界面理论与表面技术要点PPT学习教案.pptx
- Java集合排序及java集合类详解(Collection、List、Map、Set)讲解.pdf
- 网页浏览器的开发 (2).pdf
- 路由器原理与设计讲稿6-交换网络.pptx
- 火电厂锅炉过热汽温控制系统设计.doc
- 企业识别CIS系统手册[收集].pdf
- 物业管理基础知识.pptx
- 第4章财务预测.pptx
- 《集成电路工艺设计及器件特性分析》——实验教学计算机仿真系.pptx
- 局域网内共享文件提示没有访问权限的问题借鉴.pdf
- 第5章网络营销策略.pptx
- 固井质量测井原理PPT教案.pptx
- 毕业实习总结6篇.doc
- UGNX建模基础篇草图模块PPT学习教案.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论1