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

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

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

3天內不再提示

英創信息技術Linux應用程序實現精確延時介紹

英創信息技術 ? 來源:英創信息技術 ? 作者:英創信息技術 ? 2020-01-17 09:51 ? 次閱讀

Linux應用程序中,常用的延時函數包括sleep()、usleep()、select()等,這幾個延時函數函數的執行機制,都是將當前線程掛起,由操作系統做延時,然后再恢復當前線程。這意味著其延時的最小間隔是兩次線程切換時間。經測試,在單一線程情況下,兩次線程的切換時間在150us左右。大多數情況下,應用程序會有多個線程在運行,這時線程恢復有可能在下一個時間片,而Linux系統缺省的線程輪片時間為10ms,這意味著只有當延時在大于10ms情況時,常規的延時函數才有意義。在工控領域,我們常常碰到需要微秒級的延時需求,例如實現某種讀寫時序等,這時Linux系統的常規延時函數難于滿足其需求。針對這樣的應用需求,我們設計了采用內存映射的方法操作主板的硬件定時器和GPIO,從而產生出具有微秒精度的脈沖波形來。下面就詳細介紹如何在用戶進程實現這樣的精確延時的操作。

以EM335x工控主板為例,用其內部的定時器來實現精確延時的功能,EM335x內部定時器的輸入時鐘為24MHz,單位時間為41.6ns,通過將Linux系統的mem設備文件和mmap()函數結合起來使用,可直接對EM335x內部定時器的寄存器進行操作,再通過同樣的方式控制GPIO,實現:(1)設置GPIO,(2)啟動定時器,當檢測到定時器計數完畢,(3)再設置GPIO,共三個步驟,就可產生精確時間間隔的脈沖。

Linux系統中的/dev/mem設備文件,是專門用來讀寫物理地址用的,里面的內容是所有物理內存的地址以及內容信息。只要我們使用mmap()函數將/dev/mem設備文件映射到進程地址空間,實現對內存物理地址的讀寫,就能夠通過這種方式快速的對GPIO和定時器進行操作,而mmap操作提供了一種機制,讓用戶程序直接訪問設備內存,這樣就相當于直接對硬件進行操作,從而避開了驅動程序,如果調用驅動就需要在用戶空間和內核空間互相拷貝數據,還會涉及到系統調度等機制,效率將會變低。

將/dev/mem/設備文件中定時器的地址映射到用戶進程空間的代碼:
void *timer_em335x_pin_config(unsigned int BASE)
{
int mem_fd;
void *base;
mem_fd = open('/dev/mem', O_RDWR|O_SYNC);
printf('mem_fd is %d\n', mem_fd);
/* mmap Timer */
base = mmap(
NULL, //起始地址
DMTIMER_DEV_SIZE, //映射的文件內容的大小
PROT_READ|PROT_WRITE,//映射區域可讀可寫
MAP_SHARED, //映射區域的寫入數據會寫回到原來的文件
mem_fd,
BASE//被映射的硬件地址
);
close(mem_fd);
return base;
}

將/dev/mem/設備文件中GPIO的地址映射到用戶進程空間的代碼:
void *GPIO_MMAP::gpio_em335x_pin_config(unsigned int BASE)
{
int mem_fd;
void *base;
mem_fd = open('/dev/mem', O_RDWR|O_SYNC);
printf('mem_fd is %d\n', mem_fd);
/* mmap GPIO */
base = mmap(
NULL,//起始地址
GPIO_DEV_SIZE, //映射的文件內容的大小
PROT_READ|PROT_WRITE,//映射區域可讀可寫
MAP_SHARED,//映射區域的寫入數據會寫回到原來的文件
mem_fd,
BASE //被映射的硬件地址
);
close(mem_fd);
return base;
}

成功執行時,mmap()函數返回被映射區的指針。普通文件被映射到進程地址空間后,進程可以像訪問普通內存一樣對文件進行訪問,不必再調用read(),write()等操作。只需要使用返回的地址指針在對應的寄存器的偏移地址賦值,就可以完成操作。在例程中已經將函數接口引出(詳細的代碼請參考例程):
ptr=Timer_Init();//初始化,將定時器地址映射到用戶進程
Timer_Start(ptr, GPIO0, 0xfffffffa); //啟動定時器,并設置時間和哪一位GPIO

