久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 1722|回復: 0
打印 上一主題 下一主題
收起左側

一種基于系統節拍時間的單片機程序設計模式(利用好每一次節拍時間-03)

[復制鏈接]
跳轉到指定樓層
樓主
ID:249272 發表于 2019-12-3 09:59 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
本帖最后由 水漫金山2017 于 2019-12-3 10:07 編輯

前一篇文章,我們直接用代碼實現了系統節拍時間的產生。其實節拍時間不是一個新的概念,這和操作系統中所提及的時間片是一個含義。那在單片機程序設計中,你真的會利用好這個時間片嗎?怎樣設置時間片長度比較合理?如合利用好這個時間片,就就是本節內容要討論的內容。
經常看到有同事這樣利用時間片,我看著就特別心疼,好好的CPU時間,就被浪費了。

void main(void)
{
         //系統初始化
        for(;;)
       {
                 if(Clock.Tick)
                 {
                         if(++Clock.Cnt20ms >= 10)
                         {
                                 Clock.Cnt20ms = 0;
                                 Task_20ms();
                         }

                         if(++Clock.Cnt100ms >= 100)
                         {
                                 Clock.Cnt100ms = 0;
                                 Task_100ms();
                         }

                         //添加其它周期性任務
                 }
       }
}
這咋起來看沒啥問題,每個任務都在指定周期到了,才會運行。仔細分析起來,這是一種非常粗糙的分時調度寫法。任務多了,其各任務都得不到按時的響應。為簡單明了,我直接指出這種寫法存在的問題:
           1、浪費了許多節拍時間
           2、任務重疊太多,與我們所設計的一個節拍只執行一個任務相違背
為了讓更多的任務可以享受每一次節拍時間的到來,我們應該對這個程序程序稍微改動一下:
理論知識:
假設我們設定的節拍時間為2ms,那么我們可以并發執行20/2=10個20ms周期的任務;500ms以此類推。是的,理論就是這么簡單。
現在開始我們的改造:

                if(Clock.Cnt20ms == 0)     //周期20ms的任務
               {
                     Task0();
               }
               else if(Clock.Cnt20ms == 1)
               {
                    Task1();
               }
               else if(Clock.Cnt20ms == 2)
               {
                   Task2();
               }
               else if(Clock.Cnt20ms == 3)
               {
                   Task3();
               }
               else if(Clock.Cnt20ms == 4)
               {
                   Task4();
               }
               else if(Clock.Cnt20ms == 5)
               {
                   Task5();
               }
               else if(Clock.Cnt20ms == 6)
               {
                   Task6();
               }
               else if(Clock.Cnt20ms == 7)
               {
                   Task7();
               }
               else if(Clock.Cnt20ms == 8)
               {
                   Task8();
               }
               else if(Clock.Cnt20ms == 9)
               {
                  Task9();
               }
               if(++Clock.Cnt20ms >= 10)
                 Clock.Cnt20ms = 0;


對于20ms周期的任務,這10個任務是并發的,他們的周期都是20ms,盡管起點和終點不一樣。









分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 伊人超碰| 国产精品视频久久 | 欧美日韩精品免费 | 国产精品乱码一区二区三区 | 日韩国产在线 | 欧美日韩综合精品 | 亚洲第一av| 国产成人精品一区二区在线 | 亚洲电影专区 | 日本一二区视频 | 亚洲成人在线网 | 成人区精品一区二区婷婷 | 爱综合 | 日日干天天操 | 欧美一级片在线观看 | 亚洲中国字幕 | 国产精品a免费一区久久电影 | 久久99久久 | 国产a视频 | 久久99精品久久久久 | 欧美v在线观看 | 91精品国产色综合久久不卡98 | 丝袜美腿一区二区三区 | 97久久精品午夜一区二区 | 日韩视频在线播放 | 欧美日韩国产一区二区三区不卡 | 国产网站在线播放 | 69视频在线播放 | 浮生影院免费观看中文版 | 国产精品99久久久久久宅男 | 国产二区在线播放 | 91精品国产欧美一区二区成人 | 久久99精品久久久久久青青日本 | 午夜性色a√在线视频观看9 | 成人一区av | 久久6视频 | 亚洲综合精品 | 欧美一级片中文字幕 | 国产免费va | 亚洲日韩中文字幕一区 | 免费视频一区二区 |