RTX 51 FULL源码学习(2.3)

1、缓冲池

RTXPOOL.A51
实现创建缓冲池 _os_create_pool、申请缓冲区 _os_get_block、释放缓冲区内存 _os_free_block

_os_create_pool:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               RTX_ALLOW_DRV_INT
               ;  Check the block-size
               MOV   A, R7
               ORL   A, R6
               JNZ   INPUT_OK1
               MOV   R7, #NOT_OK
               JMP   END_POOL
_os_get_block:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               RTX_ALLOW_DRV_INT
               ;  Check the block-size
               MOV   A, R7
               ORL   A, R6
               JNZ   INPUT_OK2
               MOV   R6, #00H
               MOV   R7, #00H
               JMP   END_POOL
_os_free_block:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               RTX_ALLOW_DRV_INT
               ;  Check the block-size
               MOV   A, R7
               ORL   A, R6
               JNZ   INPUT_OK3
               MOV   R7, #NOT_OK
               JMP   END_POOL

2、队列

RTXQUOP.A51
各种信号的入队、离队操作

  • 信号

  • ?RTX_SIG_ENQUEUE

  • ?RTX_SIG_DEQUEUE

  • 消息

  • ?RTX_MSG_ENQUEUE

  • ?RTX_MSG_DEQUEUE

  • 非完全等待任务

  • ?RTX_NFL_ENQUEUE

  • ?RTX_NFL_DEQUEUE

  • 令牌

  • ?RTX_SEM_ENQUEUE

  • ?RTX_SEM_DEQUEUE

  • 超时

  • ?RTX_TMO_ENQUEUE

  • ?RTX_TMO_DEQUEUE

  • 周期等待

  • ?RTX_IVL_ENQUEUE

  • 任务等待位设置

  • ?RTX_INT_ENQUEUE

  • 复位等待位标志

  • ?RTX_INTSIG_DEQUEUE

3、获取当前运行任务id

RTXRUNID.A51

os_running_task_id:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE            ; Supervisor_mode := on
               MOV   A, ?RTX_RUNNING_TID
               ANL   A, #1FH                         ; A = internal task_num
               MOV   DPH, #HIGH(?RTX_INTERNAL_NUM_TABLE)
               ADD   A, #LOW(?RTX_INTERNAL_NUM_TABLE)
               MOV   DPL, A
               MOVX  A, @DPTR                        ; Get the ext. task-num
               MOV   R7, A
               CLR   ?RTX_SUPERVISOR_MODE            ; supervisor_mode := OFF
               DBG_SYS_EXIT
               RTX_ALLOW_INT
               RET

4、消息、信号发送及系统令牌调用

RTXSEND.A51

  1. 发送消息
_os_send_message:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               ; Copy the C-51 parameters to the used registers
               ; (this Version uses the original V3.20 Register-Layout
               ; in this function)
               MOVR  R2, R3                     ; timeout
               MOVR  R6, R5                     ; LOW(message)
               MOVR  R5, R4                     ; HIGH(message)
               MOVR  R4, R7                     ; mailbox no
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               RTX_ALLOW_DRV_INT
  1. 发送信号
_os_send_signal:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               ; Check task-number
               MOV   A, R7
               SETB  C
               SUBB  A, #?RTX_MAXTASKN
               JC    EVAL_INTERNAL_NUM
               ; Number is greater than the maximum used task-number
               MOV   R7, #NOT_OK
               JMP   END_SEND
  1. 令牌调用
_os_send_token:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               ; Check semaphore-number
               MOV   A, R7
               JNB   ACC.3, SEM_NOTOK
               ANL   A, #0F0H 
               JZ    SEM_OK

5、系统延时

RTXWAIT.A51
对系统延时函数_os_wait的实现

_os_wait:
_os_wait2:
               DBG_SYS_ENTRY
               RTX_EXCLUDE_INT
               SETB  ?RTX_SUPERVISOR_MODE       ; Supervisor_mode := on
               MOV   A, R5
               MOV   R4, A                      ; store timeout to R4
              RTX_ALLOW_DRV_INT
              ; Set up pointer to task_state
               MOV   A, ?RTX_RUNNING_TID
               ANL   A, #1FH
               RL    A
               RL    A
               ADD   A, #LOW(?RTX_STATE_TABLE)
               MOV   DPL, A
               MOV   DPH, #HIGH (?RTX_STATE_TABLE) ; DPTR-->task_state[task_no]
               ; Ensure R4 = 0FFH, if R4=0 and event bit "d"=0
               MOV   A, R7
               JB    ACC.7, TMO
               CJNE  R4, #0, TMO
               MOV   R4, #0FFH                  ; R4=0 --> R4=0FFH

6、版权

RIGHT.A51

        name    COPYRIGHT_METTLER_FUCHS_AG_1991_2001
  END

7、系统参数配置

RTXCONF.A51
用户对系统参数的设置,例如,时间片长度、系统滴答时钟的选择、芯片器件的选择等等,具体配置在RTXSETUP.INC进行设置,再导入到此处进行配置,所以用户实际配置文件是RTXSETUP.INC

8、总结

到这里,RTX 51 FULL所有源码就全浏览了一边,对RTX 51 也就有一定的初步了解!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sxhheh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值