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

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

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

3天內不再提示

幾種常見的單片機驅動程序設計模式

科技觀察員 ? 來源:英銳恩 ? 作者:英銳恩 ? 2023-07-10 11:09 ? 次閱讀

單片機開發人員需要掌握的一項基本技能是,了解如何編寫驅動程序。在嵌入式系統中,通常有兩種類型的驅動程序:單片機外圍設備驅動程序和通過I2C,SPI或UART接口連接的外部設備驅動程序。

如今,在許多情況下,單片機供應商都提供了其芯片的示例驅動程序,這些驅動程序可以按原樣使用,或者可能需要進行生產修改。外部驅動程序可能包含偽代碼,但是單片機開發人員幾乎總是自己編寫驅動程序。

針對這個問題,重要的是要意識到,我們有多種方法可以編寫驅動程序,并且編寫驅動程序的方式會極大地影響系統性能,能耗以及我們在開發產品時希望跟蹤的許多其他因素。在本文中,單片機開發工程師將探討幾種常見的單片機驅動程序設計模式,以及它們如何影響應用程序代碼

一、輪詢驅動程序

首先是開發驅動程序,用于對外圍設備進行輪詢以查看其是否準備發送或接收信息。輪詢驅動程序非常易于實現,因為它們通常只輪詢標志而已。例如,模數轉換器ADC)驅動程序可能會啟動轉換序列,然后簡單地阻止處理器執行并不斷檢查ADC完成標志。這段代碼如下所示:

Adc_Start();
while(ADC_COMPLETE_FLAG == FALSE);
AdcResults = Adc_ReadAll();
return AdcResults;

如上面的案例,代碼不斷輪詢ADC_COMPLETE_FLAG,大概將其映射到硬件位,以查看何時有數據可用。在將這樣的硬件測試稱為輪詢時,它會產生一些值得討論的特性。

首先,當我們有一個使用輪詢的驅動程序時,在大多數實現中,該驅動程序將成為阻塞驅動程序。這意味著一旦調用驅動程序,它將不會從驅動程序返回,直到獲得所需的結果為止。在其他實現中,我們只需讓驅動程序檢查一次結果然后返回即可。在這種情況下,應用程序負責輪詢驅動程序,我們將認為驅動程序是非阻塞的。從設計的角度來看,由開發人員決定應在何處進行輪詢。在驅動程序中可以減輕應用程序的負擔,但是如果應用程序這樣做,則可以靈活地執行其他活動并以較低的速率輪詢驅動程序。

接下來,一般來說,輪詢非常容易實現。通常,開發人員所需要做的就是觀察寄存器中的幾位并監視它們,以決定何時與設備進行交互。最后,雖然易于實現,但通常認為輪詢效率低下。其他技術(例如使用中斷)僅在需要執行某些操作時才通知CPU,這會使輪詢效率非常低下。我經常將民意調查與一個長途旅行中坐車的孩子不斷詢問“我們到了嗎?”聯系起來。輪詢不斷問:“你準備好了嗎?現在怎么樣?現在?”。

這使我們可以使用中斷來實現更高效但稍微復雜的驅動程序。

二、中斷驅動程序

在驅動程序中使用中斷非常有用,因為它可以大大提高代碼執行效率。中斷告訴處理器現在已經準備好驅動程序,而我們跳轉以處理該中斷,而不是不斷檢查是否該做某事。通常,我們可以使用兩種類型的中斷驅動程序機制:事件驅動程序和調度程序。當外圍設備中發生需要處理的事件時,事件驅動的驅動程序將觸發中斷。例如,我們可能有一個UART驅動程序,當在緩沖區中接收到新字符時,該驅動程序將觸發中斷。另一方面,我們可能有一個ADC驅動器,該驅動器使用計時器來安排訪問以開始采樣或處理接收到的數據。

使用中斷驅動的驅動程序雖然效率更高,但可能會增加設計的實現復雜性。首先,單片機開發人員需要啟用適當的中斷以在驅動程序中使用,例如接收,發送和緩沖區已滿。我通常發現,由于現代中斷控制器的復雜性,單片機開發人員很難使中斷起作用。它們通常需要在外圍設備級別的通用寄存器中設置中斷,然后有時甚至需要配置優先級和其他設置。幾年前,我整理了有關配置中斷的分步指南,可以在此處下載

接下來,使用中斷可能會導致需要遵循一些額外的因素。例如:

1.中斷時間短;

2.將共享變量聲明為volatile;

3.處理高優先級項目,然后卸載到應用程序進行處理。

