欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

標(biāo)題: RTX51-Tiny的學(xué)習(xí) [打印本頁(yè)]

作者: 愛(ài)51hei    時(shí)間: 2015-10-29 13:00
標(biāo)題: RTX51-Tiny的學(xué)習(xí)
                                                                                                 這兩天在考慮多路繼電器同時(shí)工作的情況,開(kāi)始接觸了51系統(tǒng)中的RTOS。目前看到較多的是Keil 提供的 RTX51 Tiny(免費(fèi)版),另外的有周立功公司的 Small RTOS51,對(duì)于更大的系統(tǒng),就只有考慮uCOS了。從STC15F204EA的硬件配置來(lái)看,目前只適合使用RTX51 Tiny了。

在學(xué)習(xí)過(guò)程中,有下面的疑問(wèn)需要逐一驗(yàn)證:

在標(biāo)準(zhǔn)的時(shí)間片輪換模式下,疑問(wèn):
    1. os_create_task(nTask_Id) 可以在任何時(shí)間調(diào)用?
    2. os_create_task() 和 os_set_ready() 的區(qū)別?如何只創(chuàng)建一個(gè)任務(wù)而不啟動(dòng)?當(dāng)一個(gè)任務(wù)處于ready時(shí),在下一個(gè)時(shí)間片就會(huì)啟動(dòng)工作?
    3. 可以通過(guò) os_set_ready(nTask_Id) 和 os_send_signal(nTask_id) 啟動(dòng)一個(gè)任務(wù)?
    4. os_delete_task(nTask_id)的任務(wù)是否可以再次激活?
    5. 任務(wù)數(shù)量的多少是否會(huì)影響到程序的執(zhí)行速度?如果系統(tǒng)中一開(kāi)始有12個(gè)任務(wù)在運(yùn)行,后面刪除到只剩下4個(gè),這時(shí)候
       任務(wù)的運(yùn)行速度是否提高了4倍?
    6. 在問(wèn)題5的情況下,如何保證基本驅(qū)動(dòng)程序能夠按照穩(wěn)定的時(shí)間間隔運(yùn)行?
        A: 在系統(tǒng)初始化完成后,不要增加,刪除或掛起任務(wù),這樣就可以保證時(shí)間片輪換的頻率穩(wěn)定。(這個(gè)做法是否正確???)   
    7. 如何測(cè)試系統(tǒng)當(dāng)前的負(fù)載量和運(yùn)行速度?
    8. 在系統(tǒng)中還有其他需要用到定時(shí)的中斷時(shí),如何平衡時(shí)間的分配?如系統(tǒng)中有串行口通訊,或者更高精度的定時(shí)器(定時(shí)精度高于SysTick)?
    9. 對(duì)于在單個(gè)任務(wù)中使用多重循環(huán)進(jìn)行延時(shí),如何保證延時(shí)時(shí)間的準(zhǔn)確性?(函數(shù)的重入問(wèn)題)假設(shè)系統(tǒng)中的每個(gè)時(shí)間片為50ms,同時(shí)有10個(gè)任務(wù)
       在運(yùn)行,如何保證其中的任務(wù)1能夠連續(xù)不斷的輸出頻率為1KHz的方波(端口的翻轉(zhuǎn)頻率為2KHz)?同時(shí)任務(wù)2連續(xù)輸出頻率200Hz的方波?按照正常
       理解,系統(tǒng)中有10個(gè)并行任務(wù),則每個(gè)任務(wù)的工作周期是 SysTickPeriod * nTaskCount = 50ms*10 = 500ms,其中任務(wù)1只有其中的50ms內(nèi)能夠
       對(duì)某個(gè)GPIO進(jìn)行控制,使其做2KHz的翻轉(zhuǎn)(使用循環(huán)延時(shí)即可)。但是在其它任務(wù)激活的時(shí)候,該如何進(jìn)行?
    10.對(duì)于來(lái)自外部的中斷,如觸發(fā)信號(hào)輸入(串口中斷發(fā)生),此時(shí)處理串口工作的任務(wù)處于休眠期,是否可以通過(guò)串口中斷立即激活該任務(wù)?
       例如使用 os_switch_task()。但是如何能夠避開(kāi)其它任務(wù),而直接執(zhí)行串口工作處理的任務(wù)呢? 是否需要啟動(dòng)優(yōu)先級(jí)的任務(wù)?   


