实时操作系统RTX51 Tiny

px99 发表于 2005-8-31 19:04:00
实时操作系统RTX51 Tiny是RTX51的简板,它不支持优先级和CAN总线的相关定义函数。 RTX51 使用一个8051硬件计时器中断作为定时程序,产生的周期性中断用于驱动 RTX51时钟
    该系统是通过给各个任务一定的时间片进行轮回完成调度的。 系统给要执行的 N 个任务按 Os_create_task(task_id) 创建的先后顺序排成一个队列,系统首先执行任务 0 ,然后按队列中的任务一个一个的执行。
1、我们可以通过修改其配置文档 CONF_TNY.A51 keil/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
;
;------------------------------------------------------------------------------
2 RTX51 事件:
(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 、任务之间的通信:
1 char 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 的报时信号数目
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值