• <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频|成人a站免费|日本黄色片|久久久久无码AV

    技術(shù)熱線: 4007-888-234
    設(shè)計開發(fā)

    專注差異化嵌入式產(chǎn)品解決方案 給智能產(chǎn)品定制注入靈魂給予生命

    開發(fā)工具

    提供開發(fā)工具、應(yīng)用測試 完善的開發(fā)代碼案例庫分享

    技術(shù)支持

    從全面的產(chǎn)品導(dǎo)入到強大技術(shù)支援服務(wù) 全程貼心伴隨服務(wù),創(chuàng)造無限潛能!

    新品推廣

    提供新的芯片及解決方案,提升客戶產(chǎn)品競爭力

    新聞中心

    提供最新的單片機資訊,行業(yè)消息以及公司新聞動態(tài)

    單片機開發(fā):5種延遲代碼執(zhí)行的技術(shù)

    更新時間: 2020-10-16
    閱讀量:5844

    在單片機項目開發(fā)過程中,經(jīng)常會出現(xiàn)一個有趣的問題,即弄清楚如何延遲代碼執(zhí)行。有時,單片機開發(fā)人員可能只是希望有10微秒的延遲,以使I/O線在讀取之前穩(wěn)定下來,或者可能希望在兩次讀取之間指定的時間間隔使它反跳。在本文中,我們將探討五種延遲代碼執(zhí)行的技術(shù)。

    一、條件循環(huán)

    第一種技術(shù)是使用條件循環(huán)(可能是最常用和最簡單的)。條件循環(huán)延遲通常會使用for、while或do while循環(huán)重復(fù)執(zhí)行無操作(NOP)指令。例如:

    for(int i = 0; i < 100000; i++)
    {
       __NOP();
    }

    條件延遲在緊要關(guān)頭可能會很有用,但很難準確或有效。如果開發(fā)人員要針對其他操作模式(例如低功耗操作)調(diào)整時鐘頻率,則延遲時間將完全不同。另外,總會有一個問題,那就是到底有多長時間?有人可能會認為這是100000條指令,但是每次通過循環(huán)時,都會有其他指令來檢查循環(huán)變量并遞增i。這些時序循環(huán)對于在任何生產(chǎn)代碼中使用來說都是不可預(yù)測的。

    單片機開發(fā)

    二、使用計時器

    可以使用的第二種技術(shù)是利用單片機內(nèi)置的硬件計時器。通常有幾種不同的硬件計時器可用于跟蹤系統(tǒng)時間,生成波形,捕獲輸入和通用。如果開發(fā)人員需要延遲(例如10微秒),則可以向硬件計時器加載表示10微秒的計數(shù)值。在這種情況下,計時器將設(shè)置為單次計時器。該代碼將啟動計時器并等待計時器溢出標志被設(shè)置,然后該標志將指示時間已過。

    該代碼類似于以下內(nèi)容:

    Timer_Reload (DELAY_VALUE );
    while(Timer_Expired ()== false )  
    {
       __NOP ();
    }

    這種技術(shù)比條件循環(huán)要強大得多。它還具有更高的靈活性,并且可以更輕松地針對所需的延遲時間進行調(diào)整。實際上,可以在整個代碼中重用該API,以允許單個計時器用于所需的任何數(shù)量的延遲。

    三、使用系統(tǒng)刻度(HAL示例)

    在某些情況下,可能沒有專用的硬件計時器。在這種情況下,單片機開發(fā)人員可以利用板載系統(tǒng)時鐘來創(chuàng)建延遲。即使是裸機系統(tǒng),通常也具有作為系統(tǒng)時鐘的后臺計時器,以便從單片機啟動的那一刻起,軟件就具有時間參考。通常,在典型系統(tǒng)中,將這些系統(tǒng)時鐘設(shè)置為每1或10毫秒發(fā)生一次。

    系統(tǒng)通常使用一些API,這些API允許開發(fā)人員訪問當(dāng)前的系統(tǒng)刻度,例如SysTick_Get()。開發(fā)人員可以利用此延遲來創(chuàng)建類似于以下內(nèi)容的延遲:

    TimeStart = SysTick_Get();
     
    do
    {
       TimeNow = SysTick_Get();
       TimeDelta = TimeNow – TimeStart;
    }while(TimeDelta < DelayTime);

    單片機開發(fā)人員只需要確保如果他們這樣做,就不會陷入計算問題或其他潛在問題中,因此應(yīng)檢查邊界條件。

    單片機開發(fā)

    四、使用RTOS產(chǎn)量函數(shù)

    在使用實時操作系統(tǒng)(RTOS)的更高級的系統(tǒng)中,開發(fā)人員可以利用內(nèi)置的RTOS API調(diào)用來產(chǎn)生創(chuàng)建延遲的任務(wù)。例如,如果開發(fā)人員正在使用FreeRTOS,則在他們的任務(wù)中他們可以使用如下代碼:

    VTaskDelay (1);

    此延遲功能將使任務(wù)產(chǎn)生一個RTOS滴答聲的當(dāng)前任務(wù)。取決于配置,RTOS滴答可以設(shè)置為1毫秒或10。使用這樣的延遲機制可能會出現(xiàn)問題,因為任務(wù)將在該時間段內(nèi)產(chǎn)生CPU,但不能保證一旦系統(tǒng)滴答時間到期,該任務(wù)將是最高優(yōu)先級的任務(wù)!如果任務(wù)是準備運行的最高優(yōu)先級任務(wù),則該任務(wù)僅在延遲后立即運行,因此延遲時間可能會有些抖動。

    五、使用RTOS對象

    使用RTOS對象來延遲時間。如果你仔細查看自己喜歡的RTOS中的對象(例如信號量、互斥對象和隊列)的API,你會注意到大多數(shù)等待等待的API調(diào)用還將包含延遲時間。此延遲時間也可導(dǎo)致應(yīng)用程序延遲。

    與RTOS對象相關(guān)的是,大多數(shù)RTOS都還包含軟定時器。這些是基于軟件的計時器,是從運行中的硬件計時器觸發(fā)的。然后,可以將與上面第一、二點中顯示的技術(shù)相似的技術(shù)與這些軟計時器一起使用,以在代碼執(zhí)行中產(chǎn)生延遲。

    單片機開發(fā)人員想要延遲代碼執(zhí)行,可以使用多種不同的技術(shù),使用的技術(shù)將取決于系統(tǒng)中可用的軟件和硬件資源。然后,開發(fā)人員可以決定他們要使用的解決方案的復(fù)雜程度。總之,肯定有很多種機制可以幫助將代碼執(zhí)行延遲一定的時間。

    以上就是英銳恩單片機開發(fā)工程師分享的單片機開發(fā)過程中5種延遲代碼執(zhí)行的技術(shù)。英銳恩專注單片機應(yīng)用方案設(shè)計與開發(fā),同時提供8位單片機、16位單片機、32位單片機、運放芯片和模擬開關(guān)。如果你需要更多單片機方案產(chǎn)品的信息,請撥打官網(wǎng)電話:4007-888-234,或點擊“在線咨詢”,我們的客服人員將為你提供更詳細的解答。

    單片機方案開發(fā)

    久久黄色 视频|我草AV|AV在线网站导航|色色97激情|无码人妻一区二区有奶水|日韩精品|大香蕉97视频
  • <tbody id="w8jhq"><dfn id="w8jhq"><pre id="w8jhq"></pre></dfn></tbody>
  • <fieldset id="w8jhq"><pre id="w8jhq"></pre></fieldset>