EDABOSS电子论坛

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1049|回复: 0

[转帖] RTX51-Tiny的学习

[复制链接]

24

主题

0

回帖

120

E币

技术员

Rank: 2

积分
48
发表于 2017-4-1 15:41:39 | 显示全部楼层 |阅读模式
统中的RTOS。目前看到较多的是Keil 提供的 RTX51 Tiny(免费版),另外的有周立功公司的 Small RTOS51,对于更大的系统,就只有考虑uCOS了。从STC15F204EA的硬件配置来看,目前只适合使用RTX51 Tiny了。

在学习过程中,有下面的疑问需要逐一验证:

在标准的时间片轮换模式下,疑问:
    1. os_create_task(nTask_Id) 可以在任何时间调用?
    2. os_create_task() 和 os_set_ready() 的区别?如何只创建一个任务而不启动?当一个任务处于ready时,在下一个时间片就会启动工作?
    3. 可以通过 os_set_ready(nTask_Id) 和 os_send_signal(nTask_id) 启动一个任务?
    4. os_delete_task(nTask_id)的任务是否可以再次激活?
    5. 任务数量的多少是否会影响到程序的执行速度?如果系统中一开始有12个任务在运行,后面删除到只剩下4个,这时候
       任务的运行速度是否提高了4倍?
    6. 在问题5的情况下,如何保证基本驱动程序能够按照稳定的时间间隔运行?
        A: 在系统初始化完成后,不要增加,删除或挂起任务,这样就可以保证时间片轮换的频率稳定。(这个做法是否正确???)   
    7. 如何测试系统当前的负载量和运行速度?
    8. 在系统中还有其他需要用到定时的中断时,如何平衡时间的分配?如系统中有串行口通讯,或者更高精度的定时器(定时精度高于SysTick)?
    9. 对于在单个任务中使用多重循环进行延时,如何保证延时时间的准确性?(函数的重入问题)假设系统中的每个时间片为50ms,同时有10个任务
       在运行,如何保证其中的任务1能够连续不断的输出频率为1KHz的方波(端口的翻转频率为2KHz)?同时任务2连续输出频率200Hz的方波?按照正常
       理解,系统中有10个并行任务,则每个任务的工作周期是 SysTickPeriod * nTaskCount = 50ms*10 = 500ms,其中任务1只有其中的50ms内能够
       对某个GPIO进行控制,使其做2KHz的翻转(使用循环延时即可)。但是在其它任务激活的时候,该如何进行?
    10.对于来自外部的中断,如触发信号输入(串口中断发生),此时处理串口工作的任务处于休眠期,是否可以通过串口中断立即激活该任务?
       例如使用 os_switch_task()。但是如何能够避开其它任务,而直接执行串口工作处理的任务呢? 是否需要启动优先级的任务?   


另外,通过实际测试,对SysTick的配置做了确认。 这个可以在 conf_tny.A51中做配置。说明如下:
1. INT_CLOCK EQU      24000         ; 系统时钟设置为 24.000MHz时,每个 SysTick 周期是1ms。   
2. TIMESHARING EQU     1             ; 每个任务的时间片的长度,用SysTick的个数表示。
在以上配置下,每个任务的时间片长度为:FOSC/INT_CLOCK*TIMESHARING =  24.000M/24000*1 = 1ms。
另外,为了发挥 STC15系列1T单片机的优势,在HW_TIMER的初始化阶段,设置辅助寄存器 AUXR,使Timer0工作于1T定时器模式。否则默认的工作在 12T传统的8051定时器模式。

具体修改的程序段如下:
HW_TIMER: HW_TIMER_CODE
TIMERINT:
IF (LONG_USR_INTR)
  PUSH ACC
  MOV A,PSW
  ANL A,#018H
  XRL A,#?RTX_REGISTERBANK
  JNZ CONT_TIMINT
; avoid recursive timer interrupt
  POP ACC
  RETI  ; Return from Recursive Timer Interrupt
CONT_TIMINT:    POP ACC
ENDIF
  CALL HW_TIMER ; Enable Interrupts again.
  MOV ?RTX_SAVEPSW,PSW
  MOV PSW,#?RTX_REGISTERBANK
  MOV saveacc,ACC     ; ACC required by some Cygnal devices
; Update 8051 Interrupt Timer
  CLR TR0
;****************************************************************
; 下面一行语句专门为 STC15系列单片机添加,用于1T模式计时器设置。

  ORL AUXR, #80H       ;对于 STC15 系列产品,使用1T时钟模式,新增加的语句。
;****************************************************************      
  MOV A,TL0
  ADD A,#LOW (?RTX_CLOCK + 7)
  MOV TL0,A
  MOV A,TH0
  ADDC A,#HIGH (?RTX_CLOCK + 7)
  MOV TH0,A
  SETB TR0
至此, Timer0的配置完成,就等待系统启动任务循环了。

总之,希望在了解了以上问题以后,就能够自如的使用这个mini的RTOS了。
积分规则
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|EDABOSS电子论坛

GMT+8, 2024-4-20 02:15 , Processed in 0.039477 second(s), 20 queries .

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表