女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>電子資料>ez timers無限計時器開源分享

ez timers無限計時器開源分享

2022-10-31 | zip | 0.03 MB | 次下載 | 免費

資料介紹

描述

這一切是關于什么的?

你可以拖延,但時間不會。本杰明·富蘭克林
時間的唯一原因是一切都不會一下子發生。艾爾伯特愛因斯坦
我們所要做的就是決定如何處理給我們的時間。JRR托爾金

我不能說比這些偉大的人更好!

在我們的草圖中管理時間是我們需要經常做的事情,通過明智地使用計時器,我們能夠有效地設計、管理和處理時間驅動的事件。

本文提供了一種在您的草圖中使用任意數量的計時器的技術(方法),每個計時器都是獨立的、非阻塞的,并且它們都可以同時運行。該技術易于理解,易于實現,不使用 delay() 函數,也不需要最終用戶實現定時器中斷服務程序 (ISR)。

為什么計時器有用?

很多時候我們需要定期做一些事情,例如每 1/100 秒讀取一次傳感器,跟蹤和處理超時,每 1/2 秒處理一次心跳,等等。在這種情況下,我們需要使用一個或多個計時器來確保我們可以做所有我們需要做的事情。這就是本文提供的技術 (ez_timers) 非常有用的地方。

在這篇文章中,一個草圖定義了您在草圖中實現 ez_timers 提供的技術所需的所有數據和功能,您可以在此基礎上進行草圖設計、決策控制和流程。

為了展示該技術的簡單性和強大功能,提供了一個基于多個 LED(八個)的示例,每個 LED 由各自的定時器控制,以不同的時間間隔打開和關閉它們。正如將要看到的,該技術以直接和簡潔的方式實現。它很容易擴展到很多很多用途。

ez_timers 設計

在我們開始看示例草圖之前,讓我們看一下 ez_timers 技術和代碼的組成部分。

ez_timers 有兩個部分:

1. 其數據結構和數據要求,以及
2. 一些終端用戶可訪問的簡單功能。

讓我們來看看其中的每一個:

一、數據結構和數據要求

#define max_timers         8
#define elapsed            true
#define not_elapsed        !elapsed
#define active             true
#define not_active         !active    // double defined for user preference
#define inactive           not_active // double defined for user preference
uint8_t timer; // general variable for use dealing with timers
// timer control struct(ure)
struct timer_control {
 bool     timer_status;  // records status of a timer - active or not active
 uint32_t start_time;// records the millis time when a timer is started
} timers[max_timers];// declare an entry for each timer - 0:(max_timers-1)

我們首先注意到的是宏' max_timers'。在“開箱即用”(OOTB)草圖中,它設置為 8,因此草圖將在編譯時將自身配置為 8 個計時器。然后這些將可從 0 到 7 引用。使用此宏定義您希望在草圖中配置多少個計時器。

接下來,我們將看到 ez_timer 函數使用的許多宏,最終用戶代碼也可以/應該使用這些宏來測試特定條件的狀態。不過,在這一點上,我只觀察到其中兩個宏可以相同地使用,具體取決于最終用戶的偏好。它們是 ' not_active' 和 ' inactive' - 它們是同一個東西。當我們討論 ez_functions 時,更多關于使用這些宏的上下文。

下一個聲明只是一個無符號字節,timer可以在整個草圖中用作工作變量來引用任何計時器(最多 255 個),例如,在 for 循環等中。

ez_timers 的核心是數據結構(ure)' timer_control'。這定義了兩個數據項/類型,它們是 ' timer_status' ( bool) 和 ' start_time' ( uint32_t - 無符號 32 位整數)。每個配置的計時器在此結構中都有自己的條目,從 0 到 (' max_timers' -1)。' timer_control' 數據類型 struct(ure) 然后被聲明為 ' timers'。此數據結構(ure)使用' timers'引用,例如' timers[2].timer_status'、' timers[timer].start_time'等。

2.ez_timerFunctions

只有三個 ez_timer 函數:

//
// set the given timer active and note start time in milliseconds
//
void start_timer(uint8_t timer) {
 if (timer < max_timers) {
   // valid timer
   timers[timer].timer_status = active; // mark this timer as active
   timers[timer].start_time = millis(); // record time this timer is started
 }
}
//
// cancel (stop) the given timer
//
void stop_timer(uint8_t timer) {
 if (timer < max_timers) {
   // valid timer
   timers[timer].timer_status = inactive;  // mark this timer as inactive
 }
}
//
// Function determines if the time has elapsed for given timer, if active.
// The elapsed_time parameter is in milliseconds.
//
bool timer_elapsed(uint8_t timer, uint32_t elapsed_time) {
 if (timer < max_timers) {
   // valid timer
   if (timers[timer].timer_status == active) {
     // timer is active so check elapsed time
     if (millis() - timers[timer].start_time >= elapsed_time) {
       // this timer has elapsed
       timers[timer].timer_status = inactive; // mark this timer no longer active
       return elapsed;
     }
   }
 }
 return not_elapsed;
}