誰都不想在驅動程序中發生事件時,執行數千行代碼的中斷。相反,應該處理的是關鍵任務,例如從UART緩沖區中提取字符并將其放入應用程序的循環緩沖區中。

最后,我們還需要擔心諸如中斷被禁用,中斷時序和運行速率,優先級以及是否有可能錯過中斷之類的問題。盡管其中一些項目似乎不值得付出額外的復雜性,但執行時間的改善卻是巨大的。例如,電池供電的設備可以進入深度睡眠模式,僅喚醒后將字符存儲在緩沖區中,然后返回睡眠狀態。這樣做可以節省大量的電量。

在某些情況下,在驅動程序中使用中斷確實是處理外圍事件的最佳方法。例如,您可以編寫一個輪詢的I2C驅動程序,但編寫一個在傳輸序列中發生的不同事件(如ack,nack等)時中斷的驅動程序,則驅動程序將更干凈,更小,更高效。

三、DMA驅動的驅動程序

有些驅動程序會通過I2S和SDIO等系統移動大量數據。在這些類型的接口上管理緩沖區可能需要CPU不斷采取措施。如果CPU落后或必須處理其他系統事件,則數據可能會丟失或延遲,這可能會給用戶帶來明顯的問題,例如音頻跳躍。與吞吐量相關的開發人員可以改用DMA控制器在單片機中為CPU移動數據。

這些驅動程序背后的想法是,DMA控制器可以通過以下方式在單片機周圍移動數據:

(1)外圍到內存;

(2)內存到內存;

(3)內存到外圍。

使用DMA的好處是,當DMA通道為驅動程序移動數據時,CPU可以關閉其他操作,本質上可以同時完成兩件事。

迫切需要在驅動程序中使用DMA控制器以減少執行CPU的需要,但大多數單片機具有有限數量的可用DMA通道。因此,不能將每個驅動程序都編寫為使用DMA。取而代之的是,開發人員需要選擇帶寬受限的外圍設備,這些外圍設備將受益于DMA,例如外部存儲器,ADC和通信通道的接口。

在沒有I2S或SDIO的應用程序中,開發人員可以使用DMA將傳入的UART字符移動到循環緩沖區中,一旦設置了特定限制,該緩沖區將被處理。可以通過輪詢應用程序結構或通過DMA控制器設置中斷來監視此限制。您可以想象,DMA驅動程序是驅動程序最有效的實現,但是根據開發人員的技術水平以及他們以前是否使用過DMA,實現起來也可能很復雜。但是,單片機開發人員可以嘗試在其驅動程序中使用DMA。

結論

在本文中,我們研究了嵌入式開發人員可以用來為單片機外圍設備和外部設備編寫驅動程序的三種主要技術。為了比較地總結這些技術,下表為我們討論的每種技術以及實現的相對復雜性和執行效率。

20200730111732.png

通常,除非使用的外設速度很快(即幾Mbps),否則開發人員默認情況下應在輪詢實現上使用中斷驅動程序實現。DMA可以用于任何驅動程序,但是我通常為需要高吞吐量的接口(例如外部存儲器或通信接口)保留DMA通道。但是,怎么選擇在很大程度上取決于最終應用程序。

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

    關注

    6039

    文章

    44575

    瀏覽量

    636384
  • 驅動程序
    +關注

    關注

    19

    文章

    838

    瀏覽量

    48090
