在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

幾種常見的單片機(jī)驅(qū)動程序設(shè)計模式

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

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

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

針對這個問題,重要的是要意識到,我們有多種方法可以編寫驅(qū)動程序,并且編寫驅(qū)動程序的方式會極大地影響系統(tǒng)性能,能耗以及我們在開發(fā)產(chǎn)品時希望跟蹤的許多其他因素。在本文中,單片機(jī)開發(fā)工程師將探討幾種常見的單片機(jī)驅(qū)動程序設(shè)計模式,以及它們?nèi)绾斡绊憫?yīng)用程序代碼

一、輪詢驅(qū)動程序

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

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

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

首先,當(dāng)我們有一個使用輪詢的驅(qū)動程序時,在大多數(shù)實現(xiàn)中,該驅(qū)動程序?qū)⒊蔀樽枞?qū)動程序。這意味著一旦調(diào)用驅(qū)動程序,它將不會從驅(qū)動程序返回,直到獲得所需的結(jié)果為止。在其他實現(xiàn)中,我們只需讓驅(qū)動程序檢查一次結(jié)果然后返回即可。在這種情況下,應(yīng)用程序負(fù)責(zé)輪詢驅(qū)動程序,我們將認(rèn)為驅(qū)動程序是非阻塞的。從設(shè)計的角度來看,由開發(fā)人員決定應(yīng)在何處進(jìn)行輪詢。在驅(qū)動程序中可以減輕應(yīng)用程序的負(fù)擔(dān),但是如果應(yīng)用程序這樣做,則可以靈活地執(zhí)行其他活動并以較低的速率輪詢驅(qū)動程序。

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

這使我們可以使用中斷來實現(xiàn)更高效但稍微復(fù)雜的驅(qū)動程序。

二、中斷驅(qū)動程序

在驅(qū)動程序中使用中斷非常有用,因為它可以大大提高代碼執(zhí)行效率。中斷告訴處理器現(xiàn)在已經(jīng)準(zhǔn)備好驅(qū)動程序,而我們跳轉(zhuǎn)以處理該中斷,而不是不斷檢查是否該做某事。通常,我們可以使用兩種類型的中斷驅(qū)動程序機(jī)制:事件驅(qū)動程序和調(diào)度程序。當(dāng)外圍設(shè)備中發(fā)生需要處理的事件時,事件驅(qū)動的驅(qū)動程序?qū)⒂|發(fā)中斷。例如,我們可能有一個UART驅(qū)動程序,當(dāng)在緩沖區(qū)中接收到新字符時,該驅(qū)動程序?qū)⒂|發(fā)中斷。另一方面,我們可能有一個ADC驅(qū)動器,該驅(qū)動器使用計時器來安排訪問以開始采樣或處理接收到的數(shù)據(jù)。

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

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

1.中斷時間短;

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

3.處理高優(yōu)先級項目,然后卸載到應(yīng)用程序進(jìn)行處理。

誰都不想在驅(qū)動程序中發(fā)生事件時,執(zhí)行數(shù)千行代碼的中斷。相反,應(yīng)該處理的是關(guān)鍵任務(wù),例如從UART緩沖區(qū)中提取字符并將其放入應(yīng)用程序的循環(huán)緩沖區(qū)中。

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

在某些情況下,在驅(qū)動程序中使用中斷確實是處理外圍事件的最佳方法。例如,您可以編寫一個輪詢的I2C驅(qū)動程序,但編寫一個在傳輸序列中發(fā)生的不同事件(如ack,nack等)時中斷的驅(qū)動程序,則驅(qū)動程序?qū)⒏蓛簦。咝А?/p>

三、DMA驅(qū)動的驅(qū)動程序

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

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

(1)外圍到內(nèi)存;

(2)內(nèi)存到內(nèi)存;

(3)內(nèi)存到外圍。

使用DMA的好處是,當(dāng)DMA通道為驅(qū)動程序移動數(shù)據(jù)時,CPU可以關(guān)閉其他操作,本質(zhì)上可以同時完成兩件事。

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

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

結(jié)論

在本文中,我們研究了嵌入式開發(fā)人員可以用來為單片機(jī)外圍設(shè)備和外部設(shè)備編寫驅(qū)動程序的三種主要技術(shù)。為了比較地總結(jié)這些技術(shù),下表為我們討論的每種技術(shù)以及實現(xiàn)的相對復(fù)雜性和執(zhí)行效率。

20200730111732.png

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

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6043

    文章

    44621

    瀏覽量

    638559
  • 驅(qū)動程序
    +關(guān)注

    關(guān)注

    19

    文章

    848

    瀏覽量

    48214
