91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

如何在Zephyr RTOS中實(shí)現(xiàn)延時(shí)和計(jì)時(shí)函數(shù)

恩智浦MCU加油站 ? 來源:恩智浦MCU加油站 ? 2025-12-26 10:32 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

在實(shí)時(shí)操作系統(tǒng)(RTOS)中,時(shí)間管理是核心功能之一。無論是任務(wù)調(diào)度、超時(shí)控制,還是周期性事件,延時(shí)和計(jì)時(shí)機(jī)制都扮演著至關(guān)重要的角色。Zephyr RTOS作為一個(gè)輕量級、模塊化的開源系統(tǒng),提供了多種延時(shí)與計(jì)時(shí)實(shí)現(xiàn)方案,滿足不同應(yīng)用場景的需求。那么,大家平時(shí)都是怎么在MCU程序中實(shí)現(xiàn)計(jì)時(shí)函數(shù)、實(shí)現(xiàn)延時(shí)的呢?

小編先來說說自己的做法,一般在裸機(jī)開發(fā)中,小編會(huì)利用systick中斷實(shí)現(xiàn)一個(gè)ms級中斷服務(wù),然后利用這個(gè)函數(shù)做一些計(jì)時(shí)相關(guān)實(shí)現(xiàn)。那么,如果是RTOS的應(yīng)用場景,那就開心許多了,我們可以直接利用RTOS自帶的一些時(shí)間函數(shù)來實(shí)現(xiàn)功能。

剛好小編最近正在做一個(gè)關(guān)于Zephyr的小項(xiàng)目,那么本期就給大家分享下如何在Zephyr實(shí)現(xiàn)相關(guān)操作。

方法一:使用內(nèi)核NPI

#include
#include


