色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

傳統編程結構的局限性,使用“前后臺方式”進行編程

h1654155971.7688 ? 來源:未知 ? 作者:李倩 ? 2018-05-25 09:07 ? 次閱讀

1 傳統編程結構的局限性

當不使用RTOS時,嵌入式軟件通常采用兩種傳統的編程結構進行編程,一種叫“前后臺結構”或者叫“超級循環結構”,本質上是事件觸發的編程方式,另一種叫時間觸發的編程方式,Michael J.Pont的“基于時間觸發的編程模式”即屬于此。

在實際工作中,當系統稍微復雜時,會發現這兩種方式都有一定局限性,下面以一個實際產品設計中遇到的問題為例來說明。

在設計一個用于配電柜的壁裝式智能配電儀表時,CPU的程序設計需完成以下任務:

(1)每半秒對前顯示屏的顯示數據進行一次刷行。

(2)每0.1秒對DI/DO進行一次刷新。

(3)每0.2秒對鍵盤進行一次掃描。

(4)每半秒對測量數據進行一次重新采集和計算。

(5)異步串行口與上位機使用Modbus通信,速率最高19200bps。

(6)CPU通過IIC總線與時鐘芯片和EEprom通信。

(7)CPU通過SPI總線與LED數碼管及采集芯片通信。

(8)CPU要對所采集的6路信號進行FFT變換。

(9)當系統掉電時,CPU要能快速響應以把當前的電度底數寫入EEprom中。

上述任務中,任務(5)和任務(9)是強實時性的,如果對串口的收發事件得不到及時響應,接收時會導致字節丟失,發送時會導致字節間時間間隔太大造成接收方的Modbus幀定界錯誤,對系統掉電事件如果不能及時響應會造成EEprom的寫入失敗。其它任務只要在指定的周期內能得到執行就行,但是任務(8)比較特殊,使用通常的8位CPU進行6種信號的FFT變換,哪怕每種信號只做128點的FFT,運算一次也要好幾秒。下面來看用傳統編程結構實現上述設計時遇到的困擾。

1.1 使用“前后臺方式”進行編程

使用“前后臺方式”進行編程時,為保證任務(5)的及時性,使用了UART中斷,當UART完成一個字節的收發后產生中斷,在中斷程序中將接收到的字符保存在接收緩沖區或從發送緩沖區取下一個待發字符裝入UART進行發送,對Modbus協議的處理可以單獨用一個任務在中斷外處理,這保證了中斷程序的簡短。為保證任務(9)響應的及時性,也必須為它安排一個中斷。因為當系統掉電時,系統只有不到10ms的過渡時間,系統如果不能在這個時間內完成相關的操作,系統電壓將跌落至有效電壓以下而喪失工作能力。

安排好了后臺的中斷任務后再來看看前臺的任務如何完成。這里遇到的最大的挑戰是對任務(8)的處理,因為任務(8)需要的執行時間太長了,簡單的把它當成一個任務處理將影響系統對其它任務的響應,在超級循環中的代碼結構如下:

while(1)

{

任務(1);

任務(2);

………

任務(8);

}

由于任務(8)執行一次要幾秒鐘的時間,整個超級循環執行一次至少大于任務(8)需要的時間,也就是說這個超級循環循環一次要幾秒鐘時間,將滿足不了各任務響應時間的要求。

要解決這個問題,只有把任務(8)拆分成很多個子任務,將每個子任務的耗時壓縮到10個毫秒左右,并定義好各子任務完成后的狀態,在超級大循環中每次根據狀態只執行一個子任務,程序結構如下

while(1)

{

任務(1);

任務(2);

………

Switch (子任務狀態)

{

case 子任務狀態1:

子任務1;

break;

case 子任務狀態2:

子任務2;

break;

…………

case 子任務狀態n:

子任務n;

break;

}

}

這樣,就需要把一個耗時幾秒的FFT運算任務拆分成幾百個耗時10ms左右的子任務,這顯然是不可接受的。

除此之外,超級大循環結構隱含地一個缺點就是隨著任務的增加,循環體的執行時間是線性增加的,在實際設計中即使沒有象任務(8)那樣的高耗時任務,當系統功能增加時要保證系統響應的及時性也是一個不小的挑戰。

1.1 使用“時間觸發編程模式”進行編程

