娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2024年07月10日(星期三)

正在發生

2019年04月25日 | UCOSIII中斷和時間管理

發布者:SerendipityLove 來源: eefocus關鍵字:UCOSIII  中斷  時間管理 手機看文章 掃描二維碼
隨時隨地手機看文章

一、中斷服務函數


1、中斷:應內部或外部異步事件的請求中止當前任務,而去處理異步事件所要求的任務的過程叫做中斷。


      學會如何在UCOSIII下編寫中斷服務函數!


如果用UCOIII會先進行條件編譯,然后執行中斷服務程序,最后會退出UCOIII中斷。中斷函數如下:


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

{

       u8 Res;

 

#if SYSTEM_SUPPORT_OS  //使用UCOS操作系統

       OSIntEnter();   

#endif

 

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

       {

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

      

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

              {

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

                     {

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

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

                     }

                     else //還沒收到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;//接收數據錯誤,重新開始接收         

                            }            

                     }

              }            

  }

 

 #if SYSTEM_SUPPORT_OS 

       OSIntExit();         //退出中斷

 #endif

}

進入和退出中斷服務函數

進入中斷服務函數以后使用函數OSIntEnter()


void  OSIntEnter (void)

{

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

      {

              return

      }

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

      {

            return;

      }

     OSIntNestingCtr++;//記錄中斷嵌套次數,UCOSIII最多支持250級的中斷嵌套

}

退出中斷服務函數時要調用函數OSIntExit();


UCOSIII臨界段代碼保護

臨界段代碼也叫做臨界區,是指那些必須完整連續運行,不可被打斷的代碼段。當訪問這些臨界段代碼的時候需要對這些臨界段代碼進行保護。


兩種不同的保護方式:


①當宏OS_CFG_ISR_POST_DEFERRED_EN為0時,UCOSIII使用關中斷的方式來保護臨界段代碼,當設置為1的時候就會采用給調度器上鎖的方式來保護臨界段代碼。


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


比如在主函數,在創建開始函數時,認為是不可打斷的,所有進行保護,創建完后再解除保護:


int main(void)

{

       OS_ERR err;//錯誤值:都是宏定義,根據對應數值找到返回錯誤值代表的意思

       CPU_SR_ALLOC();

      

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

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

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

       LED_Init();         //LED初始化

 

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

       OS_CRITICAL_ENTER();//進入臨界區

       //創建開始任務

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

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

                 (OS_TASK_PTR )start_task,                      //任務函數

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

                 (OS_PRIO      )START_TASK_PRIO,     //任務優先級

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

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

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

                 (OS_MSG_QTY  )0,                                //任務內部消息隊列能夠接收的最大消息數目,為0時禁止接收消息

                 (OS_TICK        )0,                                   //當使能時間片輪轉時的時間片長度,為0時為默認長度,

                 (void          * )0,                             //用戶補充的存儲區

                 (OS_OPT      )OS_OPT_TASK_STK_CHK|OS_OPT_TASK_STK_CLR, //任務選項

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

       OS_CRITICAL_EXIT();     //退出臨界區

       OSStart(&err);  //開啟UCOSIII

       while(1);

}

UCOSIII時間管理

任務延時

 UCOSIII中的任務是一個無限循環并且還是一個搶占式內核,為了使高優先級的任務不至于獨占CPU,可以給其他優先級較低任務獲取CPU使用權的機會,UCOSIII中除空閑任務外的所有任務必須在合適的位置調用系統提供的延時函數,讓當前的任務暫停運行一段時間并進行一個任務切換。


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


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


void  OSTimeDly (OS_TICK   dly,//時間片數

                 OS_OPT    opt,//工作模式

                 OS_ERR   *p_err)//錯誤碼

   OSTimeDlyHMSM()函數僅在相對模式下工作。


void  OSTimeDlyHMSM (CPU_INT16U   hours,//時

                     CPU_INT16U   minutes,//分

                     CPU_INT16U   seconds,//秒

                     CPU_INT32U   milli,//微妙

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

                     OS_ERR      *p_err)

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


取消任務的延時

延時任務任務可通過在其他任務中調用函數OSTimeDlyResume()取消延時而進入就緒狀態,此函數最后會引發一次任務調度。


獲取和設置系統時間

UCOSIII定義了一個CPU_INT32U類型的全局變量OSTickCtr來記錄系統時鐘節拍數,在調用OSInit()時被初始化為0,以后每發生1個時鐘節拍,OSTickCtr加1。


 OSTimeSet()允許用戶改變當前時鐘節拍計數器的值,慎用!!!!!


OSTimeGet()用來獲取動遷時鐘節拍計數器的值。

關鍵字:UCOSIII  中斷  時間管理 引用地址:UCOSIII中斷和時間管理

上一篇:UCOSIII任務間的通信
下一篇:UCOSIII的5個系統任務及鉤子函數編寫