voiddelay_and_print(void)
{
 // 獲取當(dāng)前系統(tǒng)tick(64位精度)
 int64_tstart_ticks =k_uptime_ticks();
 printk("Start ticks: %lld
", start_ticks);


 // 延時(shí)500ms(線程安全,會(huì)觸發(fā)調(diào)度)
 k_msleep(500);


 // 獲取延時(shí)后的tick
 int64_tend_ticks =k_uptime_ticks();
 printk("End ticks: %lld (Elapsed: %lld)
",
     end_ticks, end_ticks - start_ticks);
}

方法二:忙等待

#include
#include


voidbusy_delay_print(void)
{
 uint32_tstart =k_cycle_get_32();
 printk("Start cycles: %u
", start);


 // 忙等待10ms(精確但占用CPU)
 k_busy_wait(10*1000);// 參數(shù)為微秒


 uint32_tend =k_cycle_get_32();
 printk("End cycles: %u (Delta: %u)
",
     end, end - start);
}

API說明:

d4612c2e-dbab-11f0-8c8f-92fbcf53809c.png

接下來是時(shí)間單位轉(zhuǎn)換,有時(shí)候我們并不想直接用ticks來表示時(shí)間,我們還是想要用時(shí)間單位來表示,例如ms,那我們來看看怎么進(jìn)行tick to ms的轉(zhuǎn)換:

// Tick轉(zhuǎn)毫秒
uint64_tticks_to_ms(uint64_tticks){
 return(ticks *1000) /sys_clock_hw_cycles_per_sec();
}

下面是一個(gè)實(shí)際應(yīng)用示例:

voidperiodic_task(void)
{
 while(1) {
   int64_ttick =k_uptime_ticks();
   printk("[%lld] Sensor sampling...
", tick);
   // 固定頻率執(zhí)行(不受任務(wù)執(zhí)行時(shí)間影響)
   k_msleep(100- (k_uptime_ticks() - tick));
  }
}
K_THREAD_DEFINE(sensor_thread,512, periodic_task,NULL,NULL,NULL,7,0,0);

這樣一來我們實(shí)現(xiàn)了定時(shí)函數(shù),可以根據(jù)具體需求選擇合適的方案,對于大多數(shù)應(yīng)用場景,`k_msleep()` + `k_uptime_ticks()`的組合就能夠滿足我們的需求了,推薦大家多多使用。

延時(shí)與計(jì)時(shí)不僅僅是“等待”,它是實(shí)時(shí)系統(tǒng)穩(wěn)定運(yùn)行的基石。Zephyr RTOS通過內(nèi)核tick、定時(shí)器API以及高精度時(shí)鐘機(jī)制,為開發(fā)者提供了靈活且高效的時(shí)間管理方案。理解這些實(shí)現(xiàn)原理,不僅能幫助我們編寫更可靠的代碼,還能在資源受限的嵌入式環(huán)境中實(shí)現(xiàn)最佳性能。

未來,隨著更多應(yīng)用對低功耗和高精度的要求,Zephyr的時(shí)間管理機(jī)制將繼續(xù)演進(jìn),成為嵌入式開發(fā)的重要工具。

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

    關(guān)注

    147

    文章

    18924

    瀏覽量

    398018
  • 函數(shù)
    +關(guān)注

    關(guān)注

    3

    文章

    4417

    瀏覽量

    67499
  • RTOS
    +關(guān)注

    關(guān)注

    25

    文章

    866

    瀏覽量

    122975
  • Zephyr
    +關(guān)注

    關(guān)注

    0

    文章

    58

    瀏覽量

    6579

原文標(biāo)題:在Zephyr RTOS中延時(shí)和計(jì)時(shí)函數(shù)的實(shí)現(xiàn)方案介紹

文章出處:【微信號(hào):NXP_SMART_HARDWARE,微信公眾號(hào):恩智浦MCU加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點(diǎn)推薦

    當(dāng)RA MCU遇見Zephyr系列(3)——在Vs code配置Zephyr集成開發(fā)環(huán)境

    RA生態(tài)工作室關(guān)注我們上一篇文章介紹了如何在VScode中使用瑞薩官方插件為RA芯片創(chuàng)建項(xiàng)目與項(xiàng)目調(diào)試,相信大家對RA在VScode的開發(fā)有了基礎(chǔ)的了解。當(dāng)RAMCU遇見Zephyr,打通
    的頭像 發(fā)表于 01-01 10:04 ?4835次閱讀
    當(dāng)RA MCU遇見<b class='flag-5'>Zephyr</b>系列(3)——在Vs  code<b class='flag-5'>中</b>配置<b class='flag-5'>Zephyr</b>集成開發(fā)環(huán)境

    【瑞薩RA × Zephyr評測】Zephyr RTOS保姆級環(huán)境構(gòu)建與編譯下載踩坑版

    筆者介紹一下Zephyr RTOS 保姆級環(huán)境構(gòu)建與編譯下載
    的頭像 發(fā)表于 01-10 10:03 ?8030次閱讀
    【瑞薩RA × <b class='flag-5'>Zephyr</b>評測】<b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>保姆級環(huán)境構(gòu)建與編譯下載踩坑版

    何在RTOS SDK中將FRC1計(jì)時(shí)器附加到NMI的信息?

    我一直在尋找有關(guān)如何在 RTOS SDK 中將 FRC1 計(jì)時(shí)器附加到 NMI 的信息。我已經(jīng)找到了 NON-OS SDK 所需的內(nèi)容,但我找不到 RTOS SDK 的 NON-OS
    發(fā)表于 07-10 08:32

    UCOS延時(shí)函數(shù)怎么協(xié)調(diào)?

    我是UCOS初學(xué)者,以前也沒有學(xué)過任何RTOS,望大神說的仔細(xì)些。我所理解的UCOS任務(wù)調(diào)度都是在延時(shí)函數(shù)實(shí)現(xiàn)的,假設(shè)我定義了三個(gè)
    發(fā)表于 04-07 22:13

    在MCU編程STM32延時(shí)函數(shù)如何去實(shí)現(xiàn)

    【STM32筆記】[sub]STM32 延時(shí)函數(shù)實(shí)現(xiàn)在MCU編程,微秒延時(shí)和毫秒延時(shí)使用最為
    發(fā)表于 08-24 07:55

    何在IAR實(shí)現(xiàn)printf函數(shù)功能?

    何在IAR實(shí)現(xiàn)printf函數(shù)功能?
    發(fā)表于 12-01 06:29

    Zephyr與FreeRTOS實(shí)時(shí)性測試比較

    時(shí)間是其它指標(biāo)的基礎(chǔ),因此以任務(wù)切換時(shí)間為例,分析兩個(gè)系統(tǒng)在實(shí)現(xiàn)上的差異。目前Zephyr任務(wù)切換時(shí)間為6.9微秒,F(xiàn)reeRTOS為2.2微秒。分析比較代碼后得出,Zephyr設(shè)計(jì)時(shí)
    發(fā)表于 08-19 16:12

    RTOS操作系統(tǒng)HOOK函數(shù)有什么用途?

    在很多操作系統(tǒng),都存在這樣一類API(函數(shù)接口):HOOK函數(shù),也叫鉤子函數(shù)。 比如:Windows桌面系統(tǒng)、μC/OS、 FreeRTOS等RT
    的頭像 發(fā)表于 03-29 11:28 ?2397次閱讀
    <b class='flag-5'>RTOS</b>操作系統(tǒng)<b class='flag-5'>中</b>HOOK<b class='flag-5'>函數(shù)</b>有什么用途?

    STM32精確延時(shí)函數(shù)實(shí)現(xiàn)

    在與傳感器或者模塊的總線進(jìn)行通信的時(shí)候,常常需要使用到精確延時(shí),一般我們會(huì)封裝幾個(gè)常用延時(shí)函數(shù),下面我們以STM32F103芯片為例,詳細(xì)介紹一下STM32下一種精確延時(shí)
    發(fā)表于 11-24 18:51 ?12次下載
    STM32<b class='flag-5'>中</b>精確<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>的<b class='flag-5'>實(shí)現(xiàn)</b>

    嵌入式軟件延時(shí)函數(shù)

    延時(shí)函數(shù)是嵌入式軟件開發(fā)必不可少的功能函數(shù),在每個(gè)工程里都能找到它的蹤影。雖然看起來不起眼,但在有些時(shí)序控制的場合,使用了一點(diǎn)點(diǎn)delay,往往能解決大問題。下面描述一下delay
    發(fā)表于 11-24 19:21 ?19次下載
    嵌入式軟件<b class='flag-5'>中</b>的<b class='flag-5'>延時(shí)</b><b class='flag-5'>函數(shù)</b>

    Zephyr RTOS和HC-SR04超聲波傳感器開源

    電子發(fā)燒友網(wǎng)站提供《Zephyr RTOS和HC-SR04超聲波傳感器開源.zip》資料免費(fèi)下載
    發(fā)表于 06-20 09:44 ?4次下載
    <b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>和HC-SR04超聲波傳感器開源

    使用Zephyr RTOS的碳漫游者

    電子發(fā)燒友網(wǎng)站提供《使用Zephyr RTOS的碳漫游者.zip》資料免費(fèi)下載
    發(fā)表于 06-28 14:54 ?3次下載
    使用<b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>的碳漫游者

    深入解析Zephyr RTOS的技術(shù)細(xì)節(jié)

    ,Zephyr OS在嵌入式開發(fā)的知名度逐漸增加,新的微控制器和開發(fā)板都支持Zephyr。本文將深入討論Zephyr RTOS的技術(shù)細(xì)節(jié)。
    的頭像 發(fā)表于 10-22 16:47 ?4460次閱讀
    深入解析<b class='flag-5'>Zephyr</b> <b class='flag-5'>RTOS</b>的技術(shù)細(xì)節(jié)

    詳解RTOS的Hook函數(shù)

    Hook函數(shù)RTOS的一個(gè)關(guān)鍵特性,通過該函數(shù),用戶可以增強(qiáng)對任務(wù)管理的控制,定義系統(tǒng)行為。
    的頭像 發(fā)表于 03-24 16:14 ?1077次閱讀

    IAR平臺(tái)現(xiàn)已提供對Zephyr RTOS的量產(chǎn)級支持

    IAR宣布,其嵌入式開發(fā)平臺(tái)正式推出對Zephyr RTOS的量產(chǎn)級支持。該支持自IAR的Arm開發(fā)工具鏈v9.70起全面提供。
    的頭像 發(fā)表于 07-09 15:43 ?579次閱讀