日韩一区二区三区精品,欧美疯狂xxxxbbbb牲交,热99re久久免费视精品频,人妻互换 综合,欧美激情肉欲高潮视频

一、中斷服務(wù)函數(shù)


1、中斷:應(yīng)內(nèi)部或外部異步事件的請(qǐng)求中止當(dāng)前任務(wù),而去處理異步事件所要求的任務(wù)的過(guò)程叫做中斷。


      學(xué)會(huì)如何在UCOSIII下編寫(xiě)中斷服務(wù)函數(shù)!


如果用UCOIII會(huì)先進(jìn)行條件編譯,然后執(zhí)行中斷服務(wù)程序,最后會(huì)退出UCOIII中斷。中斷函數(shù)如下:


void USART1_IRQHandler(void)                  //串口1中斷服務(wù)程序

{

       u8 Res;

 

#if SYSTEM_SUPPORT_OS  //使用UCOS操作系統(tǒng)

       OSIntEnter();   

#endif

 

       if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)  //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)

       {

              Res =USART_ReceiveData(USART1);//(USART1->DR);      //讀取接收到的數(shù)據(jù)

      

              if((USART_RX_STA&0x8000)==0)//接收未完成

              {

                     if(USART_RX_STA&0x4000)//接收到了0x0d

                     {

                            if(Res!=0x0a)USART_RX_STA=0;//接收錯(cuò)誤,重新開(kāi)始

                            else USART_RX_STA|=0x8000;      //接收完成了

                     }

                     else //還沒(méi)收到0X0D

                     {     

                            if(Res==0x0d)USART_RX_STA|=0x4000;

                            else

                            {

                                   USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

                                   USART_RX_STA++;

                                   if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯(cuò)誤,重新開(kāi)始接收         

                            }            

                     }

              }            

  }

 

 #if SYSTEM_SUPPORT_OS 

       OSIntExit();         //退出中斷

 #endif

}

進(jìn)入和退出中斷服務(wù)函數(shù)

進(jìn)入中斷服務(wù)函數(shù)以后使用函數(shù)OSIntEnter()


void  OSIntEnter (void)

{

      if (OSRunning != OS_STATE_OS_RUNNING)//判斷UCOSIII是否運(yùn)行

      {

              return

      }

      if (OSIntNestingCtr >= (OS_NESTING_CTR)250u)//判斷中斷嵌套次數(shù)

      {

            return;

      }

     OSIntNestingCtr++;//記錄中斷嵌套次數(shù),UCOSIII最多支持250級(jí)的中斷嵌套

}

退出中斷服務(wù)函數(shù)時(shí)要調(diào)用函數(shù)OSIntExit();


UCOSIII臨界段代碼保護(hù)

臨界段代碼也叫做臨界區(qū),是指那些必須完整連續(xù)運(yùn)行,不可被打斷的代碼段。當(dāng)訪問(wèn)這些臨界段代碼的時(shí)候需要對(duì)這些臨界段代碼進(jìn)行保護(hù)。


兩種不同的保護(hù)方式:


①當(dāng)宏OS_CFG_ISR_POST_DEFERRED_EN為0時(shí),UCOSIII使用關(guān)中斷的方式來(lái)保護(hù)臨界段代碼,當(dāng)設(shè)置為1的時(shí)候就會(huì)采用給調(diào)度器上鎖的方式來(lái)保護(hù)臨界段代碼。


②UCOSIII定義了一個(gè)進(jìn)入臨界段代碼的宏:OS_CRITICAL_ENTER(),定義了兩個(gè)退出臨界段代碼的宏:OS_CRITICAL_EXIT和OS_CRITICAL_EXIT_NO_SCHED()。


比如在主函數(shù),在創(chuàng)建開(kāi)始函數(shù)時(shí),認(rèn)為是不可打斷的,所有進(jìn)行保護(hù),創(chuàng)建完后再解除保護(hù):


int main(void)