推薦閱讀

  本報實習記者 仇楊濤  集成電路產業近日成為熱點。新三板市場同樣聚集了大量集成電路產業鏈企業。這些企業多從事于各類集成電路的“設計”工作,而在成本較高的“制造”環節鮮有企業涉足。  東方財富Choice數據顯示,新三板集成電路板塊涉及掛牌企業44家。28家企業披露了2017年年報,合計實現凈利潤2.05億元,整體盈利能力有所提高。總體看,新三...
4月23日,集成電路與新型顯示產業集群發展大會在成都舉行。據介紹,2018年四川省電子信息產業實現主營業務收入9258億元,同比增長14.1%,居中西部第一,全國第七。2019年,電子信息產業將成為四川省第一個實現主營業務收入突破萬億元的產業近年來,四川省高度重視與臺灣在電子信息產業領域的合作,臺灣富士康、仁寶、緯創、聯發科、巨騰國際等知名電子信息...
定時器選擇:stm8定時器與stm32定時器略有不同,stm32定時器是24位--16,777,216,按照72M時鐘8分頻計算,周期達到1.86s左右,而stm8定時器是16/8--位65535/255,自身時鐘為16M,即使16分頻周期也遠小于1s。當前選擇TIM2定時器,1分頻,最大周期65536/16 約等于 4096us。初始化void TIM_Delay_Init(){ /* 自動重裝載值范圍TIM4為0~255,TIM2為0~65...
據 DigiTimes 援引業內消息,蘋果似乎預計其新款 M1 驅動的 iPad Pro 需求旺盛,因為該公司已要求其主要芯片供應商臺積電(TSMC)增加其新款 iPad 和更新款 Mac 電腦的芯片產量。本周早些時候,蘋果發布了全新的 11 英寸和 12.9 英寸 iPad Pro,采用 M1 蘋果芯片,同樣的芯片也為新發布的 24 英寸 iMac 提供動力。M1 芯片于 11 月...

史海拾趣

問答坊 | AI 解惑

哪位有TMS320DM6437串口通信的資料

如果有的話,共享一下,謝謝了~~·…

查看全部問答∨

VS2005 Win32 位圖控件

  我現在用VS2005 得移動設備下得Win32編寫應用軟件。發現在VS2005移動設備下,沒有包含CBitmap Button類。   請問我才能怎么實現位圖控件呢?   謝謝!!!…

查看全部問答∨

uart與超級終端之間是什么關系

在程序中并沒有顯示調用超級終端,但可以使用,不知道為什么…

查看全部問答∨

Wince5.0 中RTL8139的驅動支持RTL8139D的芯片么

我用的CEPC的BSP,平臺是PC104,網卡是RTL8139D,我在PB中加入了RTL8139的驅動,去掉了enable KITL選項,可是系統啟動后一切正常,就是ping不通, error code 11010 ping自己能ping通, ipconfig也正常,網口發送指示燈都不閃,我覺得根本包就沒 ...…

查看全部問答∨

從dll中取資源做圖標

注冊表 DefaultIcon  下 比如 my.dll,0 那個0表示的是什么? 我看文檔說是第0個資源,我目前是想讓顯示一個圖標,那么我在my.dll 里怎么設置這個資源呢?快下班了,大家幫忙下,找了半天了沒結果 還比如說 視頻的快捷方式 22#:MSPIMG?pi ...…

查看全部問答∨

如何在通話時,實現靜音?

使用TAPI實現了通話,現在要增加一項功能,需要靜音掉我的語音,就是讓對方聽不到我講話,如何實現?…

查看全部問答∨

PSAM 通用DES計算

我用PSAM卡的加密密鑰(我寫入psam卡的)對一串字符加密,命令如下: 80 FA 00 00 10 31 21 11 01 01 01 01 01 31 21 11 01 01 01 01 01 得到的是61 16(加密數據的長度),沒有加密后的密文.為什么?為什么? 注:通用DES計算初始化已經做過,并且成功.…

查看全部問答∨

9B96原理圖(有部分錯誤!)

目前是RS485收發搞反掉了!把TFT 的數據線搞錯了,應朋友需要才發的,SCH沒修改。。。。。。。。。…

查看全部問答∨

i.MX27處理器實現串口擴展

                摘要:介紹在i.MX27芯片上利用16C652芯片來擴展串口的方案,詳細闡述i.MX27芯片與16C652芯片之間的接口設計、CPLD設計、驅動設計。 關鍵詞: i. ...…

查看全部問答∨

TI zigbee sensor monitor找不到串口

  別人的計算機可以,我的不行,不知道咋回事?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 全州县| 桂林市| 阳新县| 上林县| 徐汇区| 吉安市| 舒兰市| 兰考县| 宁晋县| 阳信县| 通州区| 开阳县| 磐石市| 塔河县| 大田县| 雅安市| 西藏| 陇西县| 新沂市| 铜川市| 阿拉善左旗| 合江县| 宽城| 乌审旗| 嵊州市| 潢川县| 云安县| 安顺市| 边坝县| 榆林市| 湟中县| 桐庐县| 舒城县| 扎赉特旗| 安平县| 芮城县| 庄河市| 玛纳斯县| 葫芦岛市| 伊宁县| 和龙市|