[计算机软件及应用]单片机原理与嵌入式系统设计-原理、应用、Protues仿真、实验设计第9章.ppt
- 【下载声明】
1. 本站全部试题类文档,若标题没写含答案,则无答案;标题注明含答案的文档,主观题也可能无答案。请谨慎下单,一旦售出,不予退换。
2. 本站全部PPT文档均不含视频和音频,PPT中出现的音频或视频标识(或文字)仅表示流程,实际无音频或视频文件。请谨慎下单,一旦售出,不予退换。
3. 本页资料《[计算机软件及应用]单片机原理与嵌入式系统设计-原理、应用、Protues仿真、实验设计第9章.ppt》由用户(三亚风情)主动上传,其收益全归该用户。163文库仅提供信息存储空间,仅对该用户上传内容的表现方式做保护处理,对上传内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(点击联系客服),我们立即给予删除!
4. 请根据预览情况,自愿下载本文。本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
5. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007及以上版本和PDF阅读器,压缩文件请下载最新的WinRAR软件解压。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机软件及应用 计算机软件 应用 单片机 原理 嵌入式 系统 设计 Protues 仿真 实验设计
- 资源描述:
-
1、第第9章章 多任务实时操作系统多任务实时操作系统RTX-51 RTX-51是是Keil公司开发的一款应用于公司开发的一款应用于80C51系列单片机的实时多任务操作系统。采用系列单片机的实时多任务操作系统。采用RTX-51可简化复杂的软件设计,缩短项目周期。可简化复杂的软件设计,缩短项目周期。RTX-51使得复杂的多任务程序设计变得简单,因此在使得复杂的多任务程序设计变得简单,因此在80C51系列单片机嵌入式系统中应用很广泛。系列单片机嵌入式系统中应用很广泛。n9.1 RTX-51实时多任务操作系统简介实时多任务操作系统简介n9.2 RTX-51 TINY的任务管理的任务管理n9.3 如何使用如
2、何使用RTX-51 n9.4 RTX-51 TINY提供的系统函数提供的系统函数n9.5 RTX-51 TINY的配置的配置n9.6 基于基于Proteus的的RTX-51应用实例应用实例n 本本 章章 小小 结结RTX-51实时多任务操作系统简介实时多任务操作系统简介 RTX-51是是Keil公司开发的用于公司开发的用于80C51系列单片机的多任系列单片机的多任务实时操作系统。务实时操作系统。RTX-51可以在单个可以在单个CPU上管理几个作业上管理几个作业(任务),因而使复杂的系统和软件设计以及有时间限制的(任务),因而使复杂的系统和软件设计以及有时间限制的工程开发变得简单。工程开发变得简
3、单。RTX-51有有2个模式:个模式:RTX-51 FULL(完全模式)和(完全模式)和RTX-51 TINY(最小模式)。(最小模式)。RTX-51 FULL允许允许4个优先权任务的循环和切换,并且还能并行个优先权任务的循环和切换,并且还能并行地利用中断功能。地利用中断功能。RTX-51支持信号传递,以及与系统邮箱和信号支持信号传递,以及与系统邮箱和信号量进行消息传递。量进行消息传递。RTX-51的的os_wait 函数可以等待以下事件:中函数可以等待以下事件:中断、时间到、来自任务或中断的信号、来自任务或中断的消息、断、时间到、来自任务或中断的信号、来自任务或中断的消息、信号量。信号量。R
4、TX-51 TINY是是RTX-51 FULL的一个子集,可以很容的一个子集,可以很容易地运行在易地运行在80C51系统上,而不需要外部系统上,而不需要外部RAM。RTX-51 TINY支持按时间片循环任务调度,支持任务支持按时间片循环任务调度,支持任务间信号传递,最大间信号传递,最大16个任务,可以并行地利用中断。个任务,可以并行地利用中断。具有以下等待操作:超时、另一个任务或中断的信号。具有以下等待操作:超时、另一个任务或中断的信号。但它不能进行信息处理,不支持存储区的分配和释放,但它不能进行信息处理,不支持存储区的分配和释放,不支持占先式调度。不支持占先式调度。RTX-51 TINY是一
5、个很小的内核,是一个很小的内核,完全集成在完全集成在Keil C51编译器中。更重要的是,它仅占编译器中。更重要的是,它仅占用用800 B左右的程序存储空间,可以在没有外部数据存左右的程序存储空间,可以在没有外部数据存储器的储器的80C51系统中运行,但应用程序仍然可以访问系统中运行,但应用程序仍然可以访问外部存储器。外部存储器。9.1.1 单任务程序与多任务程序的比较单任务程序与多任务程序的比较1简单的单任务简单的单任务嵌入式程序和标准嵌入式程序和标准C程序都是从程序都是从main()函数开始执行的,在函数开始执行的,在嵌入式应用中,嵌入式应用中,main()通常是一个无限循环,可以认为是一
6、通常是一个无限循环,可以认为是一个持续执行的单个任务,个持续执行的单个任务,例如例如void main(void)while(1)/*永远重复永远重复*/do_something();/*执行执行 do_something“任务任务”*/在这个例子里,在这个例子里,do_something函数可以认为是一个单任务,由函数可以认为是一个单任务,由于仅有一个任务在执行,所以没有必要进行多任务处理或使用多于仅有一个任务在执行,所以没有必要进行多任务处理或使用多任务操作系统。任务操作系统。2多任务循环多任务循环 main()函数通过在一个循环里调用多个服务函数(或任务)函数通过在一个循环里调用多个服务
7、函数(或任务)来实现伪多任务调度。来实现伪多任务调度。例如例如void main(voidvoid main(void)intint counter=0;counter=0;while(1)while(1)/*一直重复执行一直重复执行*/check_serial_io check_serial_io();();/*检查串行输入检查串行输入*/process_serial_cmds process_serial_cmds();();/*处理串行输入处理串行输入*/check_kbd_io check_kbd_io();();/*检查键盘输入检查键盘输入*/process_kbd_cmds pro
8、cess_kbd_cmds();();/*处理键盘输入处理键盘输入*/adjust_ctrlr_parms adjust_ctrlr_parms()();/*调整控制器调整控制器*/counter+;counter+;/*增加计数器增加计数器*/3前后台系统前后台系统 main()函数仍然是在一个循环中调用相应的函数完成函数仍然是在一个循环中调用相应的函数完成相应的操作,这部分可以看成是后台行为,前台程序则通过相应的操作,这部分可以看成是后台行为,前台程序则通过中断来处理紧急事件。中断来处理紧急事件。bit int0_flag=0;/中断中断0发生标记,初始化为发生标记,初始化为0void m
9、ain(void)int counter=0;TCON=0 x55;/*电平触发外部中断电平触发外部中断*/IE=0 x81;/*打开外中断打开外中断int0*/while(1)/*后台运行的任务后台运行的任务*/check_serial_io();/*检查串行输入检查串行输入*/process_serial_cmds();/*处理串行输入处理串行输入*/check_kbd_io();/*检查键盘输入检查键盘输入*/process_kbd_cmds();/*处理键盘输入处理键盘输入*/counter+;/*增加计数器增加计数器*/if(int0_flag)例如例如:do_int0_someth
10、ing();/*执行执行do_int0_something任务任务*/int0_flag=0;/清除清除int0_flag void exint0(void)interrupt 0 /处理紧急事件任务处理紧急事件任务 int0_flag=1;/*设置中断设置中断0标记标记*/;在程序运行时,后台程序检查每个任务是否具备运行条件,通在程序运行时,后台程序检查每个任务是否具备运行条件,通过一定的调度算法来完成相应的操作。对于实时性要求特别严过一定的调度算法来完成相应的操作。对于实时性要求特别严格的操作通常由中断来完成,仅在中断服务程序中标记事件的格的操作通常由中断来完成,仅在中断服务程序中标记事件
11、的发生,不再做任何工作就退出中断,经过后台程序的调度完成发生,不再做任何工作就退出中断,经过后台程序的调度完成事件的处理,这样就不会造成在中断服务程序中处理费时的事事件的处理,这样就不会造成在中断服务程序中处理费时的事件而影响后续事件和其他中断。件而影响后续事件和其他中断。4RTX-51实时多任务实时多任务 RTX-51TINY允许允许“准并行准并行”同时执行几个任务。各个任务并非持续运行,同时执行几个任务。各个任务并非持续运行,CPU执行时间被划分为若干时间片(执行时间被划分为若干时间片(time slice),每一个任务在预先定义),每一个任务在预先定义好的时间片内得以执行。时间到使正在执
12、行的任务挂起,并使另一个任务开好的时间片内得以执行。时间到使正在执行的任务挂起,并使另一个任务开始执行。当使用始执行。当使用RTX-51 TINY时,为每个任务建立独立的任务函数。时,为每个任务建立独立的任务函数。void check_serial_io_task(voidvoid check_serial_io_task(void)_task_ 1)_task_ 1 /*该任务检测串行该任务检测串行I/0I/0*/void process_serial_cmds_task(voidvoid process_serial_cmds_task(void)_task_ 2)_task_ 2 /*该
13、任务处理串行命令该任务处理串行命令*/void check_kbd_io_task(voidvoid check_kbd_io_task(void)_task_ 3)_task_ 3 /*该任务检测键盘该任务检测键盘I/OI/O*/void process_kbd_cmds_task(voidvoid process_kbd_cmds_task(void)_task_ 4)_task_ 4 /*处理键盘命令处理键盘命令*/void startup-_task(voidvoid startup-_task(void)_task_ 0)_task_ 0 os_create_task(1);/os_
14、create_task(1);/*建立串行建立串行I/OI/O任务任务*/os_create_task(2);/os_create_task(2);/*建立串行命令任务建立串行命令任务*/os_create_task(3)os_create_task(3);/*建立键盘建立键盘I/OI/O任务任务*/os_create_task(4);/os_create_task(4);/*建立键盘命令任务建立键盘命令任务*/os_delete_task(0);/os_delete_task(0);/*删除启动任务删除启动任务*/例如例如:9.1.2 使用使用RTX-51 TINY的软硬件要求的软硬件要求1
15、编译环境编译环境 操作系统操作系统RTX-51的软件环境要求:的软件环境要求:C51编译程序。编译程序。BL51连接程序。连接程序。A51宏汇编程序。宏汇编程序。库文件库文件RTX-51TNY.LIB必须保存在必须保存在DOS环境变量环境变量C51LIB指定的程序库路径内,一般是目录指定的程序库路径内,一般是目录C51LIB。头文件。头文件RTX-51TNY.H必须保存在必须保存在DOS环境变量环境变量C51INC指定的包含路径指定的包含路径内,一般是目录内,一般是目录C51INC。RTX-51内核完全集成在内核完全集成在Keil C51编译器中,在编译器中,在Vision2 IDE完成安装之
16、后,软件环境即满足上述要求。完成安装之后,软件环境即满足上述要求。使用使用RTX-51 TINY系统时,需要了解其在编译环境、硬件系系统时,需要了解其在编译环境、硬件系统方面的要求和技术参数。统方面的要求和技术参数。RTX-51 TINY运行于大多数运行于大多数80C51兼容的器件及其变种上。兼容的器件及其变种上。RTX-51 TINY应用程序可以访问外部数据存储器,但应用程序可以访问外部数据存储器,但RTX-51 TINY内核无此需求。内核无此需求。2硬件系统硬件系统RTX-51 TINY技术参数技术参数描 述RTX-51 TINY任务数量16个RAM需求7字节DATA空间3倍于任务数量的I
17、DATA空间代码要求900字节硬件要求定时器0系统时钟100065535个周期中断请求时间小于20个周期任务切换时间100700个周期取决于堆栈的负载 RTX-51 TINY支持支持Keil C51编译器全部的存储模编译器全部的存储模式。存储模式的选择只影响应用程序对象的位置,式。存储模式的选择只影响应用程序对象的位置,RTX-51 TINY系统变量和应用程序栈空间总是位于系统变量和应用程序栈空间总是位于8051的内部存储区(的内部存储区(DATA或或IDATA区),一般情况下,区),一般情况下,应用程序应使用小(应用程序应使用小(SMALL)模式。)模式。RTX-51 TINY执行协作式任务
18、切换(每个任务至执行协作式任务切换(每个任务至少调用一个操作系统例程)和循环任务切换(每个任少调用一个操作系统例程)和循环任务切换(每个任务在操作系统切换到下一个任务前运行一个固定的时务在操作系统切换到下一个任务前运行一个固定的时间段),不支持抢先式任务切换以及任务优先级。间段),不支持抢先式任务切换以及任务优先级。9.1.3 使用使用RTX-51 TINY的注意事项的注意事项 RTX-51 TINY中的中断、再入函数、指针和寄存器的选择,与中的中断、再入函数、指针和寄存器的选择,与普通的单片机程序也有所区别,这些在使用时都要及时注意。普通的单片机程序也有所区别,这些在使用时都要及时注意。1中
19、断中断RTX-51 TINY与中断函数并行运作,中断服务程序可以通过发与中断函数并行运作,中断服务程序可以通过发送信号(用送信号(用isr_send_signal函数)或设置任务的就序标志函数)或设置任务的就序标志(用(用isr_set_ ready函数)与函数)与RTX-51 TINY的任务进行通信。的任务进行通信。如同在一个标准的、没有如同在一个标准的、没有RTX-51 TINY的应用中一样,中断例的应用中一样,中断例程必须在程必须在RTX-51TINY应用中实现并允许,应用中实现并允许,RTX-51 TINY没有没有中断服务程序的管理。中断服务程序的管理。RTX-51 TINY使用定时器
20、使用定时器0、定时器、定时器0中断和寄存器组中断和寄存器组1。如果。如果在程序中使用了定时器在程序中使用了定时器0,则,则RTX-51 TINY将不能正常运转。将不能正常运转。RTX-51 TINY认为总中断总是允许(认为总中断总是允许(EA=1)。)。RTX-51 TINY库例程在需要时改变中断系统(库例程在需要时改变中断系统(EA)的状态,以确保)的状态,以确保RTX-51 TINY的内部结构不被中断破坏。当允许或禁止总中断时,的内部结构不被中断破坏。当允许或禁止总中断时,RTX-51 TINY只是简单地改变只是简单地改变EA的状态,不保存并重装的状态,不保存并重装EA,EA只是简单地被置
21、位或清除。因此,如果程序在调用只是简单地被置位或清除。因此,如果程序在调用RTX-51例程前禁止了中断,例程前禁止了中断,RTX-51可能会失去响应。可能会失去响应。在程序的临界区,可能需要在短时间内禁止中断。但是,在中在程序的临界区,可能需要在短时间内禁止中断。但是,在中断禁止后,不能调用任何断禁止后,不能调用任何RTX-51 TINY的例程。如果程序确实的例程。如果程序确实需要禁止中断,应该持续很短的时间。需要禁止中断,应该持续很短的时间。1中断中断2再入函数再入函数C51编译器提供对再入函数的支持,再入函数在再入堆栈中存编译器提供对再入函数的支持,再入函数在再入堆栈中存储参数和局部变量,
22、从而保护递归调用或并行调用。储参数和局部变量,从而保护递归调用或并行调用。RTX-51 TINY不支持对不支持对C51再入栈的任何管理。因此,如果在程序中使再入栈的任何管理。因此,如果在程序中使用再入函数,必须确保这此函数不调用任何用再入函数,必须确保这此函数不调用任何RTX-51 TINY系统系统函数,且不被循环任务切换所打断。函数,且不被循环任务切换所打断。仅用寄存器传递参数和保存自动变量的仅用寄存器传递参数和保存自动变量的C函数具有内在的再入函数具有内在的再入性,这些函数可以被不同的性,这些函数可以被不同的RTX-51 TINY任务无限制地调用。任务无限制地调用。非可再入非可再入C51函
23、数不能被超过一个以上的任务或中断过程调用。函数不能被超过一个以上的任务或中断过程调用。非再入非再入C51函数在静态存储区段保存参数和自动变量(局部数函数在静态存储区段保存参数和自动变量(局部数据),该区域在函数被多个任务同时调用或递归调用时可能会据),该区域在函数被多个任务同时调用或递归调用时可能会被修改。被修改。如果确定多个任务不会递归(或同时)调用,则多个任务可以如果确定多个任务不会递归(或同时)调用,则多个任务可以调用非再入函数。通常,这意味着必须禁止循环任务调度,且调用非再入函数。通常,这意味着必须禁止循环任务调度,且该非再入函数不能调用任何该非再入函数不能调用任何RTX-51 TIN
24、Y系统函数。系统函数。3C51库例程库例程可再入可再入C51库函数可在任何任务中无限制地使用。对于非再入的库函数可在任何任务中无限制地使用。对于非再入的C51库函数,用户要保证它们不能同时被几个任务所调用。库函数,用户要保证它们不能同时被几个任务所调用。4多数据指针多数据指针Keil C51编译器允许使用多数据指针(存在于许多编译器允许使用多数据指针(存在于许多80C51的派生的派生芯片中),但芯片中),但RTX-51 TINY不提供对它们的支持。因此,在不提供对它们的支持。因此,在RTX-51 TINY的应用程序中应小心使用多数据指针。的应用程序中应小心使用多数据指针。5运算单元运算单元Ke
25、il C51编译器允许使用运算单元(存在于许多编译器允许使用运算单元(存在于许多8051的派生芯的派生芯片中)。片中)。RTX-51 TINY不提供对它们的支持。因此,在不提供对它们的支持。因此,在RTX-51 TINY的应用程序中须小心使用运算单元。的应用程序中须小心使用运算单元。6寄存器组寄存器组RTX-51 TINY分配所有的任务到寄存器分配所有的任务到寄存器0,因此,所有的函数必,因此,所有的函数必须用须用C51的默认设置进行编译。中断函数可以使用剩余的寄存器的默认设置进行编译。中断函数可以使用剩余的寄存器组。然而,组。然而,RTX-51 TINY需要寄存器组中的需要寄存器组中的6个固
展开阅读全文
链接地址:https://www.163wenku.com/p-3369399.html