久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
一種基于系統節拍時間的單片機程序設計模式(利用好每一次節拍時間-03)
[打印本頁]
作者:
水漫金山2017
時間:
2019-12-3 09:59
標題:
一種基于系統節拍時間的單片機程序設計模式(利用好每一次節拍時間-03)
本帖最后由 水漫金山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,盡管起點和終點不一樣。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲欧洲一区
|
久久性
|
亚洲国产一区二区三区
|
日韩精品免费视频
|
色综网
|
亚洲国产一区二区视频
|
久久久久国产一区二区三区
|
精品久久久久久亚洲综合网站
|
国产成人精品一区二区三区
|
国产毛片久久久久久久久春天
|
蜜桃av一区二区三区
|
欧美xxxx色视频在线观看免费
|
夜夜操天天操
|
国产高清一区二区
|
伊色综合久久之综合久久
|
欧美午夜影院
|
99精品久久久久久
|
精品国产乱码久久久久久影片
|
成人在线视频一区
|
激情视频网站
|
亚洲精品久久久9婷婷中文字幕
|
亚洲在线电影
|
欧美精品福利
|
国产乱码精品1区2区3区
|
亚洲精品9999
|
成人在线观看网址
|
欧美精品一区二区三区在线
|
国产精品夜间视频香蕉
|
久久精品性视频
|
欧美黄色性生活视频
|
日韩精品二区
|
国产成人高清成人av片在线看
|
欧美福利在线
|
日韩一区二区三区视频在线观看
|
欧美在线视频网站
|
www.47久久青青
|
成人高清视频在线观看
|
国产女人与拘做视频免费
|
国产福利91精品一区二区三区
|
精品一区二区三区不卡
|
一区二区三区四区在线视频
|