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

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

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

3天內不再提示

Linux驅動開發高精度定時器的精度測量評測

Rice嵌入式開發技術分享 ? 來源: Rice嵌入式開發技術分享 ? 作者: Rice嵌入式開發技 ? 2022-08-09 11:17 ? 次閱讀

前言

  • 今天我們來評測linux內核的高精度定時器。順便利用通過Tektronix示波器 和 DS100 Mini 數字示波器進行交叉測試。
  • 因項目需要用到精準的時間周期,所以要評估它的可行性,并驗證正點原子的示波器能不能支撐嵌入式開發流程。

Linux高精度定時器說明

  • 其實傳統的低分辨率定時器隨著技術的演進,已經無法滿足開發需求。而且硬件的不斷發展,硬件定時器的精度也越來越高,這也給高精度定時器創建了有利條件。
  • 低分辨率的定時大部分時間復雜度可以實現O(1),當有進位發生時,不可預測的O(N)定時器級聯遷移時間,影響定時器的精度。
  • 低分率的定時器可以說在超時應用場景上更加合適,以超時為目的,期望在超時到來之前獲得正確的結果的場景,應用低分辨率的定時器適合不過。
  • 為了滿足技術的演進及定時器的精度要求,Linux內核為高精度定時器重新設計了一套軟件架構,它可以為我們提供納秒級的定時器精度,以滿足我們開發需求。精度如何實測才知道。。。。

Linux高精度定時器驅動編寫

  • 為了驗證高精度定時器的分辨率,我們寫一個簡單的內核驅動(功能:在設定的周期內反轉IO,然后通過示波器測量精度)。

  • 高精度定時器使用步驟:

  1. 初始化定時器工作模式:hrtimer_init(&kthread_timer, CLOCK_MONOTONIC, HRTIMER_MODE_REL);
  2. 設置定時器的回調函數:kthread_timer.function = hrtimer_cb_func;
  3. 啟動定時器:hrtimer_start(&kthread_timer, ktime_set(HRTIMER_TEST_CYCLE), HRTIMER_MODE_REL);
  4. 在定時器回調函數中,增加定時到期時間:hrtimer_forward(timer, timer->base->get_time(), ktime_set(HRTIMER_TEST_CYCLE));
  • 內核驅動模塊代碼模塊實現:
#include"hrtimer_test.h"

#defineHRTIMER_TEST_PIN7

#defineHRTIMER_TEST_CYCLE0,(100000/2)

#defineDEVICE_NAME"HRTIMER_TEST"
#defineCLASS_NAME"HRTIMER_TEST"

intmajor_number;
structdevice*device;
structclass*class;
staticstructhrtimerkthread_timer;
intvalue=0;

enumhrtimer_restarthrtimer_cb_func(structhrtimer*timer){
ChipBspGpio_ExportSet(ULTRASONIC_TEST_PIN,value);
value=!value;

hrtimer_forward(timer,timer->base->get_time(),ktime_set(HRTIMER_TEST_CYCLE));
returnHRTIMER_RESTART;
}

voidkthread_hrtimer_init(void){
hrtimer_init(&kthread_timer,CLOCK_MONOTONIC,HRTIMER_MODE_REL);
kthread_timer.function=hrtimer_cb_func;
hrtimer_start(&kthread_timer,ktime_set(HRTIMER_TEST_CYCLE),HRTIMER_MODE_REL);
}

staticint__inithrtimer_test_init(void){
printk(KERN_ALERT"hrtimer_test:Init!!\n");

major_number=register_chrdev(0,DEVICE_NAME,NULL);

if(major_number0){
printk(KERN_ALERT"hrtimer_test:Registerfail!\n");
returnmajor_number;
}

printk(KERN_ALERT"Registesuccess,majornumberis%d\n",major_number);

class=class_create(THIS_MODULE,CLASS_NAME);

if(IS_ERR(class)){
unregister_chrdev(major_number,DEVICE_NAME);
returnPTR_ERR(class);
}

device=device_create(class,NULL,MKDEV(major_number,0),NULL,DEVICE_NAME);

if(IS_ERR(device)){
class_destroy(class);
unregister_chrdev(major_number,DEVICE_NAME);
returnPTR_ERR(device);
}

printk(KERN_ALERT"hrtimer_test:initsuccess!!\n");

kthread_hrtimer_init();

return0;
}

