欧美性猛交xxxx免费看_牛牛在线视频国产免费_天堂草原电视剧在线观看免费_国产粉嫩高清在线观看_国产欧美日本亚洲精品一5区

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

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

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

面向AWorks框架時(shí)間管理程序設(shè)計(jì)

AGk5_ZLG_zhiyua ? 來源:互聯(lián)網(wǎng) ? 作者:佚名 ? 2018-05-30 09:33 ? 次閱讀

實(shí)際應(yīng)用中,時(shí)間管理往往是必不可少的。例如:定時(shí)完成某件事情、周期性地觸發(fā)某一動(dòng)作、測(cè)量評(píng)估程序運(yùn)行時(shí)間等。AWorks提供了一系列時(shí)間相關(guān)的服務(wù),包括標(biāo)準(zhǔn)時(shí)間和定時(shí)器等,用戶可以據(jù)此實(shí)現(xiàn)靈活的時(shí)間相關(guān)應(yīng)用。

本文為《面向AWorks框架和接口編程(上)》第三部分軟件篇——第8章時(shí)間管理——第1~5小節(jié):時(shí)間的表示形式、RTC通用接口、系統(tǒng)時(shí)間、系統(tǒng)節(jié)拍和軟件定時(shí)器。

8.1 時(shí)間的表示形式

在AWorks中,時(shí)間有3種表示形式:細(xì)分時(shí)間、日歷時(shí)間和精確日歷時(shí)間。

8.1.1 細(xì)分時(shí)間

細(xì)分時(shí)間包含年、月、日、時(shí)、分、秒等信息。在AWorks中,細(xì)分時(shí)間使用aw_tm_t類型表示,該類型的具體定義詳見程序清單8.1。

程序清單8.1 細(xì)分時(shí)間類型定義(aw_time.h)

其中,tm_sec表示秒,有效值為 0 ~ 59;tm_min表示分,有效值為0 ~ 59;tm_hour表示小時(shí),有效值為 0 ~ 23;tm_mday表示日期,有效值為1 ~ 31;tm_mon表示月份,有效值為0 ~ 11,分別對(duì)應(yīng)1 ~ 12月,即實(shí)際月份為該值加上1;tm_year表示1900年至今的年數(shù),實(shí)際年為該值加上1900; tm_wday表示星期,0 ~ 6分別對(duì)應(yīng)星期日 ~ 星期六;tm_yday表示該年1月1日至今的天數(shù)(0 ~ 365),0對(duì)應(yīng)1月1日;tm_isdst表示是否使用夏令時(shí),若tm_isdst為正,則夏令時(shí)有效,系統(tǒng)會(huì)在夏季將時(shí)間調(diào)快一小時(shí),若tm_isdst為0或負(fù)數(shù),表示不使用夏令時(shí)?,F(xiàn)在一般不使用夏令時(shí),tm_isdst設(shè)置為-1即可。

夏令時(shí)(Daylight Saving Time:DST)是一種為節(jié)約能源而人為規(guī)定地方時(shí)間的制度,在這一制度實(shí)行期間所采用的統(tǒng)一時(shí)間稱為“夏令時(shí)間”。一般在天亮早的夏季人為將時(shí)間提前一小時(shí),可以使人早起早睡,從而節(jié)約照明用電。各個(gè)采納夏時(shí)制的國(guó)家具體規(guī)定不同。目前全世界有近110個(gè)國(guó)家每年要實(shí)行夏令時(shí)。我國(guó)在1986年至1991年實(shí)行了六年的夏令時(shí),每年從4月中旬的第一個(gè)星期日2時(shí)整(北京時(shí)間)到9月中旬第一個(gè)星期日的凌晨2時(shí)整(北京夏令時(shí))。在夏令時(shí)實(shí)施期間將時(shí)間調(diào)快一小時(shí)。1992年4月5日后不再實(shí)行。

例如,當(dāng)前時(shí)間是2016年8月26日09:32:30,則可以定義如下細(xì)分時(shí)間:

一般地,星期(tm_wday)和一年中的天數(shù)(tm_yday)兩個(gè)成員的值無需用戶手動(dòng)設(shè)置,這些值是在獲取細(xì)分時(shí)間時(shí),反饋給用戶的信息。

8.1.2 日歷時(shí)間

日歷時(shí)間表示從1970年1月1日00:00:00開始至當(dāng)前時(shí)刻經(jīng)歷的秒數(shù)。在AWorks中,日歷時(shí)間使用aw_time_t類型表示,該類型定義如下(aw_time.h):

例如,當(dāng)前時(shí)間是2016年8月26日09:32:30,至1970年1月1日00:00:00以來的秒數(shù)為1472203950。則可以定義如下日歷時(shí)間:

實(shí)際中,用戶往往并不需要直接計(jì)算秒數(shù),而是通過AWorks提供的相關(guān)接口,將細(xì)分時(shí)間轉(zhuǎn)換為日歷時(shí)間,以得到某一細(xì)分時(shí)間對(duì)應(yīng)的日歷時(shí)間。

8.1.3 精確日歷時(shí)間