收藏 人收藏

    評論

    相關(guān)推薦

    單片機(jī)系統(tǒng)中PS/2鍵盤驅(qū)動程序的設(shè)計

    摘 要:介紹了PS/2協(xié)議及PS/2標(biāo)準(zhǔn)鍵盤的第2套掃描碼和命令集,給出了在單片機(jī)系統(tǒng)中支持PS/2鍵盤的硬件連接方式以及利用KeilC51語言實現(xiàn)的驅(qū)動程序設(shè)計和部分代碼.驅(qū)動程序單片機(jī)
    發(fā)表于 07-12 10:13 ?94次下載

    單片機(jī)驅(qū)動蜂鳴器原理與程序設(shè)計

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

    單片機(jī)系統(tǒng)中PS/2鍵盤驅(qū)動程序設(shè)計

    本文分析了PS/2協(xié)議介紹了PS/2標(biāo)準(zhǔn)鍵盤的第二套掃描碼和命令集,并給出在單片機(jī)系統(tǒng)中支持PS/2鍵盤的硬件連接方式和利用Keil C51語言實現(xiàn)的驅(qū)動程序設(shè)計及部分代碼。
    發(fā)表于 03-23 17:17 ?15次下載

    Windows CE驅(qū)動程序開發(fā)

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

    單片機(jī)驅(qū)動步進(jìn)電機(jī)程序設(shè)計

    單片機(jī)驅(qū)動步進(jìn)電機(jī)程序設(shè)計,有需要的下來看看
    發(fā)表于 04-25 10:10 ?52次下載

    I2C總線的51單片機(jī)通用驅(qū)動程序

    i2c 51單片機(jī)通用驅(qū)動程序
    發(fā)表于 05-20 10:26 ?28次下載

    基于51單片機(jī)驅(qū)動程序的調(diào)試及應(yīng)用

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

    基于C8051F020的驅(qū)動程序設(shè)計

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

    PIC系列單片機(jī)程序設(shè)計基礎(chǔ)

    PIC系列單片機(jī)程序設(shè)計基礎(chǔ)
    發(fā)表于 10-16 14:27 ?9次下載
    PIC系列<b class='flag-5'>單片機(jī)</b><b class='flag-5'>程序設(shè)計</b>基礎(chǔ)

    PIC單片機(jī)原理與程序設(shè)計

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

    WinCE流驅(qū)動程序設(shè)計概述

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

    單片機(jī)碼表的驅(qū)動程序免費下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是單片機(jī)碼表的驅(qū)動程序免費下載。
    發(fā)表于 08-28 17:29 ?0次下載
    <b class='flag-5'>單片機(jī)</b>碼表的<b class='flag-5'>驅(qū)動程序</b>免費下載

    單片機(jī)C語言程序設(shè)計教程

    單片機(jī)C語言程序設(shè)計教程免費下載。
    發(fā)表于 04-15 11:12 ?78次下載

    AD7780-適用于單片機(jī)平臺的無操作系統(tǒng)驅(qū)動程序

    AD7780-適用于單片機(jī)平臺的無操作系統(tǒng)驅(qū)動程序
    發(fā)表于 05-20 13:37 ?11次下載
    AD7780-適用于<b class='flag-5'>單片機(jī)</b>平臺的無操作系統(tǒng)<b class='flag-5'>驅(qū)動程序</b>

    單片機(jī)驅(qū)動程序是什么,驅(qū)動文件組成。

    .應(yīng)用程序只負(fù)責(zé)在適當(dāng)?shù)臅r間做適當(dāng)?shù)氖?到六點了,要開燈了,觸發(fā)按鍵信號);具體它不用知道為什么按下鍵就能開燈,因為按下鍵后開燈的事情就是驅(qū)動程序完成了,驅(qū)動程序再去控制硬件管腳發(fā)出高低電平信號去
    發(fā)表于 11-23 17:06 ?14次下載
    <b class='flag-5'>單片機(jī)</b><b class='flag-5'>驅(qū)動程序</b>是什么,<b class='flag-5'>驅(qū)動</b>文件組成。
    主站蜘蛛池模板: 看免费黄色大片 | 天天插天天干 | 最近最新视频中文字幕4 | 人人射人人 | 免费 视频| 亚洲国产成人va在线观看 | 五月天婷婷免费观看视频在线 | 可以免费看的黄色片 | 黄色福利站 | 色男人在线 | 天堂种子| 小屁孩cao大人免费网站 | 日本www色视频 | 一级片a | 男人不识本网站上遍色站也枉然 | 亚洲精品久久婷婷爱久久婷婷 | bt在线搜索 | 欧美在线性| 人人澡人人草 | 狠狠色狠狠色综合日日不卡 | 午夜美女视频在线观看高清 | 久久精品国产大片免费观看 | 亚洲成人网在线观看 | 视频在线一区二区 | 深爱五月婷婷 | 成人夜夜嗨 | heyzo在线播放4k岛国 | 人人做天天爱夜夜爽中字 | 久久综合综合久久 | 天天看天天干 | 色多多在线观看视频 | 成人看的午夜免费毛片 | 东莞a级毛片 | www你懂的| 人人插人人爽 | 亚洲情a成黄在线观看 | 1024视频色版在线网站 | 亚洲免费成人 | 午夜神马 | 欧美另类高清xxxxx | 色婷婷综合和线在线 |