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 也就有一定的初步了解!

展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 数字20 设计师: CSDN官方博客
应支付0元
点击重新获取
扫码支付

支付成功即可阅读