日歷時(shí)間精度為秒,精確日歷時(shí)間的精度可以達(dá)到納秒,精確日歷時(shí)間在日歷時(shí)間的基礎(chǔ)上,增加了一個(gè)納秒計(jì)數(shù)器。在AWorks中,精確日歷時(shí)間使用aw_timespec_t類型表示,該類型定義如下(aw_time.h):

其中,tv_sec是秒值;tv_nsec是納秒計(jì)數(shù)值。納秒計(jì)數(shù)值從0開始計(jì)數(shù),當(dāng)納秒計(jì)數(shù)值達(dá)到1000000000時(shí),秒值加1,同時(shí),納秒計(jì)數(shù)值復(fù)位為0,重新開始計(jì)數(shù)。

8.1.4 細(xì)分時(shí)間與日歷時(shí)間的相互轉(zhuǎn)換

為了便于用戶使用,AWorks提供了兩個(gè)接口函數(shù),用于細(xì)分時(shí)間和日歷時(shí)間的相互轉(zhuǎn)換。相關(guān)函數(shù)的原型詳見表8.1。

表8.1 時(shí)間轉(zhuǎn)換接口函數(shù)(aw_time.h)

1. 細(xì)分時(shí)間轉(zhuǎn)換為日歷時(shí)間

該函數(shù)用于將細(xì)分時(shí)間轉(zhuǎn)換為日歷時(shí)間,其函數(shù)原型為:

其中,p_tm作為輸入參數(shù),指向待轉(zhuǎn)換的細(xì)分時(shí)間;p_time為輸出參數(shù),用以輸出轉(zhuǎn)換的結(jié)果(日歷時(shí)間)。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示轉(zhuǎn)換成功,其它值表示轉(zhuǎn)換失敗。

例如,需要獲取2016年8月26日09:32:30對(duì)應(yīng)的日歷時(shí)間,則范例程序詳見程序清單8.2。

程序清單8.2 細(xì)分時(shí)間轉(zhuǎn)換為日歷時(shí)間范例程序

運(yùn)行程序,可以得到轉(zhuǎn)換的結(jié)果為:1472203950。

2. 日歷時(shí)間轉(zhuǎn)換為細(xì)分時(shí)間

該函數(shù)用于將日歷時(shí)間轉(zhuǎn)換為細(xì)分時(shí)間,其函數(shù)原型為:

其中,p_time作為輸入?yún)?shù),指向待轉(zhuǎn)換的日歷時(shí)間;p_tm為輸出參數(shù),用以輸出轉(zhuǎn)換的結(jié)果(細(xì)分時(shí)間)。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示轉(zhuǎn)換成功,其它值表示轉(zhuǎn)換失敗。

例如,需要將日歷時(shí)間1472203950轉(zhuǎn)換為細(xì)分時(shí)間,則范例程序詳見程序清單8.3。

程序清單8.3 日歷時(shí)間轉(zhuǎn)換為細(xì)分時(shí)間范例程序

運(yùn)行程序,可以得到轉(zhuǎn)換的結(jié)果為:2016-08-26 09:32:30。

8.2 RTC通用接口

RTC(Real-Time Clock)設(shè)備是能夠提供基本時(shí)鐘服務(wù)的設(shè)備。一個(gè)系統(tǒng)中若存在RTC設(shè)備,則可以使用RTC通用接口從RTC設(shè)備中獲取到年、月、日、時(shí)、分、秒等基本的時(shí)間信息,一般地,為了修正時(shí)間值,往往還可以設(shè)置RTC設(shè)備當(dāng)前的時(shí)間值。

通常情況下,在硬件設(shè)計(jì)上,都會(huì)為RTC設(shè)備分配一個(gè)獨(dú)立的后備電源(如電池),當(dāng)系統(tǒng)主電源掉電后,RTC設(shè)備仍然能夠繼續(xù)正確運(yùn)行,使得時(shí)間信息一直保持有效。

RTC通用接口包含獲取時(shí)間和設(shè)置時(shí)間的接口,其函數(shù)原型詳見表8.2。

表8.2 RTC通用接口函數(shù)(aw_rtc.h)

1. 獲取時(shí)間

該函數(shù)用于獲取RTC器件當(dāng)前的時(shí)間值,其函數(shù)原型為:

其中,rtc_id表示RTC設(shè)備的編號(hào),系統(tǒng)為每個(gè)RTC設(shè)備都分配了一個(gè)唯一ID,通常都是從0開始順序?yàn)楦鱾€(gè)RTC設(shè)備編號(hào)。例如,i.MX28x片內(nèi)具有RTC外設(shè),其可以作為一個(gè)RTC設(shè)備使用,若還使用I2C總線外接了PCF85063器件,則系統(tǒng)中將新增一個(gè)RTC設(shè)備,此時(shí),系統(tǒng)中共計(jì)將有2個(gè)RTC設(shè)備,它們的編號(hào)分別為0、1。p_tm為指向細(xì)分時(shí)間的指針,其為輸出參數(shù),用以返回獲取到的時(shí)間值,返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示獲取成功,否則表示獲取失敗,失敗的原因可能是該rtc_id對(duì)應(yīng)的設(shè)備不存在。