收藏 人收藏

    評論

    相關推薦

    單片機C語言應用程序設計

    單片機C語言應用程序設計針對目前最通用的單片機8051和最流行的程序設計語言——C語言,以KEII。公司8051單片機開發套件講解
    發表于 10-09 17:53 ?171次下載
    <b class='flag-5'>單片機</b>C語言應用<b class='flag-5'>程序設計</b>

    單片機系統中PS/2鍵盤驅動程序的設計

    摘 要:介紹了PS/2協議及PS/2標準鍵盤的第2套掃描碼和命令集,給出了在單片機系統中支持PS/2鍵盤的硬件連接方式以及利用KeilC51語言實現的驅動程序設計和部分代碼.驅動程序單片機
    發表于 07-12 10:13 ?94次下載

    單片機驅動蜂鳴器原理與程序設計

    通過3個單片機驅動蜂鳴器的編程和電路設計,詳細給各位介紹了單片機驅動蜂鳴器電路的程序設計,旨在給各位設計人員一些啟發和幫助,降低開發難度。
    發表于 12-23 14:36 ?8次下載

    單片機系統中PS/2鍵盤驅動程序設計

    本文分析了PS/2協議介紹了PS/2標準鍵盤的第二套掃描碼和命令集,并給出在單片機系統中支持PS/2鍵盤的硬件連接方式和利用Keil C51語言實現的驅動程序設計及部分代碼。
    發表于 03-23 17:17 ?15次下載

    Windows CE驅動程序開發

    驅動開發的幾種基本模式,給出了如何使用單片驅動程序設計方法,提供了提供了平臺特有設備驅動程序開發
    發表于 04-18 10:13 ?0次下載

    單片機驅動步進電機程序設計

    單片機驅動步進電機程序設計,有需要的下來看看
    發表于 04-25 10:10 ?52次下載

    I2C總線的51單片機通用驅動程序

    i2c 51單片機通用驅動程序
    發表于 05-20 10:26 ?28次下載

    基于51單片機驅動程序的調試及應用

    在討論工控組態軟件與外部設備的數據交互途徑的基礎上,針對實際應用中現場設備多種多樣,MCGS所提供的設備驅動程序有限的狀況,設計了基于應用極為廣泛的5l系列單片機外部設備的通用驅動程序,并在步進電機
    發表于 09-25 16:22 ?4次下載
    基于51<b class='flag-5'>單片機</b><b class='flag-5'>驅動程序</b>的調試及應用

    基于C8051F020的驅動程序設計

    簡單介紹了MCGS組態軟件和C8051F020單片機的特點。并以基于C8051F020單片機設計的廠房燈光控制器被背景,詳細闡述了開發基于MCGS的C8051F020單片機驅動程序的方
    發表于 09-25 17:20 ?22次下載
    基于C8051F020的<b class='flag-5'>驅動程序設計</b>

    PIC系列單片機程序設計基礎

    PIC系列單片機程序設計基礎
    發表于 10-16 14:27 ?9次下載
    PIC系列<b class='flag-5'>單片機</b><b class='flag-5'>程序設計</b>基礎

    PIC單片機原理與程序設計

    PIC單片機原理與程序設計
    發表于 10-16 14:57 ?16次下載
    PIC<b class='flag-5'>單片機</b>原理與<b class='flag-5'>程序設計</b>

    WinCE流驅動程序設計概述

    WinCE流驅動程序設計概述
    發表于 10-25 09:46 ?7次下載
    WinCE流<b class='flag-5'>驅動程序設計</b>概述

    單片機碼表的驅動程序免費下載

    本文檔的主要內容詳細介紹的是單片機碼表的驅動程序免費下載。
    發表于 08-28 17:29 ?0次下載
    <b class='flag-5'>單片機</b>碼表的<b class='flag-5'>驅動程序</b>免費下載

    單片機C語言程序設計教程

    單片機C語言程序設計教程免費下載。
    發表于 04-15 11:12 ?75次下載

    AD7780-適用于單片機平臺的無操作系統驅動程序

    AD7780-適用于單片機平臺的無操作系統驅動程序
    發表于 05-20 13:37 ?11次下載
    AD7780-適用于<b class='flag-5'>單片機</b>平臺的無操作系統<b class='flag-5'>驅動程序</b>
    主站蜘蛛池模板: 门鱼电影完整版免费版| 成人国产在线观看| 秘密教学26我们在做一次吧免费 | 男插女高潮一区二区| 国产永久免费视频| 被cao的奶水直喷高H| 影音先锋av333资源网| 性xxxx18公交车| 日本久久久久久久做爰片日本| 久久久中日AB精品综合| 国产精品爽黄69天堂A片| younv 学生国产在线视频| 最新国产精品视频免费看| 亚洲精品成人| 我的家庭女教师| 人妻熟女斩五十路0930 | 国产精品亚洲二线在线播放| 99久久精品免费看国产免费| 又色又爽又黄gif动态视频| 亚洲精品成人AV在线观看爽翻| 首页 国产 亚洲 中文字幕| 欧美一区二区三区免费播放| 麻豆天美国产一区在线播放| 久久成人午夜电影mp4| 国精产品一区一区三区M| 国产跪地吃黄金喝圣水合集| 成人在线视频网站| a毛片基地免费全部视频| 24小时日本在线| 中文在线无码高潮潮喷在线| 一起洗澡的老师免费播放| 亚洲欧洲无码AV在线观看你懂的| 玩50岁四川熟女大白屁股直播| 日产精品久久久久久久蜜殿| 青娱乐在线一区| 情浓野战台湾三级| 欧美日韩永久久一区二区三区| 男同志video最新猛男| 男生J桶进女人P又色又爽又黄| 免费毛片在线视频| 女教师の诱惑|