讓我們更詳細地看一下這些函數:

1. ' ' - 將給定的計時器設置為活動并以毫秒為單位記錄開始時間。唯一的參數是要啟動的定時器編號:0 到(' '-1)。start_timermax_timers
2. ' ' - 將給定的計時器標記為非活動/非活動。唯一的參數是要停止的定時器編號:0 到 (' '-1)。stop_timermax_timers
3. ' ' - 應盡可能定期調用此函數,以檢查給定的計時器是否已過,如果已過,應遵循哪些操作。該函數返回兩個值之一 -如果計時器已完成,則返回“ ”,否則返回“ ”。請注意,如果計時器未激活,此函數還將返回值 ' '(與 ' ' 相同)。timer_elapsedelaspednot_elapsednot_elapsednot_active
該函數有兩個參數,第一個是要檢查的計時器編號:0 到 (' max_timers'-1),第二個是要檢查的經過時間(以毫秒為單位)。例如:
if (timer_elasped(5, 10000) == elapsed){...} else{...}
檢查計時器 5 以查看自啟動以來是否已過 10 秒。
該函數最適合用于遍歷所有已配置計時器(0 到 (' max_timers' -1))的 for 循環。還要注意的是,一旦給定的計時器已經過去,如果它是連續發生的需求,則需要立即重新啟動。

一個例子

已經向 OOTB 提供了 ez_timers 草圖,并提供了如何使用它的示例。該示例配置了八個 LED 并為每個 LED 使用一個計時器,以不同的時間間隔使它們閃爍。為了定義和控制 LED,還使用了 struct(ure) 數據類型,該數據類型很容易根據最終用戶的需求進行修改(減少或增加 LED 的數量或改變閃光率)。

提供的示例是一種簡單的方法,可以處理 LED 以提供定時光效果。但是,對于處理經過的計時器結果的更通用的方法,switch-case 構造會特別好用,例如:

...
for (timer = 0;time < max_timers; timer++){
  if (timer_elasped(timer, 10000) == elapsed){
   switch (timer){
    case 0: // timer 0
      // restart this timer and process the event
      start_timer(timer);
      ...
      break;
    case 1:  // timer 1
      // do not restart this timer, just process the event
      ...
      break;
    case 2:  // timer 2
      ...etc
      break;
    ...
    } 
  }
}
...

在上面的示例代碼中,已經創建了許多從 0、1、2、...、(- max_timers1) 引用的計時器,每個經過的計時器事件都由相應的案例段處理。

最后

ez_timers 技術可以提供一種易于實現的方法,用于在您的草圖中運行多個計時器。但是,如果您需要一個更全面、更復雜的計時器解決方案,它不僅可以容納經過時間的計時器,還可以容納實時計時器,那么請查看同一作者的REM_SYS (見下文),它給出了一個更工業化和完全異步的解決方案。

REM_SYS 支持經過時間和實時計時器(提醒)。可以將所有計時器類型定義為一次性事件、重復發生而沒有結束或重復發生直到達到/經過給定時間。不僅如此,對于每種類型,可以定義子類型以幫助決策控制,還可以為每個定義的計時器(提醒)提供用戶定義參數的“有效負載”,這些參數在達到計時器事件時返回(經過或實時)。REM_SYS 甚至可以在 UNO 微控制器上運行,并且可以配置有或沒有實時時鐘

延伸閱讀

您可能還會發現同一作者的這些貢獻有趣且有用:

  • 為您的草圖添加心跳- 包括一種可見的方式來查看您的代碼在您的微控制器上運行,而無需任何額外的組件或接線!
  • 音樂和燈光工作臺- 旨在將計算機編程新手介紹給該主題,使用具有酷炫效果的簡單命令。方法是導師和學生之一

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1山景DSP芯片AP8248A2數據手冊
  2. 1.06 MB  |  532次下載  |  免費
  3. 2RK3399完整板原理圖(支持平板,盒子VR)
  4. 3.28 MB  |  339次下載  |  免費
  5. 3TC358743XBG評估板參考手冊
  6. 1.36 MB  |  330次下載  |  免費
  7. 4DFM軟件使用教程
  8. 0.84 MB  |  295次下載  |  免費
  9. 5元宇宙深度解析—未來的未來-風口還是泡沫
  10. 6.40 MB  |  227次下載  |  免費
  11. 6迪文DGUS開發指南
  12. 31.67 MB  |  194次下載  |  免費
  13. 7元宇宙底層硬件系列報告
  14. 13.42 MB  |  182次下載  |  免費
  15. 8FP5207XR-G1中文應用手冊
  16. 1.09 MB  |  178次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33566次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21549次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6656次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537798次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420027次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191187次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183279次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費