例如,獲取ID為0的RTC設(shè)備時(shí)間,其范例程序詳見程序清單8.4。

程序清單8.4 獲取RTC設(shè)備時(shí)間的范例程序

2. 設(shè)置時(shí)間

該函數(shù)用于設(shè)置RTC器件當(dāng)前的時(shí)間值,其函數(shù)原型為:

其中,rtc_id表示RTC設(shè)備的編號(hào),p_tm為指向細(xì)分時(shí)間的指針,返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示設(shè)置成功,否則表示設(shè)置失敗。

例如,修改ID為0的RTC設(shè)備時(shí)間,設(shè)置其時(shí)間為2016-08-26 09:32:30的范例程序詳見程序清單8.5。

程序清單8.5 設(shè)置RTC設(shè)備時(shí)間的范例程序

8.3系統(tǒng)時(shí)間

在使用RTC通用接口獲取或設(shè)置時(shí)間時(shí),必須通過rtc_id指定一個(gè)RTC器件,略顯繁瑣,并且在絕大多數(shù)應(yīng)用中,在獲取時(shí)間值時(shí),可能并不關(guān)心時(shí)間是從哪個(gè)RTC設(shè)備中獲取到的。為了使應(yīng)用程序在使用時(shí)間服務(wù)時(shí)更加便捷,AWorks提供了一個(gè)統(tǒng)一的系統(tǒng)時(shí)間,用戶可以實(shí)時(shí)獲取系統(tǒng)時(shí)間,必要時(shí),也可以修改系統(tǒng)時(shí)間。

8.3.1 獲取系統(tǒng)時(shí)間

根據(jù)系統(tǒng)時(shí)間表示形式的不同,可以有3種獲取系統(tǒng)時(shí)間的方式:細(xì)分時(shí)間、日歷時(shí)間和精確日歷時(shí)間。相關(guān)函數(shù)的原型詳見表8.3。

表8.3 獲取系統(tǒng)時(shí)間接口函數(shù)(aw_time.h)

1.獲取細(xì)分時(shí)間

該函數(shù)以細(xì)分時(shí)間的形式獲取當(dāng)前的系統(tǒng)時(shí)間,其函數(shù)原型為:

其中,p_tv為指向細(xì)分時(shí)間的指針,用于獲取細(xì)分時(shí)間。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示獲取成功,其它值表示獲取失敗。范例程序詳見程序清單8.6。

程序清單8.6 獲取細(xì)分時(shí)間范例程序

程序中,每隔1s打印一次當(dāng)前的時(shí)間值。初始時(shí),若未對(duì)時(shí)間作任何設(shè)置,則系統(tǒng)時(shí)間默認(rèn)為:1970-01-01 00:00:00。

2. 獲取日歷時(shí)間

該函數(shù)以日歷時(shí)間的形式獲取當(dāng)前的系統(tǒng)時(shí)間,其函數(shù)原型為:

其中,p_time為指向日歷時(shí)間的指針,用于獲取日歷時(shí)間,不需要通過參數(shù)獲取日歷時(shí)間時(shí),該值可以為NULL。返回值同樣為日歷時(shí)間,特別地,若返回值為-1,表明獲取失敗。由此可見,既可以通過參數(shù)獲得日歷時(shí)間,也可以通過返回值獲得日歷時(shí)間。

通過參數(shù)獲得日歷時(shí)間的范例程序詳見程序清單8.7。

程序清單8.7 通過參數(shù)獲得日歷時(shí)間范例程序

程序中,每隔1s打印一次當(dāng)前的日歷時(shí)間值。初始時(shí),若未對(duì)時(shí)間作任何設(shè)置,則系統(tǒng)的日歷時(shí)間默認(rèn)為0(即起始時(shí)間為:1970-01-01 00:00:00)。

也可以直接通過返回值獲取日歷時(shí)間,范例程序詳見程序清單8.8。

程序清單8.8 通過返回值獲取日歷時(shí)間范例程序

3. 獲取精確日歷時(shí)間

該函數(shù)以精確日歷時(shí)間的形式獲取當(dāng)前的系統(tǒng)時(shí)間,其函數(shù)原型為:

其中,p_tv為指向精確日歷時(shí)間的指針,用于獲取精確日歷時(shí)間。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示獲取成功,其它值表示獲取失敗。范例程序詳見程序清單8.9。

程序清單8.9 獲取精確日歷時(shí)間范例程序

實(shí)際中,由于硬件性能的限制,往往并不能每納秒更新一次納秒計(jì)數(shù)值。不同平臺(tái)實(shí)際納秒計(jì)數(shù)值更新的快慢是不同的。例如,可能每隔2ms才更新一次納秒計(jì)數(shù)值,使納秒計(jì)數(shù)值每次增加2000000。

基于精確日歷時(shí)間,可以完成一些需要精度高于秒的應(yīng)用,例如,在用于運(yùn)動(dòng)員計(jì)時(shí)的秒表中,精度往往需要達(dá)到0.1 ~ 0.01秒。