“時間觸發編程模式”的核心是建立一個基于時間觸發的合作式的任務調度器,在系統中盡量減少事件觸發(減少中斷的使用),系統通過任務調度器完成各任務的調度執行,下面是“時間觸發編程模式”的典型程序結構:

/*--------------------主函數-----------------------*/

Void main(void)

{

SCH_Init();//設置調度器

SCH_Add_Task(任務函數名,任務調度延遲,任務調度周期);//將任務加入調度器的任務隊列

SCH_Start();//刷新任務隊列

while(1)

{

SCH_Dispatch_Tasks(); //執行任務調度器

}

}

/*-------------------定時中斷函數---------------------*/

Void SCH_Update(void) interrupt

{

//刷新任務隊列

}

系統中每個任務都定義了優先級、任務循環周期和任務延遲時間,系統時器中斷程序SCH_Update()按設定的節拍對任務隊列進行刷新,在超級大循環中只執行任務調度器SCH_Dispatch_Tasks(),根據任務隊列的狀態安排任務的執行。

這種編程結構避免了超級大循環結構循環時間隨代碼量的增加而線性增加的問題,但是,由于任務是不可剝奪的,一旦任務啟動執行,任務調度器只有在當前任務完成后才有機會執行,這就要求每個任務占用CPU的時間不能太長,否則將影響整個系統的響應速度。所以,FFT運算在這種編程模式下還是必須進行有效的拆分,否則就必須提高CPU的檔次或使用可剝奪型的搶先式RTOS,這勢必造成系統成本的增加。那么有沒有更好的解決辦法呢?

下面的編程結構對“時間觸發編程模式”進行了改進,使之在不提高硬件成本的情況下,使編程人員更直觀地定義任務,減少任務特性對系統程序結構的沖擊,使程序結構簡單明了并提高系統的實時響應速度。

2 對“時間觸發編程模式”的改進

根據多年嵌入式系統編程的經驗,通常嵌入系統的任務可以劃分成3種類型:

(1)及時型任務;

(2)周期型任務;

(3)背景型任務;

及時型任務的特點:這類任務是事件觸發型的,一旦事件發生,系統必須在限定的時間內進行響應,對這類任務,最自然的方法就是使用中斷來完成,即定義成“前后臺方式”中的后臺任務。

周期型任務的特點:這類任務是時間觸發式周期型的,系統必須保證在指定的周期內執行任務,“時間觸發編程模式”可以很好地滿足這類任務的需求。

背景型任務的特點:這類任務是非實時型的,實時性不是非常重要,系統在運行過程中可隨時中斷這類任務以便執行前兩類任務,系統只要能充分利用資源盡最大可能快速完成這類任務即可,這類任務最適合定義成“前后臺方式”中的前臺任務。

根據以上任務分類,對“時間觸發編程模式”的改進可概括成以下需求:

(1)任務分3類,1類任務優先級最高,3類任務優先級最低;

(2)高優先級的任務可中斷低優先級任務的執行,同級的任務之間不可相互剝奪。

(3)實際設計中為提高系統的可預測性,應盡量減少1類任務的數量及1類任務的執行時間。

(4)為降低系統資源的占用,系統不給任務劃分單獨的堆棧空間。

以上改進的本質是設計一個3優先級的簡單的任務調度機制,高優先級的任務可中斷低優先級的任務,同優先級的任務之間不能相互剝奪,該調度機制不為每個單獨的任務保存任務上下文和單獨的堆棧,這樣可以減少該編程模式對系統資源的需求。

可剝奪式RTOS中的一個高優先級任務中斷一個低優先級的任務時,會保存好低優先級任務的上下文并把該低優先級任務的局部變量保存在本任務單獨的堆棧中,如果系統不給任務分配單獨的堆棧,如何保證高優先級任務退出后低優先級任務執行環境的恢復呢?

對這個問題,可以借鑒中斷的處理機制用以下辦法予以解決:

(1)在系統中設計一個定時中斷函數,該函數的功能就是執行周期性任務的調度,該定時中斷在所有中斷中優先級最低;

(2)在系統中設計另一個定時中斷函數,該函數的功能是刷新周期型任務的任務管理隊列,為任務調度提供支持,本定時中斷函數的優先級在系統中次低;

(3)周期型任務就是一個函數,該函數入口的第一個操作是開中斷(問:這個中斷指的是觸發及時性任務的中斷,那么在周期性任務外,是開還是關?如果是開,),允許任務執行期間被中斷以便響應及時型任務。

