/******************************************************************************
Filename: timing_delay.h
Description: 時間延時相關函數
*****************************************************************************/
#ifndef __TIMING_DELAY_H
#define __TIMING_DELAY_H
#include "stm8l15x.h"
#define SECONDS (1000) /* Jiffies unit is millisecond */
extern volatile uint32_t jiffies; /* 1 jiffies=1ms */
#define GET_TICK_COUNT( ) (jiffies) /* export for SX1278 */
#define TICK_RATE_MS( ms ) ( ms )
void msTimingDelay_Init(void);
void msTimingDelay_Decrement(void);
void udelay(int us);
void msleep(__IO uint32_t nTime); /* millisecond sleep */
void Delay(__IO uint16_t nCount);
#define time_after(a,b)
((int32_t)(b) - (int32_t)(a) < 0)
#define time_before(a,b) time_after(b,a)
#define time_after_eq(a,b)
((int32_t)(a) - (int32_t)(b) >= 0)
#define time_before_eq(a,b) time_after_eq(b,a)
/* Timeout happened, x should be last jiffies+timeout value */
#define timeout_happened(x) (time_after_eq(jiffies, x))
#endif /* __TIMING_DELAY_H */
1.jifies是啥????
jifies就是系統時間,假如要500ms內一直打H
首先要獲取當前時間
uint_32t start_time;
start time=jifies;
while(jiffles-starttime<500)
http://blog.51cto.com/decimal/410673
下面我們來考慮jiffies的溢出,我們將從以下幾個方面來闡述:
. 1.無符號整型溢出的具體過程
. 2.jiffies溢出造成程序邏輯出錯
. 3.Linux內核如何來防止jiffies溢出
.4.time_after等比較時間先/后的宏背后的原理
. 5.代碼中使用time_after等比較時間先/后的宏
. 1.無符號整型溢出的具體過程
如unsigned long 占四個字節
0 1 2 3 4 5.....255 ->0 1 2 3 4 5
4. jiffies溢出造成程序邏輯出錯
下面,通過一個例子來看jiffies的溢出。
例4-1:jiffies溢出造成程序邏輯出錯
unsigned long timeout = jiffies + HZ/2; //0.5s超時
do_somework();//干一些事
if (timeout > jiffies) //在0.5s內運行完以上代碼 調用未超時執行函數 no_timeout_handler();
{
no_timeout_handler();
}else { //否則超時,調用超時函數timeout_handler();
timeout_handler();
}
本例的目的是從當前時間起,如果在0.5秒內執行完do_somework(),則調用no_timeout_handler()。如果在0.5秒后執行完do_somework(),則調用timeout_handler()。
我們來看看本例中一種可能的溢出情況,即在設置timeout并執行do_somework()后,jiffies值溢出,取值為0。設在設置 timeout后,timeout的值臨近無符號長整型的最大值,即小于2^32-1。設執行do_somework()花費了1秒,那么代碼應當調用 timeout_handler()。但是當jiffies值溢出取值為0后,條件timeout > jiffies成立,jiffies值(等于0)小于timeout(臨近但小于2^32-1),盡管從邏輯上講jiffies值要比timeout大。但最終代碼調用的是no_timeout_handler(),而不是timeout_handler()。
上一篇:stm8L 初始化系統時鐘
下一篇:stm8 Error[Li005]: no definition for XXX 的解決辦法
推薦閱讀
史海拾趣
東微半導是一家在蘇州扎根14余年的半導體公司,致力于自主研發和生產功率半導體核心器件。在充電樁產業快速發展的背景下,東微半導率先量產國內首款自主研發充電樁用功率半導體核心器件,打破了國外廠商的壟斷地位。公司經過多年的自主研發,獲得了創新結構的高壓超級結技術的專利,使MOSFET場效晶體管的電能轉換效率提升,具有動態損耗小、發熱量低的優點。經客戶端實測,整體性能達到了國際一流水平,現已出口至韓國、日本和德國等國際市場。
3L Electronic Corporation,自XXXX年在臺北創立以來,憑借創始人的遠見卓識和團隊的努力,逐漸在電子行業嶄露頭角。初期,公司主要生產電子零組件,憑借著精湛的工藝和穩定的質量,贏得了客戶的信賴。隨著市場的擴大,公司逐漸拓展到電子產品修理和國際貿易等領域,為后續的快速發展奠定了堅實基礎。
為了進一步擴大市場份額,Appointech Inc公司開始積極拓展海外市場。通過與國際知名企業的合作,公司成功打入國際市場,產品銷量大幅提升。同時,公司還積極參加國際電子展會和交流活動,與全球同行建立了廣泛的合作關系,為公司的長遠發展奠定了堅實的基礎。
隨著公司規模的不斷擴大和產品質量的不斷提升,ASC Capacitors開始積極拓展市場。公司不僅在國內市場上取得了顯著成績,還成功打入國際市場,產品遠銷海外。通過與全球知名企業的合作,ASC Capacitors進一步提升了品牌知名度和影響力,成為了電容器行業的佼佼者。
在電子產品市場競爭日益激烈的背景下,EOZ Secme始終堅守品質至上的原則。公司從原材料采購、生產流程到售后服務都進行嚴格把控,確保每一件產品都符合高標準的質量要求。這種對品質的執著追求讓EOZ Secme的產品在市場上贏得了良好的口碑,也使其品牌價值得到了顯著提升。
隨著科技的快速發展,數據處理行業也在不斷變化。為了保持競爭優勢,Datalinear公司投入大量資金進行技術創新。經過數年的研發,公司成功推出了一款基于人工智能的數據分析系統,能夠自動識別數據中的模式并給出預測。這一技術的突破讓Datalinear公司在行業內樹立了技術領先的形象,也贏得了眾多客戶的青睞。
剛進了一家公司?,F在做電機控制模擬電路設計一塊。感覺非常非常不容易。這個難和做數學題目的難不一樣,感覺考慮的東西太多,而且沒有清晰思路過程,及其繁雜.總之一看那些電路圖我就頭大.想問下初步會設計一些模擬電路需要哪些知識?(我只是看模電 ...… 查看全部問答∨ |
Done Doing PreMakeImage Custom Build Actions makeimg: Check for C:\\WINCE600\\OSDesigns\\YG3501B\\YG3501B\\RelDir\\NANO_ARMV4I_Release\\PreMakeImg.bat to run. makeimg: Found localization settings. makeimg: LOCALE: 0804 &nb ...… 查看全部問答∨ |
最近在用wavecom和單片機組合做短信和收發,可是發現單片機只能發送消息給gsm模塊,單片機卻收不到wavecom發來的任何信息,包括發送at的ok確認信息。所以現在整個系統只能發短信不能收短信。 具體情況: 1,串口這邊我只連了兩根線,一個收一個發 ...… 查看全部問答∨ |
我在WinXP下,用PB、EShell、以及一些TFTP工具,通過Ethernet或USB RNDIS,下載NK.bin到WinCE5設備(Marvell XSCAL),從來沒有問題。 可是,在windows Vista,我用這些工具,通過Ethernet或USB RNDIS,下載NK.bin到WinCE5設備,總是下到40%或50% ...… 查看全部問答∨ |
日前注冊了萬利板升級活動,選擇了"雅利(深圳)"作為升級點. 昨天打電話給"雅利(深圳)"咨詢此事,他們態度十分不好. 開始說他們不知道升級活動之事,我告訴他這是ST搞的升級活動 然后他問我從哪里買的板,我說賽格(忘記哪個商家了,貌似 ...… 查看全部問答∨ |
|
Amiccom公司最新推出的A7153,可以自由選擇MCU; [ 本帖最后由 lmq329778570 于 2012-4-27 17:16 編輯 ]… 查看全部問答∨ |
|