《RTX51Tiny中文手册全文下载.docx》由会员分享,可在线阅读,更多相关《RTX51Tiny中文手册全文下载.docx(28页珍藏版)》请在课桌文档上搜索。
1、RTX51Tiny202中文手册RTX51Tiny其次版(版本2.02)是RTX51TinyLXX的升级版本,他完全集成在keil的集成开发环境中。RTX51Tiny是一款可以运行在大多数8051兼容的器件及其派生器件上的实时操作系统(准实时),相对及传统的开发方式而言,用实时操作系统进行开发是一种效率更高的方式。作为实时操作系统,RTX51Tiny虽然比较简陋,但它还是具备了一些实时操作系统的基本要素,完全可以充当我们进入实时操作系统(RTOS)世界的领路者,更为重要的是,它是免费的。:-)从本节起,我会接连将keil帮助文件中的RTX51Tiny其次版的运用手册翻译为中文,并发布给大家,供
2、大家参考。RTX51TinV2.02中文手册DartlRTX51TiIIy第2版用户手册第一章概述RTX51Tiny是一种实时操作系统(RTOS),可以用它来建立多个任务(函数)同时执行的应用。嵌入式应用系统常常有这种需求。RTOS可以供应调度、维护、同步等功能。实时操作系统能敏捷的调度系统资源,像CPU和存储器,并且供应任务间的通信。RTX51Tiny是一个功能强大的RTOS,且易于运用,它用于8051系列的微限制器。RT51Tiny的程序用标准的C语言构造,由KeilC51C编译器编译。用户可以很简洁的定义任务函数,而不须要进行困难的栈和变量结构配置,只需包含一个指定的头文件。一、Whaf
3、sNewRTX51Tiny其次版增加了很多新特性,使得实时软件的开发更加简洁,如: 支持CodeBanking该选项必需在CONF_TNY.A51配置文件中允许,还要在L51_BANK.A51文件中定义CodeBanking硬件配置。干脆任务切换新增加的函数(os_swich_task)允许一个任务马上切换到另一个处于就绪态的任务。 任务就绪标记新的库函数isr_set_ready和os_set_ready允许用户给一个任务设置就绪标记。就绪标记可以用于将一个正在等待时间间隔、超时或信号(参见os_wait)的任务置为就绪态,该任务在下一个运行时机复原。 CPU空闲模式支持 支持用户在定时器中
4、断的代码现在可以在定时器滴答中断中加入自己的代码。该选项必需在C0NF_TNY.A51中被允许 支持时间间隔调整当在os_wait中混合运用时间间隔和信号时,可用os_reSejinterVal函数调整时间间隔超时值。此外,RTX51Tiny进行了完全重构,以增加敏捷性,加快执行速度,削减代码和数据空间需求。当满意以下条件时,RTX51Tiny其次版在代码大小上的缩小尤为显著。1、禁止任务的时间轮转2、尽量少的RTX51Tiny系统函数调用3、禁止栈检查禁止任务时间轮转同时也降低了数据空间的需求。二、已解决的问题以下是在1.06版中已知的问题,已在其次版中得到了修正.1、在RTX51TinyI
5、.06中当在os_wait期间产生一个中断时,is_send_signal数可能会破坏就绪状态,导致任务挂起,等待从中断发来的信号,该问题在RTXTiny2中已解决。2、在RTX51Tinyl.06中,由于信号产生时时间间隔定时器的值不能被调整,因而KVL和K_SIG事务不能在os_wait中合并为一个调用。在RTXTiny2中,供应的OsjeseJintervaI函数允许调整间隔定时器。3、在RTX51Tinyl.06,TlMESHARlNG不能被设为1,假如设为1,并且在时间片轮转前产生了中断,时间轮转周期可能被破坏,成为延迟256个滴答数,而不是1个。该问题在第2版中解决。4、在RTX5
6、1Tinyl.06中,当用户中断执行的时间比系统时钟滴答时间长时,RTX51Tiny系统时钟定时器就会递归调用,这导致SAVEPSW和SAVEACC的覆盖,引起系统崩溃。该问题在RTX51Tiny第2版中解决。假如在应用中包含一个执行时间大于RTX51Tiny系统时钟定时间隔的中断程序,可以将LONG_USRNTR设为1。假如应用程序在高优先级中断程序中消耗大量时间,很可能会用到这个选项。三、产品规约(产品规格说明)参数范围最大任务数16最大活动任务16代码空间需求900字节最大数据空间需求7:Tj栈空间需求3字节/任务外部RAM需求0-?,J定时器0系统时钟因子1000-65535中断等待2
7、0个周期或更少上下文切换时间100700个周期四、工具需求以下为运用RTX51Tiny须要的应用软件:C51编译器A51宏汇编器BL51连接器或LX51连接器RTX51TNY.LIB和RTX51BT.LIB库文件必需保存于库路径下,通常,该路径是“KEIL”C51”LlB文件夹。RTX51TNY.H必需保存在包含路径下,通常是“KElL“C51”INC文件夹。五、目标需求RT51Tiny运行于大多数8051兼容的器件及其变种上。RTX51Tiny应用程序可以访问外部数据存储器,但内核无此需求。RTX51Tiny支持KeilC51编译器全部的存储模式。存储模式的选择只影响应用程序对象的位置,RT
8、X51Tiny系统变量和应用程序栈空间总是位于8051的内部存储区(DATA或IDATA区),一般状况下,应用程序应运用小(SMALL)模式。RTX51Tiny执行协作式任务切换(每个任务调用一个操作系统例程)和时间片轮转任务切换(每个任务在操作系统切换到下一个任务前运行一个固定的时间段),不支持抢先式任务切换以及任务优先级。RTX51FUIl支持抢先式任务切换。1、中断RTX51Tiny及中断函数并行运作,中断服务程序可以通过发送信号(用isjsenCLSignaI函数)或设置任务的就序标记(用isjseJredy函数)及RTX51Tiny的任务进行通信。犹如在一个标准的,没有RTX51Ti
9、ny的应用中一样,中断例程必需在RTX51Tiny应用中实现并允许,RTX51Tinyim没有中断服务程序的管理。RTX51Tiny运用定时器0、定时器0中断,和寄存器组1。假如在程序中运用了定时器0,则RTX51Tiny将不能正常运转。你可以在RTX51Tiny定时器0的中断服务程序后追加自己的定时器。中断服务程序代码(参见硬件定时器)RTX51Tiny假设总中断总是允许(EA=I)。RTX51Tiny库例程在须要时变更中断系统(EA)的状态,以确保RTX51Tiny的内部结构不被中断破坏。当允许或禁止总中断时,RTX51Tiny只是简洁的变更EA的状态,不保存并重装EA,EA只是简洁的被置
10、位或清除。因此,假如你的程序在调用RTX51例程前某止了中断,RTX51可能会失去响应。在程序的临界区,可能须要在短时间内禁止中断。但是,在中断禁止后,不能调用任何RTX51Tiny的例程。假如程序的确须要禁止中断,应当持续很短的时间。2、再入函数C51编译器供应对再入函数的支持,再入函数在再入堆栈中存储参数和局部变量,从而爱护递归调用或并行调用。RTX51Tiny不支持对C51再入栈的任何管理。因此,假如在程序中运用再入函数,必需确保这此函数不调用任何RTX51Tiny系统函数,且不被循环任务切掉所打断。仅用寄存器传递参数和保存自动变量的C函数具有内在的再入性,可以无限制的调用RTX51Ti
11、nyo非可再入C函数不能被超过一个以上的任务或中断过程调用。非再入C51函数在静态存储区段保存参数和自动变量(局部数据),该区域在函数被多个任务同时调用或递归调用时可能会被修改。假如确定多个任务不会递归(或同时)调用,则多个任务可以调用非再入函数。通常,这意味着必需禁止循环任务调度,且该非再入函数不能调用任何RTX51Tiny系统函数。附注: 假如希望在多个任务或中断中调用再入或非再入函数,应当禁止循环任务调度。3、C库例程可再入C51库函数可在任何任务中无限制的运用。对于非再入的C51库函数,同样有非可再入C函数的限制。4、多数据指针KeilC51编译器允许运用多数据指针(存在于很多8051
12、的派生芯片中),RTX51Tiny不供应对它们的支持.因此,在RTX51Tiny的应用程序中应当心运用多数据指针。从本质上说,必需确保循环任务切换不会在执行变更数据指针选择器的代码时发生。附注: 假如要运用多数据指针,应当禁止循环任务切换。5、运算单元KeilC51编译器允许运用运算单元(存在于很多8051的派生芯片中)。RTX51Tiny不供应对它们的支持。因此,在RTX51Tiny的应用程序中须当心运用运算单元。从本质上说,必需确保循环任务切换不会在执行用运算单元的代码时发生。附注:假如希望运用运算单元,应禁止循环任务切换。6、寄存器组RTX51Tiny安排全部的任务到寄存器0,因此,全部
13、的函数必需用C51的默认设置进行编译,REGISTERBANK(0)。中断函数可以运用剩余的寄存储组。然而,RTX51Tiny须要寄存器组区域中的6个永久性的字节,用于这些字节的寄存器组在配置文件中指定。RTX51Tiny2.02中文手册part2其次章实时程序实时程序必需对实时发生的事务快速响应。事务很少的程序不用实时操作系统也很简洁实现。随着事务的增加,编程的困难程度和难度也随之增大,这正是RToS的用武之地。一、单任务程序嵌入式程序和标准C程序都是从main函数起先执行的,在嵌入式应用中,main通常是一个无限循环,可以认为是一个持续执行的单个任务,例如:voidmain(void)(W
14、hiIe(I)/*恒久重复*/(do_something();/*执行do_something任务”*/)在这个例子里,do_something函数可以认为是一个单任务,由于仅有一个任务在执行,所以没有必要进行多任务处理或运用多任务操作系统。二、多任务程序很多C程序通过在一个循环里调用服务函数(或任务)来实现伪多任务调度。如:voidmain(void)intcounter=0;while(l)/*始终重复执行*/check_serialjo();/*检查串行输入*/process_serial_cmds();/*处理串行输入*/check_kbd_io();/*检查键盘输入*/process
15、_kbd_cmds();/*处理键盘输入*/adjust|ctrlr_parms():/*调整限制器*/counter+;/*增加计数器*/)该例中,每个函数执行一个单独的操作或任务,函数(或任务)按次序依次执行。当任务越来越多,调度问题就被自然而然的提出来了。例如,假如ProCeSs_kbd_cmds函数执行时间较长,主循环就可能须要较长的时间才能返回来执行CheCk_seicd_io函数,导致串行数据可能被丢失。当然,可以在主循环中更常见的调用Check-SeriaIJo函数以订正这个问题,但最终这个方法还是会失效三、RTX51Tiny程序当运用RtX51Tiny时,为每个任务建立独立的任
16、务函数,例如:voidcheck_serial_io_task(void)_task_1/*该任务检测串行I/O*/)voidProCeSs_seriaLCrndS_task(VOid)_task_2*该任务处理串行吩咐*voidcheck_kbd_io_task(void)_task_3(*该任务检测键盘I/O*/Jvoidprocess_kbd_cmds_task(void)_task_4*处理键盘吩咐*/voidstartup-_task(void)_task_0os_create_task(l);os_create_task(2);os_create_task(3);os_create
17、_task(4);os_delete_task(0);*建立串行I/O任务*/*建立串行吩咐任务*/*建立键盘I/O任务*/*建立键盘吩咐任务*/*删除启动任务*/该例中,每个函数定义为一个RTX51Tiny任务。RTX51Tiny程序不须要main函数,取而代之,RTX51Tiny从任务。起先执行。在典型的应用中,任务。简洁的建立全部其他的任务。RTX51TinV2.02中文手册Part3第三章原理RTX51Tiny用于管理目标系统的资源,本章探讨RTX51Tiny如何运用这些资源。一、定时器滴答中断RTX51Tiny用标准8051的定时器0(模式1)生产一个周期性的中断。该中断就是RTX5
18、1Tiny的定时滴答(TimerTick)o库函数中的超时和时间间隔就是基于该定时滴答来测量的。默认状况下,RTX51每10000个机器周期产生一个滴答中断,因此,对于运行于12MHZ的标准8051来说,滴答的周期是0.01秒,也即频率是100HZ(12MHz1210000)o该值可以在CONF_TNY.A51配置文件中修改。附注:可以在RTX51的定时滴答中断里追加自己的代码。参见CoNF_TNY.A51配置文件。关于RTX51Tiny如何运用中断可以参考概述中中断一节的叙述。二、任务RTX51Tiny本质上是一个任务切换器,建立一个RTX51Tiny程序,就是建立一个或多个任务函数的应用程
19、序。下面的信息可以帮助你快速的理解RTX51o 任务用新的关键字由C语言定义,该关键字是KeiCC51所支持的。RTX51Tiny维护每个任务的正确状态(运行、就绪、等待、删除、超时)。 某个时刻只有一个任务处于运行态。 任务可能处于就绪态、等待态、删除态或超时态。空闲任务(IdIe_Task)总是处于就绪态,当定义的全部任务处于阻塞状态时,运行该任务。三、任务管理每个RTX51Tiny任务总是处于下述状态中的一种状态中。状态描述运行正在运行的任务处于运行态。某个时刻只能有一个任务处于该状态。os_running_task_id函数返回当前正在运行的任务编号。就绪打算运行的任务处于就绪态。一旦
20、运行的任务完成了处理,RTX51Tiny选择一个就绪的任务执行。一个任务可以通过用os_set_ready或os_set_ready函数设置就绪标记来使其马上就绪(即便该任务正在等待超时或信号)。等待正在等待一个事务的任务处于等待态。一旦事务发生,任务切换到就绪态。0s_wait函数用于将一个任务置为等待态。删除没有被启动或已被删除的任务处于删除态。Os-delete-task函数将一个已经启动(用os_create_task)的任务置为删除态。超时被超时循环中断的任务处于超时态,在循环任务程序中,该状态相当于就绪态。四、事务在实时操作系统中,事务可用于限制任务的执行,一个任务可能等待一个事务
21、,也可能向其他任务发送任务标记。os_wait函数可以使一个任务等待一个或多个事务。超时是一个任务可以等待的公共事务。超时就是一些时钟滴答数,当一个任务等待超时时,其他任务可以执行。一旦到达指定数量的滴答数,任务就可以接着执行。时间间隔(IrlterVal)是一个超时(TimeoUt)的变种。时间间隔及超时类似,不同的是时间间隔是相对于任务上次调用os.wait函数的指定数量的时钟滴答数。信号是任务间通信的方式。一个任务可以等待其他任务给它发信号(用。s_send_signal和isr_send_signal函数)。每个任务都有一个可被其它任务设置的就绪标记(用os_set_ready和isj
22、seJready函数)。一个个等待超时、时间间隔或信号的任务可以通过设置它的就绪标记来启动。isjseJready函数)。一个等待超时、时间间隔或信号的任务可以通过设置它的就绪标记来启动。K_IVL等待制定的时间隔 K_SIG等待一个信号K_TMO等待指定的超时下表是os_wait函数等待的事务:OS-Wait返回时,返回值表明发生了返回值意义RDY_EVENT任务的就绪标记被置位sig_event收到一个信号tmo_event超时完成或时间间隔到达。的事务:os_wait可以等待下面的事务组合:K_SIGIK_TMO:任务延迟直到有信号发给它或者指定数量的时钟滴答到达。K_SIGIKVL:任
23、务延迟直到有信号到来或者指定的时间间隔到达。附注:K_IVL和K_TMO事务不能组合五、任务调度程序:任务调度程序给任务安排处理器,RTX51Tiny调度程序用下列规则确定哪个任务要被运行:当前任务被中断假如:1、任务调用了os_switch_task且另一个任务正打算运行。2、任务调用了os_wait且指定的事务没有发生。3、任务执行了比轮转时间片更长的时间。另一个任务启动假如:1、无其它任务运行。2、要启动的任务处于就绪态或超时态。六、循环任务切换RTX51Tiny可以配置为用循环法进行多任务处理(任务切换).循环法允许并行的执行若干任务。任务并非真的同时执行,而是分时间片执行的(CPU时
24、间分成时间片,RTX51Tiny给每个任务安排一个时间片)。由于时间片很短(几毫秒),看起来好象任务在同时执行。任务在它的时间片内持续执行(除非任务的时间片用完)。然后,RTX51Ting切换到下一个就绪的任务运运行。时间片的持续时间可以通过RTX51Ting配置定义。下面是一个RTX51Tiny程序的例子,用循环法多任务处理,程序中的两个任务一个任务jobl,在job。执行完它的时间片后,RT51Tiny切换到jobl。在jobl执行完它的时间片后,RTX51Ting又切换到job。,该过程无限重复。#includeintcounterO;intcounterl;voidjobO(void)
25、_task_0(os_create(l);*标记任务1为就绪*/while(l)(/*无限循环*/counterO+;/*更新记数器*/voidjobl(void)_task_l(while(l)/*无限循环*/counter+;/*更新记数器*/)附注:可以用os_wait或os_switch_task让RTX51Tiny切换到另一个任务而不是等待任务的时间片用完。os_wait函数挂起当前的任务(使之变为等待态)直到指定的事务发生(接着任务变为就绪态)。在此期间,随意数量的其他任务可以运行。七、协作任务切换假如禁止了循环任务处理,就必需让任务以协作的方式运作,在每个任务里调用os_wait
26、或os_switch_task,以通知RTX51Tingy切换到另一个任务。os_wdit及os_switch_task的不同是,os_wait是让任务等待一个事务,而os_switch_task是马上切换到另一个就绪的任务。八、空闲任务没有任务打算运行时,RTX51Ting执行一个空闲任务。空闲任务就是一个无限循环。如:SJMP$有些8051兼容的芯片供应一种降低功耗的空闲模式,该模式停止程序的执行,直到有中断产生。在该模式下,全部的外设包括中断系统仍在运行。RTX51Tiny允许在空闲任务中启动空闲模式(在没有任务打算执行时)。当RTX51Tiny的定时滴答中断(或其它中断)产生时,微限制
27、器复原程序的执行。空闲任务执行的代码在CONF_TNY.A51配置文件中允许和配置。九、栈管理RTX51Tiny为每个任务在8051的内部RAM区(IDATA)维护一个栈。任务运行时,将得到可能得到的最大数量的栈空间。任务切换时,从前的任务栈被压缩并重置,当前任务的栈被扩展和重置。下图表明一个三任务应用的内部存储器的布局。图略:-)?STACK表示栈的起始地址。该例中,位于栈下方的对象包括全局变量、寄存器和位寻址存储器,剩余的存储器用于任务栈。存储器的顶部可在配置中指定。RTX51TinV2.02中中手册Dart4第四章RTX51TiiIy配置一、配置建立了嵌入式应用后,RTX5ITiny必须
28、要配置。全部的配置设置都在CoNFJrNY.A51文件中,该文件位于KEILCS1RTXTINY2书目下。在CoNFNY.A51中的配置选项允许: 指定滴答中断寄存器组。 指定滴答间隔(以8051机器周期为单位)。 指定在滴答中断中执行的代理。 指定循环超时。 允许或禁止循环任务切换。 指定应用程序占用长时间的中断。 指定是否运用codebankingo 定义RTX51Tiny的栈项。 指定最小的栈空间需求。 指定栈错误发生时要执行的代码。 定义栈错误发生时要执行的代码。 定义空闲任务操作。CoNFJNY.A51的默认配置包含在RTX51Tiny库中。但是,为了保证配置的有效和正确,须得将C0
29、NF,TNY.A51文件拷贝到工程书目下并将其加入列工程中。通过变更CONFNY.A51中的设置来定制RTX51Tiny的配置。附注:假如在工程中没有包含配置文件(CONFJNY.A51),库中的默认配置将自动加载,后续的变更将存储在库中,这样可能会对以后的应用起到不良影响。1、硬件定时器下面的常数指定RTX51Tiny的硬件定时器如何配置。 INT.REGBANK指定用于定时器中断的寄存器组,默认为1(寄存器组1). INT_CLOCK指定定时器产生中断前的指令周期数。该值用于计算定时器的重装值(65536NT_CLOCK)。默认该值为10000。 HWjnMER_CODE是一个宏,它指出在
30、RTX51Tiny定时器中断结尾处要执行的代码。该宏默认是中断返回,如:HW_TIMER_CODEMACRORETIENDM2、循环默认状况下,循环任务切换是使能的。下面的常数允许你配置循环任务切换的时间或完全禁止循环切换。 TIMESHARING指定每个任务在循环任务切换前运行的滴答数。设为O时禁止循环任务切换。默认值为5个滴答数。3、长中断一般状况下,中断服务程序设计为快速执行的程序,在某些状况下,中断服务程序可能执行较长的时间。假如一个高优先级的中断服务程序执行的时间比RTX51Tiny滴答的时间间隔长,RTX51Tiny定时器中断可能被中断并可能重入(被后继的RTX51定时器中断)。假
31、如要运用执行时间较长的高优先级中断,应当考虑削减ISR中执行的作 业的数量,变更RTX51定时器的滴答率使其低一些,或者运用下面的配置选项。 1.ONG_USRSR指示器是否有执行时间长于滴答时间间隔的中断(滴答中断除外)。当该选项设为LRTX51Tiny就会包括爱护再入滴答中断的代码。该值默认为0,即认为中断是快速的。4、CodeBanking以下配置选项允许你指定RTX51Tiny应用是否运用COdebanking。CODE.BANKING指定是否运用codebanking0运用codebanking时该选项必需设为1,未运用codebanking0b该选项须设为0,默认的值为0。 附注
32、1.51_BANK.A512.12及其以上的须要RTX51Tiny程序运用Codebanking05、栈一些选项用于栈配置。下面的常数定义用于核区域的内部RAM的大小和栈的最小自由空间。一个宏允许指定当没有足够的自由栈时执行的代码。 RAMTOP指定片上栈顶部的地址。除全部位于栈之上的IDATA变量,否则不应修改该值。该值默认为OXFF。 FREE_STACK指定栈允许的最小字节数。切换任务时,假如RTX5ITiny检测到低于该值时,STACK_ERROR宏招被执行。设为0禁止栈检查,默认设置是20字节。 STACK.ERROR是一个指定发生栈错误(少于FREE.STACK字节数)时要执行的指
33、令的宏。该宏默认是禁止中断并进入无限循环:STACK_ERRORMACROCLREASJMP$ENDM6、空闲任务一个循环,不做任何事一一只是等待滴答中断切换到一个就绪的任务。下列常数允许配置空闲任务。 CPUJDLE宏指定空闲任务中执行的代码。默认的指令是置位PCON寄存器的空闲模式位(大多数8051设备适用)。这将停止执行程序,降低功耗,直到有中断产生:CPUJDLEmacroORLPCON,#1ENDM CPUJDLEMACRO指定在空闲任务中是否执行CPUJDLE宏。默认为0,CPUDLE宏不包括在空闲任务中。二、库文件RTX5ITiny包括两个库文件; RTX5ITNY.LIB用于无
34、代码分组(non_banking)的RTX5ITiny程序。 RTX51BT.LIB用于代码分组(Code_banking)的RTX51Tiny程序。在”KElLC51RTXTINYZSOURCECODE”下的RTXTINZ.PRJ工程用来建立这两个库。附注: 应用时并不须要显式的包含一个RTX51Tiny库。当运用Vision集成环境或吩咐行连接器时会自动执行。 建立RTX51Tiny库时,默认配置文件(Ce)NFJNY.A51)包括在库中。假如在工程中未显示包含配置文件(CoNFjrNY.A51),将从库中包含一个默认的,后续对配置文件的修改将存储到库中,这可能对你的应用产生负面影响。三、
35、优化下面的事情是为了优化RTX51Tiny程序应当做的。 假如可能,禁止循环任务切换。循环切换须要13个字节的栈空间存储任务环境和全部的寄存器。当任务切换通过调用RTX51Tiny库函数(像os_wail或os_swiichask)触发时,不须要这些空间。 用os.wait替代依靠循环超时切换任务。这将是提高系统反应时间和任务响应时间。 避开将滴答中断率设置的太快。为了最小化存储器需求,从。起先对任务编号。RTX51Tiny2.02中文手册part5第五章运用RTX51Tiny一般地,下面三步是运用RTX51Tiny要实现的 编写RTX51程序 编译并连接程序 测试和调试程序一、编写程序写RT
36、X51Tiny程序时,必需用关键字对任务进行定义,并运用在RTX51TNY.H中声明的RTX51Tiny核心例程。1、包含文件RTX51Tiny仅须要包含一个文件:RTX51TNY.H0全部的库函数和常数都在该头文件中定义。你可以在你的源文件中包含它:include2、编程原则以下是建立RTX51Tiny程序时必需遵守的原则:、确保包含了RTX51TNY.H头文件。、不要建立main函数,RTX51Tiny有自己的mian函数。、程序必需至少包含一个任务函数。、中断必需有效(EA=I),在临界区假如要禁止中断时肯定要当心。参见概述中的中断一-、程序必需至少调用一个RTX51Tiny库函数(象o
37、s_wait)。否则,连接起将不包含RTX51Tiny库。、TaSkO是程序中首先要执行的函数,必需在任务O中调用os_create_task函数以运行其余任务。、任务函数必需是从不退出或返回的。任务必需用一个WhiIe(I)或类似的结构重复。用OS_delete_task函数停止运行的任务。、必需在Uvison中指定RTX51Tiny,或者在连接器吩咐行中指定。更多技术文档参见keil软件学问库。3、定义任务实时或多任务应用是由一个或多个执行具体操作的任务组成的,RTX51Tiny支持最多16个任务。任务就是一个简洁的C函数,返回类型为VOid,参数列表为VOid,并且用_task_声明函数
38、属性。例如:voidfunc(void)_task_task_id这里,func是任务函数的名字,task_id是从。到15的一个任务ID号。下面的例子定义函数job。编号为O的任务。该任务使一个计数器递增并不断重复。voidjobO(void)_task_0while(l)CounterO+;附注: 全部的任务都应当是无限循环,任务肯定不能返回。 任务不能返回一个函数值,它们的返回类型必需是Void。 不能对一个任务传递参数,任务的形参必需是VoicL 每个任务必需给予一个唯一的,不重复的ID。 为了最小化RTX51Tiny的存储器需求,从0起先对任务进行依次编号。二、编译和连接有两种方法编
39、译和连接RTX51Tiny应用程序。 用Uvison集成开发环境 用吩咐行工具1、吩咐行工具RTX51Tiny已经完全集成到了C51编译语言中,这使得生成RTX51Tiny应用特别简洁。建立RTX51Tiny程序只需编写C函数,无需运用汇编。从吩咐行编译RTX51Tiny程序按常规方式调用编译器,无需特殊的编译指示。例如:C5irtxprog.cdebugObjectextend产生的RTXPROG.OBJ文件中包含C代码和定义的RTX51Tiny任务。从吩咐行连接RTX51Tiny程序: 在连接器吩咐行内指定RTX51TNY指示 在目标文件列表中包含RTX_CONF.OBJ文件(假如变更了配
40、置)例如:BL51RTPROG.OBJ,RTX_CONF.OBJRTX51TNYRTX51TNY指示吩咐连接器连接RTPROG.OBJ和TX_CONF.OBJ并且包含RTX51Tiny库。这样就建立了RTX51Tiny程序。附注: 不要在RTX51Tiny程序中建立mian函数,只建立任务函数就可以。main函数包含在RTX51Tiny库中,它启动操作系统和任务0。假如在程序中包含了main函数,将产生一个连接错误指示有多个main被定义。 程序中至少建立一个任务函数。 必需至少调用一个RTX51Tiny函数(象os_wait或os_create_task),这样,连接器才会包含RTX51Ti
41、ny库。2、UViSOn集成开发环境用UVison建立RTX51Tiny程序。1)打开目标对话框选项(从PrOjeCt菜单选择C)PtiOnSforTarget).,2)选择目标标签。3)从操作系统选项列表选择RTX51Tiny。三、调试UViSon模拟器允许运行和测试RTX51Tiny应用程序。RTX51Tiny程序的载入和无RTX51Tiny程序的载入是一样的。无需指定特殊的吩咐和选项。一个核心的对话框显示RTX51Tiny核心和程序中任务的全部特征。从PeriPheraIS菜单选择RTX51TinyTaSkliSt显示该对话框。该对话框中: TID是在任务定义中指定的任务ID。 TaSk
42、Name是任务函数的名字。 State是任务当前的状态。 WaitforEVent指出任务正在等待什么事务。 Sig显示任务信号标记的状态(1为置位)。 Time指示任务距超时的滴答数,这是一个自由运行的定时器,仅在任务等待超时和时间间隔时运用。 Stack指示任务栈的起始地址。RTX51Tiny2.02中文手册pa116第六章函数参考以下部分描述RTX51Tiny的系统函数。函数依字母依次排列,分为以下部分:概要(SUmmary)简述程序作用,列出包含的文件,包括它的声明和原型,语法举例,和参数描述。描述(DeSCriPtiOn)程序的具体描述,如何运用。返回值程序返回值说明。参阅(Seea
43、lso)相关程序。例子如何正确运用该函数的程序例子中断。附注: 以os_开头的函数可以由任务调用,但不能由中断服务程序调用。 以isr_开头的函数可以由中断服务程序调用,但不能由任务调用。1、irs_send_signal概要:includecharisr_send_signal(unsignedchartaskjd);/*信号发往的任务*/描述:isJsenLsignaI函数给任务taskjd发送一个信号。假如指定的任务正在等待一个信号,则该函数使该任务就绪,但不启动它,信号存储在任务的信号标记中。附注: 该函数是RTX51Tiny实时操作系统的一部分,仅包含于PK51中。 该函数仅被中断函
44、数调用。返回值胜利调用后返回0,假如指定任务不存在,则返回-1。参阅os_clear_signal,os_send_signal,os_wait例子#includevoidtst_isr_send_signal(void)interrupt2isr_send_signal(8);*给任务8发信号*/2、irs_set_ready概要#includecharisr_set_readyunsignedchartask_id;/*使就绪的任务*/描述将由task.id指定的任务置为就绪态。附注 该函数是RTX51Tiny的一部分,包含在PK51中。 该函数仅用于中断函数。返回值无例子includev
45、oidtst_isr_set_ready(void)interrupt2isr_set_ready(l);/*置位任务1的就绪标记*/)3、os_clear_signal概要#includecharos_clesr_signal(unsignedcahrtask_id);/*清除信号的任务*/描述清除由task_id指定的任务信号标记。附注:该函数是RT51Tiny的一部分,包含在PK51中。返回值信号胜利清除后返回0,指定的任务不存在时返回-1。参阅isr_send_signal,os_send_signal,os_wait例子#includevoidtst_os_clsar_siganl(void)_task_8os_clear_signal(5);*清除任务5的信号标记*/4、os_create_task概要#includecharos_create_task(unsignedchartask_id);/*要启动的任务ID*/描述启动任务task_id,该任务被标记为就绪,并在下一个时间点起先执行。附注:该函数是包含在PK51中的RTX51Tiny的组成部分。返回值任务胜利启动后返回0,假如任务不能启动或任务己在运行,或没有以ta
链接地址:https://www.desk33.com/p-480217.html