(4)背景型任務就是在主函數超級循環中執行的代碼,該代碼可隨時被及時型和周期型任務中斷,當系統沒有及時型任務和周期型任務時才循環執行背景型任務的代碼。

通過以上措施,“改進型時間觸發編程模式”的程序結構如下:

/*--------------------主函數-----------------------*/

Void main(void)

{

SCH_Init();//設置調度器

SCH_Add_Task(任務函數名,任務調度延遲,任務調度周期);//將任務加入調度器的任務隊列

SCH_Start();//刷新任務隊列

while(1)

{

背景型任務1;

………

背景型任務n;

}

}

/*-------------------次低優先級定時中斷函數---------------------*/

Void SCH_Update(void) interrupt

{

//刷新任務隊列

}

/*-------------------最低優先級的定時中斷函數---------------------*/

Void SCH_Dispatch_Tasks(void) interrupt

{

//調度周期型任務

}

/*-------------------周期型任務典型結構---------------------*/

Void SCH_Cycle_Task1(void)

{

//開中斷 /*此函數中可以靠中斷觸發來執行及時性任務*/

//執行任務

return;//任務返回

}

結 語

使用“改進型時間觸發編程模式”進行小型嵌入式系統編程,就像使用RTOS進行編程一樣,設計者規劃好任務后,就可以專心于每個任務的設計,任務對處理器時間的占用可以由系統統一管理,減少任務之間的耦合,使產品的程序設計和改動都變得簡潔清楚。使用該編程模式很好地解決了壁裝式智能配電儀表所面臨的復雜的設計問題,證明該方法簡單有效。

目前該設計模式僅僅設計了任務調度器,任務間的變量傳遞還需要使用全局變量,如果能加入信號量和消息機制,那么該模式將更加完善,會使低成本的小型嵌入式系統的編程更加方便和清晰。

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3593

    瀏覽量

    129517
  • cpu
    cpu
    +關注

    關注

    68

    文章

    10872

    瀏覽量

    211971
  • 編程
    +關注

    關注

    88

    文章

    3618

    瀏覽量

    93769

原文標題:換個角度來嵌入式編程 對事件和時間觸發的改進