8.3.2 設(shè)置系統(tǒng)時(shí)間

系統(tǒng)時(shí)間不準(zhǔn)確時(shí),或需要對(duì)系統(tǒng)時(shí)間進(jìn)行初始設(shè)置時(shí),可以通過接口函數(shù)重新設(shè)置系統(tǒng)時(shí)間的值,以便系統(tǒng)時(shí)間準(zhǔn)確運(yùn)行。根據(jù)不同的時(shí)間表示形式,有2種設(shè)置系統(tǒng)時(shí)間方式:使用細(xì)分時(shí)間,使用精確日歷時(shí)間。相關(guān)函數(shù)的原型詳見表8.4。

表8.4 設(shè)置系統(tǒng)時(shí)間接口函數(shù)(aw_time.h)

1. 使用細(xì)分時(shí)間設(shè)置系統(tǒng)時(shí)間

該函數(shù)用于使用細(xì)分時(shí)間的形式設(shè)置系統(tǒng)時(shí)間,其函數(shù)原型為:

其中,p_tm為指向細(xì)分時(shí)間(待設(shè)置的時(shí)間值)的指針。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示設(shè)置成功,其它值表示設(shè)置失敗。

當(dāng)使用細(xì)分時(shí)間設(shè)置時(shí)間值時(shí),細(xì)分時(shí)間的成員tm_wday, tm_yday無需用戶設(shè)置,將在調(diào)用設(shè)置函數(shù)后自動(dòng)更新。設(shè)置當(dāng)前時(shí)間為2016-08-26 09:32:30的范例程序詳見程序清單8.10。

程序清單8.10 使用細(xì)分時(shí)間設(shè)置系統(tǒng)時(shí)間范例程序

程序中,將時(shí)間設(shè)置為2016年8月26日09:32:30。并在while(1)主循環(huán)中,每隔1s打印一次當(dāng)前的系統(tǒng)時(shí)間。

2. 使用精確日歷時(shí)間設(shè)置系統(tǒng)時(shí)間

該函數(shù)用于使用精確日歷時(shí)間的形式設(shè)置系統(tǒng)時(shí)間,其函數(shù)原型為:

其中,p_tv為指向精確日歷時(shí)間(待設(shè)置的時(shí)間值)的指針。函數(shù)返回值為標(biāo)準(zhǔn)的錯(cuò)誤號(hào),返回AW_OK時(shí)表示設(shè)置成功,其它值表示設(shè)置失敗。范例程序詳見程序清單8.11。

程序清單8.11 使用精確日歷時(shí)間設(shè)置系統(tǒng)時(shí)間范例程序

程序中,將精確日歷時(shí)間的秒值設(shè)置為了1472203950,該值是從1970年1月1日0時(shí)0分0秒至2016年8月26日09時(shí)32分30秒的秒數(shù)。即將時(shí)間設(shè)置為2016年8月26日09時(shí)32分30秒。在while(1)主循環(huán)中,每隔1s按照細(xì)分時(shí)間的格式打印一次當(dāng)前的系統(tǒng)時(shí)間,用以驗(yàn)證設(shè)置的結(jié)果。

通常情況下,不會(huì)這樣設(shè)置時(shí)間值,均是采用細(xì)分時(shí)間的方式設(shè)置時(shí)間值,因?yàn)榧?xì)分時(shí)間更加容易閱讀和理解。但是,在一些應(yīng)用場(chǎng)合,使用日歷時(shí)間將是一種更優(yōu)的選擇,例如,需要通過遠(yuǎn)程傳輸時(shí)間值來更新本地的時(shí)間值,顯然,日歷時(shí)間的長(zhǎng)度要遠(yuǎn)遠(yuǎn)小于細(xì)分時(shí)間的長(zhǎng)度,這種情況下,通信過程中,傳輸日歷時(shí)間比傳輸細(xì)分時(shí)間更節(jié)省通信數(shù)據(jù)量,可以節(jié)省一定的帶寬。

8.4 系統(tǒng)節(jié)拍

系統(tǒng)節(jié)拍相當(dāng)于系統(tǒng)的“心臟”,系統(tǒng)節(jié)拍的頻率即為“心臟”跳動(dòng)的頻率,每次“跳動(dòng)”,系統(tǒng)節(jié)拍計(jì)數(shù)器加1,并處理系統(tǒng)相關(guān)的事務(wù)。例如,在系統(tǒng)中,可以存在多個(gè)軟件定時(shí)器(下節(jié)將詳細(xì)介紹),則在每個(gè)系統(tǒng)節(jié)拍產(chǎn)生時(shí),系統(tǒng)將自動(dòng)檢查所有的軟件定時(shí)器,將它們的定時(shí)節(jié)拍數(shù)減1,當(dāng)減至0時(shí),表明定時(shí)器的定時(shí)時(shí)間到。在AWorks中,很多事物的處理都是基于系統(tǒng)節(jié)拍的,因而往往將系統(tǒng)節(jié)拍看作系統(tǒng)的“心臟”。

