关闭

实时操作系统RTX51 Tiny

3139人阅读 评论(0) 收藏 举报
px99 发表于 2005-8-31 19:04:00
实时操作系统RTX51 Tiny是RTX51的简板,它不支持优先级和CAN总线的相关定义函数。RTX51使用一个8051硬件计时器中断作为定时程序,产生的周期性中断用于驱动 RTX51时钟
    该系统是通过给各个任务一定的时间片进行轮回完成调度的。系统给要执行的N个任务按Os_create_task(task_id)创建的先后顺序排成一个队列,系统首先执行任务0,然后按队列中的任务一个一个的执行。
1、我们可以通过修改其配置文档CONF_TNY.A51keil/c51/ RTX_TINY来修改系统的相关配置;经常修改的部分如下:
;             ; define the register bank used for the timer interrupt.
INT_REGBANK     EQU       1     ; default is Registerbank 1
;
;             ; define Hardware-Timer Overflow in 8051 machine cycles.
INT_CLOCK EQU       10000     ; default is 10000 cycles
;
;             ; define Round-Robin Timeout in Hardware-Timer Ticks.
TIMESHARING     EQU       5     ; default is 5 ticks.
;             ;
;             ; note: Round-Robin can be disabled by using value 0.
;
; Note:   Round-Robin Task Switching can be disabled by using '0' as
;          value for the TIMESHARING equate.
;------------------------------------------------------------------------------
;
; 'RTX-51 tiny' Stack Space
; =========================
;
; The following EQU statements defines the size of the internal RAM used
; for stack area and the minimum free space on the stack. A macro defines
; the code executed when the stack space is exhausted.
;
;             ; define the highest RAM address used for CPU stack
RAMTOP              EQU       0FFH      ; default is address (256-1)
;
FREE_STACK       EQU       20    ; default is 20 bytes free space on stack
;
STACK_ERROR    MACRO
              CLR EA   ; disable interrupts
              SJMP      $     ; endless loop if stack space is exhausted
              ENDM
;
;------------------------------------------------------------------------------
2RTX51事件:
(1)       使用RTX51的时间溢出事件:
使用 os_wait函数等待的最简单的事件是事件溢出 RTX51时钟报时信号周期,这类事件可被
用于任务中需要延迟一段时间的地方,这可用于查询一个开关状态的代码中。 在这样的条件下,
只须每隔 50ms左右查询一次开关。使用 os_wait函数等待RTX51时钟报时信号周期的任务停止,下一个处于READY状态的任务开始执行。
(2)       使用RTX51的信号事件
你可以使用 os_wait功能暂停一个任务并等待从另一个任务发出的信号或旗标。这可以用于
协调两个或更多的任务。如果一任务在等待一个信号并且信号标志是 0,在这个信号被发送之前这个任务将一直处于挂起状态,下一个处于READY状态的任务需要等到上一个任务时间片完成以后才开始执行;如果信号标志已经是 1,当任务查询信号时,信号标志会被清除并且继续执行任务。Os_send_signal(task_id)发送信号后,需等到下次执行因等待信号而终止的任务查询信号时,该任务才开始继续向下执行,在此期间如果该信号被清除,因等待而挂起的任务则无法执行os_wait后面的指令。
3、下面,我们看RTX51 Tiny提供的系统函数;

系统函数名称
功能说明
运行时间(时钟周期)
Os_create_task(task_id)
将一任务加入到执行队列
302
Os_delete_task(task_id);
将一任务从执行队列删除
172
Os_send_signal(task_id);
给一任务发送信号
408/316/71
Os_clear_signal(task_id);
删除一个发送的信号
57
Isr_send_signal(task_id)
在中断中给一任务发送信号
46
Os_wait()
等待
68/160
Os_wait1()
等待
 
Os_wait2()
等待
 

4、任务之间的通信:
1char os_wait (
unsigned char event_sel, /* events to wait for */
unsigned char tick s, /* timer ticks to wait等待信号的数目*/
unsigned int dummy); /* unused argument */
参数event_sel可以是下面一个或几个间的逻辑或:
K_IVL:等待一个时钟报时间隔
K_SIG:等待一个信号
K_TMO:等待一个超时(time-out)
(2)char os_wait1 (
unsigned char event_sel); /* events to wait for */
它是os_wait一个子集,只等待一个信号。
(3)char os_wait2 (
unsigned char event_sel, /* events to wait for */
unsigned char tick s); /* timer ticks to wait */
参数event_sel同os_wait
参数 ticks规定等待一个间隔事件k_ivl 或一个超时事件k_tmo 的报时信号数目
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:174293次
    • 积分:2200
    • 等级:
    • 排名:第17194名
    • 原创:30篇
    • 转载:80篇
    • 译文:0篇
    • 评论:13条
    最新评论
    友情链接<欢迎互换链接>