文章出處:【微信號:weixin21ic,微信公眾號:21ic電子網】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    34063的局限性

    由34063構成的開關電源雖然價格便宜、應用廣泛,但它的局限性也是顯而易見的。主要有以下幾點:(1)效率偏低。對于降壓應用,效率一般只有70%左右,輸出電壓低時效率更低。這就使它不能用在某些對功耗
    發表于 06-12 10:41

    FPGA的優勢與局限性

    。減少板級走線,有效降低布局布線難度。當然了,在很多情況下,FPGA不是萬能的。FPGA技術也存在著一些固有的局限性。從以下這些方面看,選擇FPGA技術來實現產品的開發設計有時并不是明智的決定。●在某些
    發表于 12-20 10:07

    無線網絡有什么局限性

    以無線方式發送數據的方法有很多。從遙控無鑰匙進入(RKE)和車庫開門裝置(GDO)等簡單命令和控制方案到WLAN,您有很多種選擇。本文主要探討各種可用的無線網絡選項和必須在應用過程中解決的局限性,旨在為設計師提供一些選擇工業應用的無線網絡時所需的實用信息。
    發表于 08-23 06:13

    MySQL優化之查詢性能優化之查詢優化器的局限性與提示

    MySQL優化三:查詢性能優化之查詢優化器的局限性與提示
    發表于 06-02 06:34

    超聲波液位計的局限性及安裝要求

      超聲波液位計的局限性  距離測量、密閉容器內液位檢測、障礙物檢測、透明物體檢測、汽車防撞系統、醫療影像技術等等領域,都是超聲波傳感器大施拳腳的場景。而作為非接觸測量的超聲波液位計,由于具有安裝
    發表于 06-19 11:49

    運算放大器的精度局限性是什么

    日益普遍。本文將介紹運算放大器的精度局限性,以及如何選擇為數不多的有可能達到 1 ppm 精度的運算放大器。另外,我們還將介紹一些針對現有運算放大器局限性的應用改善。
    發表于 03-11 06:10

    貼片機轉塔式結構的優缺點是什么?有什么局限性

    貼片機轉塔式結構的優缺點是什么貼片機轉塔式結構局限性有哪些?
    發表于 04-25 06:12

    基于FPGA的神經網絡的性能評估及局限性

    FPGA實現神經網絡關鍵問題分析基于FPGA的ANN實現方法基于FPGA的神經網絡的性能評估及局限性
    發表于 04-30 06:58

    STM32編程方式在線編程

    、SPI等)下載程序或應用數據到存儲器中STM32允許用戶在應用程序中燒錄FLASH中的內容局限性:使用前需要有bootloader被以ICP方式燒錄進FLASH中前置知識:FLASH結構塊名稱塊基地址大小主存儲器扇區00x08
    發表于 08-19 06:11

    平臺ASIC架構突破傳統ASIC設計局限性

    平臺ASIC架構突破傳統ASIC設計局限性 采用先進半導體工藝,結構化ASIC平臺可以提供更多經預定義、預驗證和預擴散的金屬層,并支持各種存儲器接口,能簡化接口設計
    發表于 12-27 13:33 ?1309次閱讀
    平臺ASIC架構突破<b class='flag-5'>傳統</b>ASIC設計<b class='flag-5'>局限性</b>

    RS-485自動換向電路設計的局限性

    RS-485自動換向電路設計的局限性,RS-485
    發表于 12-21 14:45 ?0次下載

    WSN中LEACH協議局限性的分析與改進

    WSN中LEACH協議局限性的分析與改進(電源技術答案)-WSN中LEACH協議局限性的分析與改進? ? ? ? ? ? ? ?
    發表于 09-15 11:12 ?3次下載
    WSN中LEACH協議<b class='flag-5'>局限性</b>的分析與改進

    采用中頻感應加熱電源進行熱處理有哪些局限性

    采用中頻感應加熱電源進行熱處理有哪些局限性
    的頭像 發表于 03-28 16:43 ?983次閱讀
    采用中頻感應加熱電源<b class='flag-5'>進行</b>熱處理有哪些<b class='flag-5'>局限性</b>?

    千兆光模塊存在哪些局限性

    千兆光模塊,作為網絡設備中常用的一個配件,在實際應用中,由于其存在一定的局限性,可能會對網絡傳輸速度、信號接收等方面產生影響。本文將就千兆光模塊的局限性進行探討,并提供一些可能的解決方案。
    的頭像 發表于 10-16 12:10 ?587次閱讀

    WDM技術的缺點和局限性

    和效率。然而,盡管WDM技術具有諸多優勢,但它也存在一些缺點和局限性。以下是對WDM技術缺點和局限性的詳細分析:
    的頭像 發表于 08-09 11:42 ?835次閱讀
    主站蜘蛛池模板: 久久精品亚洲AV中文2区金莲 | 亚洲 日韩 欧美 国产专区| 樱桃熟了A级毛片| 黄色日本女人| 亚洲精品国偷拍自产在线| 国产成人ae在线观看网站站| 欧美精品成人一区二区在线观看| 最近免费中文字幕大全免费| 久久久综合中文字幕久久| 玉林天天论坛| 美女MM131爽爽爽| 99精品国产在热| 欧美亚洲曰韩一本道| xxxx免费观看| 日韩一卡二卡三卡四卡免费观在线| WINDOWSCHANNEL老太| 日本老师xxxxx18| 二级特黄绝大片免费视频大片| 色姣姣狠狠撩综合网| 国产精品成人无码久免费| 天堂视频在线观看免费完整版| 国产乱妇乱子在线播视频播放网站| 无限资源在线看影院免费观看| 国产亚洲精品久久久久久入口| 亚洲欧美精品无码一区二在线| 精品无码国产自产在线观看水浒传| 亚洲一区免费香蕉在线| 龙腾亚洲人成电影网站| RUNAWAY韩国动漫免费网| 色婷婷99综合久久久精品| 国产麻豆福利AV在线观看| 亚洲日本香蕉视频观看视频| 狼人大香伊蕉国产WWW亚洲| 99精品视频免费在线观看| 日韩av片无码一区二区不卡电影| 国产精品久久人妻拍拍水牛影视| 亚洲日韩天堂在线中文字幕| 蜜芽tv在线观看免费网站| 成人在线视频免费观看| 亚洲 欧美 国产在线视频| 久久内在线视频精品mp4|