staticvoid__exithrtimer_test_exit(void){

hrtimer_cancel(&kthread_timer);

device_destroy(class,MKDEV(major_number,0));
class_unregister(class);
class_destroy(class);
unregister_chrdev(major_number,DEVICE_NAME);

printk(KERN_ALERT"hrtimer_test:exitsuccess!!\n");
}

module_init(hrtimer_test_init);
module_exit(hrtimer_test_exit);

MODULE_AUTHOR("RieChen");
MODULE_LICENSE("GPL");

  • 該驅動模塊主要功能:在定時器回調函數中,周期性反轉GPIO,然后查看其定時器精度。其中宏定義(HRTIMER_TEST_CYCLE)為定時的周期。

Linux高精度定時器的評測

  1. 周期1ms評測:
  • 修改宏定義:HRTIMER_TEST_CYCL設置周期為1ms. 修改如下
#defineHRTIMER_TEST_CYCLE0,(1000000/2)
  • 通過Tektronix示波器測量:
d860d842-1791-11ed-bbb4-dac502259ad0.jpg
  • 通過DS100 Mini 數字示波器測量:
d883954e-1791-11ed-bbb4-dac502259ad0.jpg
  • 結論:Tektronix示波器和DS100 Mini 數字示波器數據相符,波形穩定。統計出的頻率與周期跟軟件設置一致
  1. 周期100us評測:
  • 修改宏定義:HRTIMER_TEST_CYCL設置周期為100us. 修改如下
#defineHRTIMER_TEST_CYCLE0,(100000/2)
  • 通過Tektronix示波器測量:
d8a543ec-1791-11ed-bbb4-dac502259ad0.jpg
  • 通過DS100 Mini 數字示波器測量:
d8c62260-1791-11ed-bbb4-dac502259ad0.jpg
  • 結論:Tektronix示波器和DS100 Mini 數字示波器數據相符,波形穩定。統計出的頻率與周期跟軟件設置一致
  1. 周期10us評測:
  • 修改宏定義:HRTIMER_TEST_CYCL設置周期為10us. 修改如下
#defineHRTIMER_TEST_CYCLE0,(10000/2)
  • 通過Tektronix示波器測量:
d8eb30e6-1791-11ed-bbb4-dac502259ad0.jpg
  • 通過DS100 Mini 數字示波器測量:
d90e11d8-1791-11ed-bbb4-dac502259ad0.jpg
  • 結論:Tektronix示波器和DS100 Mini 數字示波器數據都無法精確測量,波形不清晰。
  1. 周期1us評測:
  • 修改宏定義:HRTIMER_TEST_CYCL設置周期為1us. 修改如下:
#defineHRTIMER_TEST_CYCLE0,(1000/2)
  • 通過Tektronix示波器測量:
d92f79ea-1791-11ed-bbb4-dac502259ad0.jpg
  • 通過DS100 Mini 數字示波器測量:
d96d6962-1791-11ed-bbb4-dac502259ad0.jpg
  • 結論:Tektronix示波器和DS100 Mini 數字示波器數據都無法精確測量,波形不清晰。

總結

  • 高精度定時器總結
  1. Linux提供的高精度定時器可以滿足我們大部分需求的,要注意的的,定時器回調函數不能做太多任務,并需要快速執行,否則無法保證其周期性。(作者認為高精度定時器可以看作一個外部中斷的思想進行處理)
  2. 通過此次評估,Linux提供的高精度定時器可以滿足我的項目需求,而且建議幾十納秒級的需求使用比較合適,如果幾納秒的需求不適合。
  • 示波器總結
  1. 通過評估數據上看,DS100 Mini 數字示波器可以替代一般的臺式示波器。
  2. DS100 Mini 數字示波器可以在大部分場景上使用,可以滿足項目需求

審核編輯 黃昊宇


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

    關注

    12

    文章

    1901

    瀏覽量

    86539
  • Linux
    +關注

    關注

    87

    文章

    11465

    瀏覽量

    212822
  • 定時器
    +關注

    關注

    23

    文章

    3288

    瀏覽量

    117256