系統(tǒng)節(jié)拍相關(guān)的函數(shù)原型詳見表8.5

表8.5 系統(tǒng)節(jié)拍接口(aw_system.h)

1. 獲取系統(tǒng)節(jié)拍頻率

一個(gè)系統(tǒng)節(jié)拍對(duì)應(yīng)的實(shí)際時(shí)間與系統(tǒng)節(jié)拍的頻率相關(guān)。系統(tǒng)節(jié)拍頻率越高,系統(tǒng)相關(guān)的事務(wù)處理越頻繁,實(shí)時(shí)性越好,但單位時(shí)間內(nèi),系統(tǒng)本身占用CPU的時(shí)間越長(zhǎng),對(duì)應(yīng)的,用戶能夠使用CPU的時(shí)間也就越短。反之,系統(tǒng)節(jié)拍頻率越低,系統(tǒng)相關(guān)的事物處理越緩慢,實(shí)時(shí)性越差,但單位時(shí)間內(nèi),系統(tǒng)本身占用CPU的時(shí)間越短,對(duì)應(yīng)的,用戶能夠使用CPU的時(shí)間也就越長(zhǎng)。因此,系統(tǒng)節(jié)拍的頻率不能太高,也不能太低,需要設(shè)置為一個(gè)合理的值,通常在幾Hz到幾KHz 之間。

系統(tǒng)實(shí)際使用的節(jié)拍頻率可以通過該函數(shù)獲得,其函數(shù)原型為:

函數(shù)返回值即為系統(tǒng)節(jié)拍頻率,例如,返回值為1000,表示節(jié)拍頻率為1KHz,則每個(gè)節(jié)拍對(duì)應(yīng)的時(shí)間為1ms。獲取并打印當(dāng)前系統(tǒng)節(jié)拍頻率的范例程序詳見程序清單8.12。

程序清單8.12 獲取系統(tǒng)節(jié)拍頻率的范例程序

2. 獲取系統(tǒng)當(dāng)前的節(jié)拍計(jì)數(shù)值

系統(tǒng)中存在一個(gè)系統(tǒng)節(jié)拍計(jì)數(shù)器,初始值為0,系統(tǒng)啟動(dòng)后,其值會(huì)在每個(gè)系統(tǒng)節(jié)拍加1??梢酝ㄟ^該函數(shù)在任意時(shí)刻獲取當(dāng)前系統(tǒng)節(jié)拍的計(jì)數(shù)值,其函數(shù)原型為:

函數(shù)返回值即為當(dāng)前系統(tǒng)節(jié)拍計(jì)數(shù)器的值。aw_tick_t為一個(gè)無符號(hào)整數(shù)類型。其位數(shù)與具體平臺(tái)相關(guān),在32位系統(tǒng)中,其往往定義為32位。

系統(tǒng)節(jié)拍計(jì)數(shù)值往往可以用來計(jì)算一段程序運(yùn)行的時(shí)間,如在程序運(yùn)行前,使用該函數(shù)獲取一個(gè)系統(tǒng)節(jié)拍計(jì)數(shù)值,在程序運(yùn)行結(jié)束后,再使用該函數(shù)獲取一個(gè)系統(tǒng)節(jié)拍計(jì)數(shù)值。它們的差值即為程序運(yùn)行所消耗的系統(tǒng)節(jié)拍個(gè)數(shù),再由系統(tǒng)節(jié)拍頻率可以知道每個(gè)節(jié)拍對(duì)應(yīng)的時(shí)間,從而得到程序運(yùn)行所耗費(fèi)的時(shí)間。范例程序詳見程序清單8.13。

程序清單8.13 獲取系統(tǒng)節(jié)拍計(jì)數(shù)值的范例程序

程序中,作為演示,測(cè)量的是一個(gè)執(zhí)行1000000次空語句的for循環(huán)程序段的時(shí)間。t1與t0的差值即為for循環(huán)程序段耗費(fèi)的系統(tǒng)節(jié)拍數(shù),同時(shí),系統(tǒng)節(jié)拍頻率的倒數(shù)為每個(gè)節(jié)拍對(duì)應(yīng)的時(shí)間(秒),程序中,將時(shí)間值擴(kuò)大了1000倍,即將時(shí)間值的單位轉(zhuǎn)換為了毫秒。

程序中,節(jié)拍差值和對(duì)應(yīng)的時(shí)間都通過手動(dòng)計(jì)算,實(shí)際中,為了方便用戶使用,AWorks提供了相關(guān)操作對(duì)應(yīng)的接口函數(shù)。

3. 計(jì)算兩個(gè)時(shí)刻的節(jié)拍計(jì)數(shù)值的差值

該函數(shù)用于計(jì)算兩個(gè)時(shí)刻的節(jié)拍計(jì)數(shù)值的差值,以計(jì)算某一程序段所耗費(fèi)的時(shí)間節(jié)拍數(shù),其函數(shù)原型為:

t0為某一程序段開始時(shí)刻的系統(tǒng)節(jié)拍計(jì)數(shù)值,t1為對(duì)應(yīng)程序段結(jié)束時(shí)的系統(tǒng)節(jié)拍計(jì)數(shù)值。如優(yōu)化程序清單8.13中計(jì)算節(jié)拍差值的語句,改由通過接口實(shí)現(xiàn),范例程序詳見程序清單8.14。

程序清單8.14 計(jì)算節(jié)拍差值的范例程序

4. 系統(tǒng)節(jié)拍個(gè)數(shù)轉(zhuǎn)換為時(shí)間

在上面的例子中,將系統(tǒng)節(jié)拍個(gè)數(shù)轉(zhuǎn)換為時(shí)間較為繁瑣,需要獲取系統(tǒng)節(jié)拍的頻率,然后經(jīng)過相關(guān)的換算。為了便于用戶使用,提供了直接將系統(tǒng)節(jié)拍值轉(zhuǎn)換為時(shí)間(單位:毫秒)的接口,其函數(shù)原型為:

其中,ticks為系統(tǒng)節(jié)拍個(gè)數(shù),返回值為轉(zhuǎn)換的時(shí)間結(jié)果(單位:毫秒)。如優(yōu)化程序清單8.14中計(jì)算時(shí)間的語句,改由通過接口實(shí)現(xiàn),范例程序詳見程序清單8.15。

程序清單8.15 計(jì)算節(jié)拍值對(duì)應(yīng)時(shí)間的范例程序

5. 時(shí)間轉(zhuǎn)換為系統(tǒng)節(jié)拍個(gè)數(shù)

與將系統(tǒng)節(jié)拍個(gè)數(shù)轉(zhuǎn)換為時(shí)間對(duì)應(yīng),AWorks提供了用于將時(shí)間(單位:毫秒)轉(zhuǎn)換為系統(tǒng)節(jié)拍個(gè)數(shù)的接口,其函數(shù)原型為:

其中,ms是待轉(zhuǎn)換的時(shí)間(單位:毫秒),返回值為轉(zhuǎn)換的結(jié)果(系統(tǒng)節(jié)拍個(gè)數(shù)),即ms參數(shù)指定時(shí)間所對(duì)應(yīng)的節(jié)拍數(shù)。例如,要獲取500ms時(shí)間對(duì)應(yīng)的節(jié)拍個(gè)數(shù),范例程序詳見程序清單8.16。

程序清單8.16 計(jì)算時(shí)間對(duì)應(yīng)節(jié)拍個(gè)數(shù)的范例程序

8.5 軟件定時(shí)器

當(dāng)需要定時(shí)完成某件事情時(shí),可以使用軟件定時(shí)器,其可以提供毫秒級(jí)別的定時(shí)。當(dāng)定時(shí)時(shí)間到時(shí),自動(dòng)通知用戶,以便用戶處理相關(guān)的事務(wù)。軟件定時(shí)器相關(guān)的接口函數(shù)原型詳見表8.6。

表8.6 軟件定時(shí)器相關(guān)接口(aw_timer.h)

1. 定義軟件定時(shí)器實(shí)例

每個(gè)軟件定時(shí)器對(duì)應(yīng)了一個(gè)事務(wù)處理,當(dāng)定時(shí)時(shí)間到時(shí),需要通知用戶,在AWorks中,“通知”是通過回調(diào)機(jī)制實(shí)現(xiàn)的。即初始時(shí),用戶將一個(gè)函數(shù)與定時(shí)器綁定,后續(xù)當(dāng)該定時(shí)器定時(shí)時(shí)間到時(shí),將自動(dòng)回調(diào)用戶綁定的函數(shù),即可達(dá)到將“定時(shí)時(shí)間到”的這一事件通知到用戶。

在使用軟件定時(shí)器前,必須定義一個(gè)軟件定時(shí)器實(shí)例,軟件定時(shí)器的類型為aw_timer_t,其在aw_timer.h文件中定義,具體類型的定義用戶無需關(guān)心,僅需使用該類型定義軟件定時(shí)器實(shí)例即可,即:

其地址即可作為軟件定時(shí)器相關(guān)接口中p_timer參數(shù)的實(shí)參傳遞。

此外,系統(tǒng)中可以有多個(gè)軟件定時(shí)器,每個(gè)定時(shí)器可以有不同的定時(shí)時(shí)間,對(duì)應(yīng)不同的事務(wù)處理,例如:

2. 初始化軟件定時(shí)器

該函數(shù)用于將指定的函數(shù)與軟件定時(shí)器綁定(注冊(cè)),保存在定時(shí)器實(shí)例中,當(dāng)定時(shí)時(shí)間到,則通過函數(shù)指針p_func調(diào)用指定的函數(shù),即注冊(cè)回調(diào)函數(shù)機(jī)制。初始化函數(shù)的原型為:

其中,p_timer為指向使用aw_timer_t類型定義的軟件定時(shí)器實(shí)例的指針,p_func指向本次注冊(cè)的回調(diào)函數(shù),當(dāng)定時(shí)時(shí)間到時(shí),系統(tǒng)將自動(dòng)調(diào)用p_func指向的函數(shù)(注冊(cè)回調(diào)函數(shù)),回調(diào)函數(shù)的類型為aw_pfuncvoid_t,該類型是AWorks中定義的函數(shù)指針類型,其具體定義(aw_types.h)如下:

由此可見,p_func指向的函數(shù)類型是無返回值,具有一個(gè)void*型參數(shù)的函數(shù)。

初始化函數(shù)的p_arg形參即為用戶自定義的參數(shù),在定時(shí)時(shí)間到調(diào)用回調(diào)函數(shù)時(shí),會(huì)將此處設(shè)置的p_arg作為參數(shù)傳遞給回調(diào)函數(shù),如果不使用此參數(shù),則設(shè)置為NULL。

初始化函數(shù)的使用范例詳見程序清單8.17。

程序清單8.17 初始化軟件定時(shí)器范例程序

3. 啟動(dòng)軟件定時(shí)器

完成定時(shí)器的初始化后,即可設(shè)置定時(shí)時(shí)間(單位:ms)并啟動(dòng)定時(shí)器,定時(shí)器開始工作,定時(shí)器定時(shí)的單位為系統(tǒng)節(jié)拍,啟動(dòng)定時(shí)器后,在每個(gè)系統(tǒng)節(jié)拍將軟件定時(shí)器的節(jié)拍值減1,當(dāng)減到0時(shí),表明定時(shí)時(shí)間到,則自動(dòng)調(diào)用初始化時(shí)注冊(cè)的回調(diào)函數(shù)。啟動(dòng)軟件定時(shí)器的函數(shù)原型為:

其中,p_timer指向軟件定時(shí)器實(shí)例,ticks為定時(shí)的節(jié)拍數(shù)。如啟動(dòng)定時(shí)器,并定時(shí)500ms,則范例程序詳見程序清單8.18

程序清單8.18 啟動(dòng)軟件定時(shí)器范例程序

注意,默認(rèn)情況下,啟動(dòng)軟件定時(shí)器后,僅定時(shí)一次,即定時(shí)時(shí)間到后,調(diào)用用戶注冊(cè)的回調(diào)函數(shù),整個(gè)定時(shí)過程結(jié)束。因此,上述程序僅能觀察到500ms后LED點(diǎn)亮,后續(xù)不會(huì)再有其它任何現(xiàn)象。

如需再次定時(shí),則必須再次啟動(dòng)軟件定時(shí)器。特別地,若需要周期性的定時(shí),則可以在回調(diào)函數(shù)執(zhí)行結(jié)束時(shí),再次啟動(dòng)軟件定時(shí)器。例如,需要每隔500ms翻轉(zhuǎn)一次LED,實(shí)現(xiàn)LED閃爍,則范例程序詳見程序清單8.19。

程序清單8.19 軟件定時(shí)器周期性定時(shí)范例程序

4. 關(guān)閉軟件定時(shí)器

當(dāng)不再需要定時(shí)服務(wù)時(shí),可以關(guān)閉軟件定時(shí)器,其函數(shù)原型為:

其中,p_timer指向軟件定時(shí)器實(shí)例,用于指定需要關(guān)閉的軟件定時(shí)器。例如,在程序清單8.19的基礎(chǔ)上,若需要LED閃爍10s后自動(dòng)停止閃爍,則可以在啟動(dòng)軟件定時(shí)器10s后關(guān)閉軟件定時(shí)器,范例程序詳見程序清單8.20。

程序清單8.20 關(guān)閉軟件定時(shí)器范例程序

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

    關(guān)注

    13

    文章

    409

    瀏覽量

    31445

原文標(biāo)題:AWorks軟件篇 — 時(shí)間管理