定時器是從0計數到0xffffffff,需要實現定時功能,我們就要改變定時器的初值,上面的程序中0xfffffffa為定時器的初值,前面提到過由于EM335x定時器時鐘為24MHZ,所以定時器單位時間為1/24000000=41.6ns,假設程序訪問寄存器還需要花費時間T0,在計算初值的時候,就需要加上這一部分時間才能保證準確性,因此定時器取值的計算公式為:
T=0xffffffff-(目標延時/41.6ns)+T0

經過測試,執行一次程序訪問寄存器所需花費的時間大約為T0=800ns。舉個例子,比如目標延時為2μs,那么定時器初值為:0xffffffff-(2000/41.6)+800,也就是0xffffffe2,測試的時候帶入這個值,再進行微調,即可得到想要的結果。

使用英創工控主板運行例程測試,分別測試延時1μs,1.5μs,2μs,5μs,10μs時的精度,結果如下:

目標延時 定時器取值 實際延時
Min Max
1us 0xfffffffa 1.14us 1.20us


1us的測試波形

目標延時 定時器取值 實際延時
Min Max
1.5us 0xffffffee 1.46us 1.52us


1.5μs的測試波形

目標延時 定時器取值 實際延時
Min Max
2us 0xffffffe2 1.90us 2.08us

2μs的測試波形

目標延時 定時器取值 實際延時
Min Max
5us 0xffffff9a 4.92us 5.04us

5μs的測試波形

目標延時 定時器取值 實際延時
Min Max
10us 0xffffff22 9.90us 10.10us


10μs的測試波形

可以看到,在1μs時,誤差范圍在±200ns左右,超過1μs,其余的取值,誤差都在±100ns以內,隨著延時的增加,精確度將越來越高,在10μs的時候,誤差已經非常小了。

通過以上方案實現了在用戶進程對精確延時的操作,詳細的操作代碼請參考例程。

關于這一方法在EM9x60系列工控主板上的實現可閱讀下文:英創嵌入式主板支持精確延時操作之二

注意事項:我們推薦客戶直接使用例程中引出的接口進行操作,不推薦客戶對硬件訪問這一部分代碼進行修改,以免在操作的時候出現無法預估的錯誤。

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

    關注

    87

    文章

    11329

    瀏覽量

    209967
  • 嵌入式主板
    +關注

    關注

    7

    文章

    6086

    瀏覽量

    35486
