第四章RTX51 Tiny配置<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
RTX51 Tiny可根据应用的不同定制。
一、配置
建立了嵌入式应用后,RTX51 Tiny必须要配置。所有的配置设置都在CONF_TNY.A51文件中,该文件位于\KEIL\CS1\RTXTINY2\目录下。在CONF_TNY.A51中的配置选项允许:
l 指定滴答中断寄存器组。
l 指定滴答间隔(以8051机器周期为单位)。
l 指定在滴答中断中执行的代理。
l 指定循环超时。
l 允许或禁止循环任务切换。
l 指定应用程序占用长时间的中断。
l 指定是否使用code banking。
l 定义RTX51 Tiny的栈项。
l 指定最小的栈空间需求。
l 指定栈错误发生时要执行的代码。
l 定义栈错误发生时要执行的代码。
l 定义空闲任务操作。
CONF_TNY.A51的默认配置包含在RTX51 Tiny库中。但是,为了保证配置的有效和正确,须得将CONF_TNY.A51文件拷贝到工程目录下并将其加入列工程中。
通过改变CONF_TNY.A51中的设置来定制RTX51 Tiny的配置。
附注:
l 如果在工程中没有包含配置文件(CONF_TNY.A51),库中的默认配置
将自动加载,后续的改变将存储在库中,这样可能会对以后的应用起到不良影响。
1、硬件定时器
下面的常数指定RTX51 Tiny的硬件定时器如何配置。
l INT_REGBANK指定用于定时器中断的寄存器组,默认为1(寄存
器组1)。
l INT_CLOCK指定定时器产生中断前的指令周期数。该值用于计算定时器的重装值(65536_INT_CLOCK)。默认该值为10000。
l HW_TIMER_CODE是一个宏,它指出在RTX51 Tiny定时器中断结尾处要执行的代码。该宏默认是中断返回,如:
HW_TIMER_CODE MACRO
RETI
ENDM
2、循环
默认情况下,循环任务切换是使能的。下面的常数允许你配置循环任
务切换的时间或完全禁止循环切换。
l TIMESHARING指定每个任务在循环任务切换前运行的滴答数。设为0时禁止循环任务切换。默认值为5个滴答数。
3、长中断
一般情况下,中断服务程序设计为快速执行的程序,在某些情况下,中断
服务程序可能执行较长的时间。如果一个高优先级的中断服务程序执行的时间比RTX51 Tiny滴答的时间间隔长,RTX51 Tiny定时器中断可能被中断并可能重入(被后继的RTX51 定时器中断)。
如果要使用执行时间较长的高优先级中断,应该考虑减少ISR中执行的作
业的数量,改变RTX51 定时器的滴答率使其低一些,或者使用下面的配置选项。
l LONG_USR_ISR指示器是否有执行时间长于滴答时间间隔的中断(滴答中断除外)。当该选项设为1,RTX51 Tiny就会包括保护再入滴答中断的代码。该值默认为0,即认为中断是快速的。
4、Code Banking
以下配置选项允许你指定RTX51 Tiny应用是否使用code banking。
CODE_BANKING指定是否使用code banking。使用code banking时该选项必须设为1,未使用code banking时,该选项须设为0,默认的值为0。
附注
l L51_BANK.A51 2.12及其以上的需要RTX51 Tiny程序使用code banking。
5、栈
一些选项用于栈配置。下面的常数定义用于栈区域的内部RAM的大小和
栈的最小自由空间。一个宏允许指定当没有足够的自由栈时执行的代码。
l RAM TOP指定片上栈顶部的地址。除所有位于栈之上的IDATA变量,否则不应修改该值。该值默认为OXFF。
l FREE_STACK指定栈允许的最小字节数。切换任务时,如果RTX51 Tiny检测到低于该值时,STACK_ERROR宏将被执行。设为0禁止栈检查,默认设置是20字节。
l STACK_ERROR是一个指定发生栈错误(少于FREE_STACK字节数)时要执行的指令的宏。该宏默认是禁止中断并进入无限循环:
STACK_ERROR MACRO
CLR EA
SJMP$
ENDM
6、空闲任务
当没有任务准备运行时,RTX51 Tiny执行一个空闲任务。空闲任务只是
一个循环,不做任何事——只是等待滴答中断切换到一个就绪的任务。下列常数允许配置空闲任务。
l CPU_IDLE宏指定空闲任务中执行的代码。默认的指令是置位PCON寄存器的空闲模式位(大多数8051设备适用)。这将停止执行程序,降低功耗,直到有中断产生:
CPU_IDLE MACRO
ORL PCON,﹟1
ENDM
l CPU_IDLE MACRO指定在空闲任务中是否执行CPU_IDLE宏。
默认为0,CPU_IDLE宏不包括在空闲任务中。
二、库文件
RTX51 Tiny包括两个库文件:
l RTX51TNY.LIB用于无代码分组(non_banking)的RTX51 Tiny程序。
l RTX51BT.LIB用于代码分组(code_ banking)的RTX51 Tiny程序。
在\KEIL\C51\RTXTINYZ\SOURCECODE\下的RTXTINZ.PRJ工程用来建立这两个库。
附注:
l 应用时并不需要显式的包含一个RTX51 Tiny库。当使用μVision集成环境或命令行连接器时会自动执行。
l 建立RTX51 Tiny库时,默认配置文件(CONF_TNY.A51)包括在库中。如果在工程中未显示包含配置文件(CONF_TNY.A51),将从库中包含一个默认的,后续对配置文件的修改将存储到库中,这可能对你的应用产生负面影响。
三、优化
下面的事情是为了优化RTX51 Tiny程序应该做的。
l 如果可能,禁止循环任务切换。循环切换需要13个字节的栈空间存储任务环境和所有的寄存器。当任务切换通过调用RTX51 Tiny库函数(像os_wait或os_switch_task)触发时,不需要这些空间。
l 用os_wait替代依靠循环超时切换任务。这将是提高系统反应时间和任务响应时间。
l 避免将滴答中断率设置的太快。
为了最小化存储器需求,从0开始对任务编号。
文章评论(0条评论)
登录后参与讨论