{

       OS_ERR err;//錯(cuò)誤值:都是宏定義,根據(jù)對(duì)應(yīng)數(shù)值找到返回錯(cuò)誤值代表的意思

       CPU_SR_ALLOC();

      

       delay_init(168);    //時(shí)鐘初始化

       NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);//中斷分組配置

       uart_init(115200);  //串口初始化

       LED_Init();         //LED初始化

 

       OSInit(&err);         //初始化UCOSIII

       OS_CRITICAL_ENTER();//進(jìn)入臨界區(qū)

       //創(chuàng)建開(kāi)始任務(wù)

       OSTaskCreate((OS_TCB       * )&StartTaskTCB,         //任務(wù)控制塊

                             (CPU_CHAR * )"start task",              //任務(wù)名字

                 (OS_TASK_PTR )start_task,                      //任務(wù)函數(shù)

                 (void            * )0,                             //傳遞給任務(wù)函數(shù)的參數(shù)

                 (OS_PRIO      )START_TASK_PRIO,     //任務(wù)優(yōu)先級(jí)

                 (CPU_STK   * )&START_TASK_STK[0],     //任務(wù)堆棧基地址

                 (CPU_STK_SIZE)START_STK_SIZE/10, //任務(wù)堆棧深度限位

                 (CPU_STK_SIZE)START_STK_SIZE,             //任務(wù)堆棧大小

                 (OS_MSG_QTY  )0,                                //任務(wù)內(nèi)部消息隊(duì)列能夠接收的最大消息數(shù)目,為0時(shí)禁止接收消息

                 (OS_TICK        )0,                                   //當(dāng)使能時(shí)間片輪轉(zhuǎn)時(shí)的時(shí)間片長(zhǎng)度,為0時(shí)為默認(rèn)長(zhǎng)度,

                 (void          * )0,                             //用戶補(bǔ)充的存儲(chǔ)區(qū)

                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務(wù)選項(xiàng)

                 (OS_ERR      * )&err);                       //存放該函數(shù)錯(cuò)誤時(shí)的返回值

       OS_CRITICAL_EXIT();     //退出臨界區(qū)

       OSStart(&err);  //開(kāi)啟UCOSIII

       while(1);

}

UCOSIII時(shí)間管理

任務(wù)延時(shí)

 UCOSIII中的任務(wù)是一個(gè)無(wú)限循環(huán)并且還是一個(gè)搶占式內(nèi)核,為了使高優(yōu)先級(jí)的任務(wù)不至于獨(dú)占CPU,可以給其他優(yōu)先級(jí)較低任務(wù)獲取CPU使用權(quán)的機(jī)會(huì),UCOSIII中除空閑任務(wù)外的所有任務(wù)必須在合適的位置調(diào)用系統(tǒng)提供的延時(shí)函數(shù),讓當(dāng)前的任務(wù)暫停運(yùn)行一段時(shí)間并進(jìn)行一個(gè)任務(wù)切換。


延時(shí)函數(shù)有兩種,OSTimeDly()和OSTimeDlyHMSM()。


   OSTimeDly()函數(shù)有三種工作模式:相對(duì)模式、周期模式和絕對(duì)模式。


void  OSTimeDly (OS_TICK   dly,//時(shí)間片數(shù)

                 OS_OPT    opt,//工作模式

                 OS_ERR   *p_err)//錯(cuò)誤碼

   OSTimeDlyHMSM()函數(shù)僅在相對(duì)模式下工作。


void  OSTimeDlyHMSM (CPU_INT16U   hours,//時(shí)

                     CPU_INT16U   minutes,//分

                     CPU_INT16U   seconds,//秒

                     CPU_INT32U   milli,//微妙

                     OS_OPT       opt,//工作模式,不同的工作模式時(shí)間范圍不一致

                     OS_ERR      *p_err)

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------


取消任務(wù)的延時(shí)

延時(shí)任務(wù)任務(wù)可通過(guò)在其他任務(wù)中調(diào)用函數(shù)OSTimeDlyResume()取消延時(shí)而進(jìn)入就緒狀態(tài),此函數(shù)最后會(huì)引發(fā)一次任務(wù)調(diào)度。


獲取和設(shè)置系統(tǒng)時(shí)間

UCOSIII定義了一個(gè)CPU_INT32U類型的全局變量OSTickCtr來(lái)記錄系統(tǒng)時(shí)鐘節(jié)拍數(shù),在調(diào)用OSInit()時(shí)被初始化為0,以后每發(fā)生1個(gè)時(shí)鐘節(jié)拍,OSTickCtr加1。


 OSTimeSet()允許用戶改變當(dāng)前時(shí)鐘節(jié)拍計(jì)數(shù)器的值,慎用?。。。?!