收藏 人收藏

    評論

    相關推薦

    飛騰助力首屆教育信息技術應用創新大賽圓滿落幕

    近日,由中國教育技術協會主辦,教育部教育管理信息中心教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信工委會支持,北京航空航天
    的頭像 發表于 12-24 09:57 ?169次閱讀

    有方科技參編的信息技術團體標準發布

    近日,有方科技參編的《信息技術產品供應鏈成熟度 共性指標 第1部分:企業背景評價》《信息技術產品供應鏈成熟度 共性指標 第2部分:技術掌控評價》《信息技術產品供應鏈成熟度 共性指標 第
    的頭像 發表于 12-23 10:44 ?182次閱讀

    龍芯中科助力2024首屆教育信息技術應用創新大賽成功舉辦

    近日,2024首屆教育信息技術應用創新大賽在北京航空航天大學成功舉辦。本次大賽由中國教育技術協會主辦,教育信實驗室、公安部第三研究所、中國電子工業標準化技術協會信
    的頭像 發表于 12-19 17:02 ?258次閱讀

    AWTK-WEB 快速入門(2) - JS 應用程序

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用JS語言開發AWTK-WEB應用程序。用AWTKDesigner新
    的頭像 發表于 12-05 01:04 ?137次閱讀
    AWTK-WEB 快速入門(2) - JS <b class='flag-5'>應用程序</b>

    AWTK-WEB 快速入門(1) - C 語言應用程序

    導讀AWTK可以使用相同的技術棧開發各種平臺的應用程序。有時我們需要使用Web界面與設備進行交互,本文介紹一下如何使用C語言開發AWTK-WEB應用程序。用AWTKDesigner新建
    的頭像 發表于 11-27 11:46 ?253次閱讀
    AWTK-WEB 快速入門(1) - C 語言<b class='flag-5'>應用程序</b>

    中科達榮獲2024年軟件和信息技術服務優秀企業

    及前百家企業”名單。中科達憑借非凡的技術實力與持續的創新能力,成功入選“2024年度軟件和信息技術服務競爭力百強企業”以及“2024年軟件和信息技術服務優秀企業”。
    的頭像 發表于 10-30 11:44 ?521次閱讀

    國產化背景下的工控主板發展現狀

    ,是信息技術應用創新產業的簡稱,于2016年“信工委會”(信息技術應用創新工作委員會)提出,目的就是要推動我們國內軟硬件關鍵技術的研發
    的頭像 發表于 09-21 16:15 ?454次閱讀

    Linux網絡協議棧的實現

    網絡協議棧是操作系統核心的一個重要組成部分,負責管理網絡通信中的數據包處理。在 Linux 操作系統中,網絡協議棧(Network Stack)負責實現 TCP/IP 協議簇,處理應用程序發起的網絡
    的頭像 發表于 09-10 09:51 ?340次閱讀
    <b class='flag-5'>Linux</b>網絡協議棧的<b class='flag-5'>實現</b>

    梯度科技入選2023年信息技術應用創新解決方案名單

    日前,工業和信息化部網絡安全產業發展中心(工業和信息化部信息中心)在天津舉辦2024信息技術應用創新發展大會暨解決方案應用推廣大會。會上正式公布了2023年
    的頭像 發表于 09-09 16:29 ?459次閱讀

    實測14us,Linux-RT實時性能及開發案例分享—基于全志T507-H國產平臺

    運行,為避免CPU資源被程序完全占用,導致系統被掛起,因此在程序中增加100us的延時程序原理大致如下:(1)在Linux-RT內核上創建
    發表于 07-25 15:58

    Linux是做什么用的?

    ,進行軟件開發、系統管理和網絡管理等工作。 5、學習和教育:Linux是一個開源的操作系統,提供了大量的學習資源和教育機會。許多學校和教育機構使用Linux來教授計算機科學和信息技術相關的課程。 總之,
    發表于 04-28 15:40

    應用程序中的服務器錯誤怎么解決?

    在使用應用程序時,可能會遇到服務器錯誤的問題。這種錯誤通常會導致應用程序無法正常運行 ,給用戶帶來不便。下面將介紹應用程序中的服務器錯誤及其解決方法,幫助您快速解決這一問題。
    的頭像 發表于 03-12 15:13 ?6376次閱讀

    龍芯中科三項信方案入圍工信部2023年信息技術應用創新應用示范案例名單

    近日,工業和信息化部通報了2023年信息技術應用創新解決方案征集遴選結果,本次共評選出典型解決方案173個、應用示范案例83個、單項創新案例64個。
    的頭像 發表于 03-07 16:45 ?976次閱讀
    龍芯中科三項信<b class='flag-5'>創</b>方案入圍工信部2023年<b class='flag-5'>信息技術</b>應用創新應用示范案例名單

    RX78M組 EtherCAT ETG.5003示例程序固件信息技術

    電子發燒友網站提供《RX78M組 EtherCAT ETG.5003示例程序固件信息技術.pdf》資料免費下載
    發表于 02-21 14:22 ?1次下載
    RX78M組  EtherCAT ETG.5003示例<b class='flag-5'>程序</b>固件<b class='flag-5'>信息技術</b>

    通過實時加速器技術實現實時應用程序的 Windows

    時功能應用程序。這是通過專門為實時應用程序保留一個或多個CPU來實現的,設置 Windows 適當的參數化并利用 acontis 內核驅動程序進行
    的頭像 發表于 01-29 16:03 ?940次閱讀
    通過實時加速器<b class='flag-5'>技術</b><b class='flag-5'>實現</b>實時<b class='flag-5'>應用程序</b>的 Windows
    主站蜘蛛池模板: 人人射人人草| 色婷婷色99国产综合精品| 91久久国产青草亚洲| 国产成人亚洲日本精品| 三级特黄视频| 调教双性学霸美人| 九九热re| 亚洲人成毛片线播放| 亚洲va中文字幕无码| 男女免费观看视频| 丁香五月情| 精品看片| 日日日天天射天天干视频| 99热这里只有精品一区二区三区| 成年女人毛片免费视频| 久久精品成人免费网站| 日本簧片在线观看| 欧美性另类69xxx| 日本a级片视频| 久青草国产高清在线视频| 日本成人小视频| 久久青青成人亚洲精品| 丁香六月婷婷七月激情| 天天摸日日干| 天天碰夜夜操| 黄色成人在线网站| 中文字幕一区二区三区永久| 1024你懂的在线观看| 一区中文字幕| 日本成人a视频| 亚洲国产婷婷香蕉久久久久久| 在线观看亚洲成人| 色多多免费视频观看区一区| 美女被猛男躁免费视频网站| www.成人在线| 亚洲精品网站日本xxxxxxx| 在线亚洲精品中文字幕美乳| free性欧美69高清| 免费又黄又爽的禁片视频| 国产一级特黄aaa大片| 国产综合视频在线观看|