收藏 人收藏

    評論

    相關推薦
    熱點推薦

    #硬聲創作季 #LinuxLinux-2.18.1 高精度延時實驗-GPT定時器原理-1

    高精度Linux
    水管工
    發布于 :2022年11月10日 18:08:13

    #硬聲創作季 #LinuxLinux-2.18.1 高精度延時實驗-GPT定時器原理-2

    高精度Linux
    水管工
    發布于 :2022年11月10日 18:08:37

    #硬聲創作季 #LinuxLinux-2.18.1 高精度延時實驗-GPT定時器原理-3

    高精度Linux
    水管工
    發布于 :2022年11月10日 18:09:02

    GPT高精度延時定時器簡介

    Linux NXP (I.MX6ULL) GPT高精度延時定時器0、GPT 定時器簡介1、GPT 定時器特性如下:2、GPT
    發表于 01-12 06:46

    高精度定時器電路及制作

    高精度定時器電路及制作
    發表于 04-14 11:39 ?14次下載
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>電路及制作

    高精度定時器電路圖

    高精度定時器電路圖
    發表于 05-18 11:40 ?287次下載
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>電路圖

    長時間高精度定時器

    長時間高精度定時器:某些場合需要長時間高精度定時器,此圖定時電路定時時間較長,
    發表于 12-14 08:05 ?1153次閱讀
    長時間<b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>

    用電子表作高精度定時器電路圖

    用電子表作高精度定時器電路圖
    發表于 07-29 08:34 ?1653次閱讀
    用電子表作<b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>電路圖

    LINUX內核定時器高精度&低精度

    linux從內核2.6.16開始引入了高精度定時器,達到ns級別。自此,內核擁有兩套并行計時,低精度
    發表于 05-13 09:41 ?4337次閱讀

    詳解高精度定時器與高級控制定時器

    高精度定時器中,可以使用外部事件來對 PWM 輸出進行封鎖,并可自動恢復;在高級控制定時器中,可以使用 Break 或是 Clr_input 來對 PWM 輸出進行封鎖, 然后也可以自動恢復,其中 Break 必須結合 AOE
    的頭像 發表于 06-16 16:52 ?3239次閱讀

    工程師筆記|高精度定時器的同步功能

    關鍵詞:高精度定時器, 同步 目錄預覽 1.引言 2.定時器同步結構 3.高精度定時器內部同步 4.高精
    的頭像 發表于 11-22 18:15 ?2002次閱讀

    高精度定時器中single-shot計數模式不工作

    高精度定時器中single-shot計數模式不工作
    的頭像 發表于 10-25 18:08 ?822次閱讀
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>中single-shot計數模式不工作

    高精度定時器與高級控制定時器 PWM 封波后再恢復的區別

    高精度定時器與高級控制定時器 PWM 封波后再恢復的區別
    的頭像 發表于 10-17 16:52 ?1077次閱讀
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>與高級控制<b class='flag-5'>定時器</b> PWM 封波后再恢復的區別

    高精度定時器的同步功能

    電子發燒友網站提供《高精度定時器的同步功能.pdf》資料免費下載
    發表于 09-19 14:17 ?0次下載
    <b class='flag-5'>高精度</b><b class='flag-5'>定時器</b>的同步功能

    Linux高精度定時器hrtimer使用示例

    要使用高精度定時器hrtimer。 使用示例 單次定時 加載驅動一秒后輸出“ hrtimer handler ”: # include # include # include # in
    的頭像 發表于 10-04 15:38 ?1919次閱讀
    主站蜘蛛池模板: 天堂资源在线官网资源 | 夜天干天干啦天干天天爽 | 国产成人精品三级在线 | 又黄又爽又猛午夜性色播在线播放 | 种子 在线播放 | 桃色婷婷 | 国产拍拍视频 | xyx性爽欧美视频 | 日韩成人免费一级毛片 | 久久久久毛片成人精品 | 男女性接交无遮挡免费看视频 | 天天爽夜爽免费精品视频 | 狠狠色丁香婷婷综合欧美 | 免费黄色大片在线观看 | 欧美一二三区在线 | 免费任我爽橹视频在线观看 | 国产在线高清精品二区色五郎 | 色一乱一伦一区一直爽 | 在线观看色视频网站 | 欧美精品久久天天躁 | 国内自拍网红在综合图区 | 国产精品久久久久久久人热 | 欧美黄色片免费看 | 日本三级456| 99热最新 | 天天摸日日摸 | 国产一二三区在线观看 | 一区二区三区视频免费观看 | 亚洲国产成人久久笫一页 | bt天堂资源种子在线 | 午夜爱爱免费视频 | 一级毛片在线看在线播放 | 深爱五月激情五月 | 日本韩国三级视频 | 免费看国产片 | 色黄视频网站 | 久久天天躁狠狠躁夜夜 | 亚洲午夜一级毛片 | 91福利视频免费 | 亚洲无吗在线视频 | 性xxxx奶大欧美高清 |