另外,通過(guò)實(shí)際測(cè)試,對(duì)SysTick的配置做了確認(rèn)。 這個(gè)可以在 conf_tny.A51中做配置。說(shuō)明如下:
1. INT_CLOCK EQU      24000         ; 系統(tǒng)時(shí)鐘設(shè)置為 24.000MHz時(shí),每個(gè) SysTick 周期是1ms。   
2. TIMESHARING EQU     1             ; 每個(gè)任務(wù)的時(shí)間片的長(zhǎng)度,用SysTick的個(gè)數(shù)表示。
在以上配置下,每個(gè)任務(wù)的時(shí)間片長(zhǎng)度為:FOSC/INT_CLOCK*TIMESHARING =  24.000M/24000*1 = 1ms。
另外,為了發(fā)揮 STC15系列1T單片機(jī)的優(yōu)勢(shì),在HW_TIMER的初始化階段,設(shè)置輔助寄存器 AUXR,使Timer0工作于1T定時(shí)器模式。否則默認(rèn)的工作在 12T傳統(tǒng)的8051定時(shí)器模式。

具體修改的程序段如下:
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
;****************************************************************
; 下面一行語(yǔ)句專門(mén)為 STC15系列單片機(jī)添加,用于1T模式計(jì)時(shí)器設(shè)置。

  ORL AUXR, #80H       ;對(duì)于 STC15 系列產(chǎn)品,使用1T時(shí)鐘模式,新增加的語(yǔ)句。
;****************************************************************      
  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的配置完成,就等待系統(tǒng)啟動(dòng)任務(wù)循環(huán)了。

總之,希望在了解了以上問(wèn)題以后,就能夠自如的使用這個(gè)mini的RTOS了。




作者: clexsp    時(shí)間: 2016-11-1 15:00
能不能完全的移植出來(lái)呢。。
作者: fanfan_gg    時(shí)間: 2019-6-19 16:13
hello 不知道樓主總結(jié)的這些問(wèn)題有結(jié)果了嗎

作者: sandgod    時(shí)間: 2020-5-17 00:25
我也按這種設(shè)置過(guò),但是時(shí)鐘總是不對(duì),只創(chuàng)建了task_1,內(nèi)部有LED翻轉(zhuǎn),然后來(lái)一個(gè)wait(ktmo,1000),按理說(shuō)應(yīng)該是1秒延時(shí)翻轉(zhuǎn),但是實(shí)際上是0.3秒,想不通
作者: xizhe2005    時(shí)間: 2020-6-2 11:19
sandgod 發(fā)表于 2020-5-17 00:25
我也按這種設(shè)置過(guò),但是時(shí)鐘總是不對(duì),只創(chuàng)建了task_1,內(nèi)部有LED翻轉(zhuǎn),然后來(lái)一個(gè)wait(ktmo,1000),按理說(shuō) ...

我試過(guò)用STC官方的庫(kù),時(shí)鐘好像沒(méi)問(wèn)題
作者: zzw15951929946    時(shí)間: 2020-7-9 09:26
你把SYSTICK周期設(shè)置高一點(diǎn),設(shè)置成10MS試試
作者: lzzasd    時(shí)間: 2022-3-23 11:39
zzw15951929946 發(fā)表于 2020-7-9 09:26
你把SYSTICK周期設(shè)置高一點(diǎn),設(shè)置成10MS試試

有沒(méi)有發(fā)現(xiàn)    其他任務(wù)都沒(méi)多大問(wèn)題   如果有外部中斷的情況下    整個(gè)系統(tǒng)的時(shí)間片就會(huì)有問(wèn)題
作者: V5_471G    時(shí)間: 2023-8-23 19:13
請(qǐng)問(wèn)賽元8位機(jī)能跑嗎,目前只試過(guò)stc可以
作者: 365280223    時(shí)間: 2023-12-1 22:37
這個(gè)東西怎么用啊,先做一個(gè)記號(hào)




歡迎光臨 (http://www.raoushi.com/bbs/) Powered by Discuz! X3.1