文章出處:【微信號(hào):ZLG_zhiyuan,微信公眾號(hào):ZLG致遠(yuǎn)電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    面向AWorks框架管理文件的方法和數(shù)據(jù)結(jié)構(gòu)

    文件系統(tǒng)是在存儲(chǔ)設(shè)備中(SD Card、NAND Flash…)組織文件的方法和數(shù)據(jù)結(jié)構(gòu),用于管理文件。AWorks定義了文件系統(tǒng)的通用接口,例如,打開、讀/寫、關(guān)閉文件等等。
    的頭像 發(fā)表于 06-05 09:18 ?5663次閱讀
    <b class='flag-5'>面向</b><b class='flag-5'>AWorks</b><b class='flag-5'>框架</b><b class='flag-5'>管理</b>文件的方法和數(shù)據(jù)結(jié)構(gòu)

    面向對(duì)象的程序設(shè)計(jì)

    面向對(duì)象的程序設(shè)計(jì)
    發(fā)表于 08-18 21:04

    基于labview員工管理程序

    基于labview員工管理程序
    發(fā)表于 04-21 19:33

    第12章 系統(tǒng)時(shí)鐘節(jié)拍和時(shí)間管理

    轉(zhuǎn)rtx操作系統(tǒng)本章節(jié)為大家講解RTX操作系統(tǒng)的時(shí)鐘節(jié)拍和時(shí)間管理函數(shù),其中時(shí)間管理函數(shù)是RTX的基本函數(shù),初學(xué)者務(wù)必要掌握。 本章教程配套的例子含Cortex-M3內(nèi)核的STM32F103
    發(fā)表于 10-05 08:59

    管理程序選擇

    親愛的社區(qū),如果需要多個(gè)虛擬機(jī)(最多8個(gè)),每個(gè)虛擬機(jī)需要2Mb vGPU,我們希望聽到您對(duì)虛擬機(jī)管理程序選擇問題的看法。我正在對(duì)可用的虛擬機(jī)管理程序功能與網(wǎng)格配對(duì)進(jìn)行一些探索,并發(fā)現(xiàn)WMware
    發(fā)表于 09-10 17:09

    程序員如何做好時(shí)間管理?

    最近在督促各位開發(fā)者按要求產(chǎn)出技術(shù)文章,在沒完成的開發(fā)者中,我詢問原因,大家的原因都相似:最近太忙了!有忙考研的,有忙項(xiàng)目的,有出差的....大家工作都不容易,但也不乏開發(fā)者中有時(shí)間管理高手!請(qǐng)問大家作為程序員,都是怎么做好時(shí)間管理
    發(fā)表于 11-27 10:48

    μC/OS-III中斷管理時(shí)間管理介紹

    μC/OS-III中斷管理時(shí)間管理
    發(fā)表于 01-11 06:35

    時(shí)間管理和定時(shí)器編程基本知識(shí)匯總

    Linux系統(tǒng)編程第08期:時(shí)間管理和定時(shí)器編程 6年嵌入式開發(fā)經(jīng)驗(yàn),在多家...
    發(fā)表于 12-23 08:32

    Java面向對(duì)象程序設(shè)計(jì)教程

    主要內(nèi)容 1.1 面向過程與面向對(duì)象的方法論比較1.1.1 關(guān)于系統(tǒng)建模方法1.1.2 關(guān)于程序設(shè)計(jì)方法1.1.3 面向過程方法的優(yōu)勢(shì)1.1.4
    發(fā)表于 04-10 15:29 ?0次下載
    Java<b class='flag-5'>面向</b>對(duì)象<b class='flag-5'>程序設(shè)計(jì)</b>教程

    西安交通大學(xué)管理學(xué)院項(xiàng)目時(shí)間管理

    西安交通大學(xué)管理學(xué)院項(xiàng)目時(shí)間管理:6.1進(jìn)度計(jì)劃6.2進(jìn)度控制6.1.1項(xiàng)目時(shí)間管理的內(nèi)容6.1.2項(xiàng)目時(shí)間管理的方法項(xiàng)目時(shí)間管理定義&nb
    發(fā)表于 05-07 21:17 ?0次下載

    時(shí)間管理手冊(cè)

    時(shí)間管理手冊(cè)時(shí)間的寶貴在于它既不能創(chuàng)造,也不能復(fù)還。一、“鐘表時(shí)間”的終結(jié)“鐘表時(shí)間”是指鐘表所顯示的物理的、幾何學(xué)的時(shí)間。這如同一條直線,
    發(fā)表于 08-14 19:58 ?30次下載

    ADAM設(shè)備管理程序DevMgr.exe安裝

    【LabVIEW從入門到精通】5.7.1.1 ADAM設(shè)備管理程序DevMgr.exe安裝
    發(fā)表于 01-08 15:50 ?0次下載

    板卡設(shè)備管理程序DevMgr.exe安裝

    【LabVIEW從入門到精通】6.4.2.2 板卡設(shè)備管理程序DevMgr.exe安裝
    發(fā)表于 01-08 15:52 ?0次下載

    基于Zynq UltraScale+ MPSoC上運(yùn)行 Xen 管理程序

    熟悉運(yùn)行在賽靈思 Zynq UltraScale+ MPSoC 上的 Xen 管理程序。 賽靈思和 DornerWorks 的系統(tǒng)軟件團(tuán)隊(duì)在賽靈思的 Zynq? Ultrascale+? MPSoC
    發(fā)表于 11-16 20:17 ?3538次閱讀
    基于Zynq UltraScale+ MPSoC上運(yùn)行 Xen <b class='flag-5'>管理程序</b>

    面向對(duì)象的程序設(shè)計(jì)總結(jié)與過程化程序設(shè)計(jì)有什么區(qū)別?

    面向對(duì)象程序設(shè)計(jì)(簡(jiǎn)稱OOP)技術(shù)最近幾年在計(jì)算機(jī)領(lǐng)域得到了迅猛發(fā)展,它是程序設(shè)計(jì)方法的一場(chǎng)革命。與傳統(tǒng)的結(jié)構(gòu)化程序設(shè)計(jì)面向過程
    發(fā)表于 09-19 14:12 ?0次下載
    <b class='flag-5'>面向</b>對(duì)象的<b class='flag-5'>程序設(shè)計(jì)</b>總結(jié)與過程化<b class='flag-5'>程序設(shè)計(jì)</b>有什么區(qū)別?