OSTimeGet()用來(lái)獲取動(dòng)遷時(shí)鐘節(jié)拍計(jì)數(shù)器的值。

關(guān)鍵字:UCOSIII  中斷  時(shí)間管理 引用地址:UCOSIII中斷和時(shí)間管理

上一篇:UCOSIII任務(wù)間的通信
下一篇:UCOSIII的5個(gè)系統(tǒng)任務(wù)及鉤子函數(shù)編寫(xiě)

推薦閱讀

在開(kāi)完堅(jiān)果3的發(fā)布會(huì)后,羅永浩稱5月15日的錘子新機(jī)R1,能夠把人“嚇尿”,他還時(shí)不時(shí)放豪言給R1預(yù)熱,像新機(jī)價(jià)格賣6000、比競(jìng)爭(zhēng)對(duì)手好不止50%、勸別人等R1發(fā)布之后再換手機(jī)等,給人以一種R1很強(qiáng)大的感覺(jué)。那么R1真的這么有魅力嗎?事實(shí)的確如此。搭載驍龍845處理器?早前,知名數(shù)碼博主放出了一張R1的渲染圖,稱它將搭載驍龍845處理器,并將使用劉海屏的設(shè)...
“艾邁斯半導(dǎo)體的理念是,不管客戶選擇哪種方案,我們都有成熟的解決方案提供給客戶。”艾邁斯半導(dǎo)體先進(jìn)光學(xué)傳感器部門執(zhí)行副總裁兼總經(jīng)理Jennifer Zhao女士,在第八屆年度中國(guó)電子ICT媒體論壇暨2019產(chǎn)業(yè)和技術(shù)展望研討會(huì)上,就《艾邁斯半導(dǎo)體持續(xù)創(chuàng)新,靈活應(yīng)對(duì)瞬息萬(wàn)變的智能手機(jī)市場(chǎng)》為主題,發(fā)表了演講。艾邁斯半導(dǎo)體先進(jìn)光學(xué)傳感器部門執(zhí)行副總裁...
今年初,新冠肺炎在我國(guó)突然爆發(fā),對(duì)我國(guó)的經(jīng)濟(jì)社會(huì)運(yùn)行造成了巨大沖擊。 好在國(guó)內(nèi)疫情防控形勢(shì)持續(xù)向好,經(jīng)濟(jì)社會(huì)運(yùn)行秩序加快恢復(fù)。目前,規(guī)模以上工業(yè)企業(yè)基本實(shí)現(xiàn)了復(fù)工復(fù)產(chǎn),截至 4 月 21 日平均開(kāi)工率和復(fù)崗率分別達(dá)到 99.1%和 95.1%,其中湖北省分別達(dá)到 98.2%和 92.2%。復(fù)工復(fù)產(chǎn)率達(dá)到 9 成以上,意味著國(guó)家在疫情期間出臺(tái)的一系列逆周...
據(jù)彭博社的 Mark Gurman 稱,今年晚些時(shí)候,蘋果將在 iOS 15 和 iPadOS 15 中引入幾個(gè)新功能和增強(qiáng)功能,包括重新設(shè)計(jì)的 iPad 主屏幕,更新的鎖屏,以及為用戶提供新的通知偏好。報(bào)道稱,蘋果正致力于將 ?iPad ??主屏?與 iPhone 一樣,允許用戶在屏幕的任何部分放置小組件,而不是目前僅限于在左手邊的今日視圖放置小組件。該公司還計(jì)...

史海拾趣

小廣播
設(shè)計(jì)資源 培訓(xùn) 開(kāi)發(fā)板 精華推薦

最新單片機(jī)文章

 
EEWorld訂閱號(hào)

 
EEWorld服務(wù)號(hào)

 
汽車開(kāi)發(fā)圈

 
機(jī)器人開(kāi)發(fā)圈

電子工程世界版權(quán)所有 京ICP證060456號(hào) 京ICP備10001474號(hào)-1 電信業(yè)務(wù)審批[2006]字第258號(hào)函 京公網(wǎng)安備 11010802033920號(hào) Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved