单片机教程网

电脑版
提示:原网页已由神马搜索转码, 内容由www.51hei.com提供.
查看:8434|回复:8
打印上一主题下一主题

RTX51-Tiny的学习

 [复制链接]
跳转到指定楼层
楼主
ID:91442发表于 2015-10-29 13:00|只看该作者回帖奖励
                                                                 这两天在考虑多路继电器同时工作的情况,开始接触了51系统中的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了。



沙发
ID:130786发表于 2016-11-1 15:00|只看该作者
能不能完全的移植出来呢。。
板凳
ID:495165发表于 2019-6-19 16:13|只看该作者
hello 不知道楼主总结的这些问题有结果了吗
地板
ID:745758发表于 2020-5-17 00:25来自手机|只看该作者
我也按这种设置过,但是时钟总是不对,只创建了task_1,内部有LED翻转,然后来一个wait(ktmo,1000),按理说应该是1秒延时翻转,但是实际上是0.3秒,想不通
5#
ID:117433发表于 2020-6-2 11:19|只看该作者
sandgod 发表于 2020-5-17 00:25
我也按这种设置过,但是时钟总是不对,只创建了task_1,内部有LED翻转,然后来一个wait(ktmo,1000),按理说 ...

我试过用STC官方的库,时钟好像没问题
6#
ID:76719发表于 2020-7-9 09:26|只看该作者
你把SYSTICK周期设置高一点,设置成10MS试试
7#
ID:514317发表于 2022-3-23 11:39|只看该作者
zzw15951929946 发表于 2020-7-9 09:26
你把SYSTICK周期设置高一点,设置成10MS试试

有没有发现   其他任务都没多大问题   如果有外部中断的情况下   整个系统的时间片就会有问题
8#
ID:690904发表于 2023-8-23 19:13|只看该作者
请问赛元8位机能跑吗,目前只试过stc可以
9#
ID:1102093发表于 2023-12-1 22:37|只看该作者
这个东西怎么用啊,先做一个记号

手机版|小黑屋|51黑电子论坛|51黑电子论坛6群QQ管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网