一、 使用時(shí)鐘和定時(shí)器(alarm系統(tǒng)調(diào)用)
成都創(chuàng)新互聯(lián)公司從2013年創(chuàng)立,是專(zhuān)業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項(xiàng)目成都網(wǎng)站建設(shè)、網(wǎng)站設(shè)計(jì)網(wǎng)站策劃,項(xiàng)目實(shí)施與項(xiàng)目整合能力。我們以讓每一個(gè)夢(mèng)想脫穎而出為使命,1280元金溪做網(wǎng)站,已為上家服務(wù),為金溪各地企業(yè)和個(gè)人服務(wù),聯(lián)系電話:13518219792
#include unistd.h
unsigned alarm(unsigned secs);
/*returns secs left on previous alarm or zero if none */
alarm也稱為鬧鐘函數(shù),它可以在進(jìn)程中設(shè)置一個(gè)定時(shí)器,當(dāng)指定的時(shí)間到時(shí),它向進(jìn)程發(fā)送SIGALRM信號(hào)。需要注意的是,一個(gè)進(jìn)程只能有一個(gè)定時(shí)器。當(dāng)報(bào)警開(kāi)始時(shí),會(huì)發(fā)送一個(gè)SIGALRM,子進(jìn)程繼承其父進(jìn)程的報(bào)警時(shí)鐘值,但實(shí)際的時(shí)鐘并不共享。執(zhí)行exec后,報(bào)警時(shí)鐘仍然保持其設(shè)置。
alarm按照secs指定的秒數(shù)來(lái)設(shè)置時(shí)鐘,如果secs為0,則關(guān)閉報(bào)警時(shí)鐘,這樣做是很有必要的,如果recvfrom函數(shù)讀到數(shù)據(jù),沒(méi)到設(shè)定時(shí)鐘值時(shí)就返回了,而你又忘記關(guān)閉報(bào)警時(shí)鐘的話,那么它將在不久后報(bào)警,在計(jì)算機(jī)看來(lái),1秒都是一個(gè)很漫長(zhǎng)的時(shí)間,1秒后的報(bào)警可能會(huì)造成本進(jìn)程中其他函數(shù)執(zhí)行的中斷,因?yàn)橐粋€(gè)進(jìn)程只有一個(gè)定時(shí)器,所以使用完定時(shí)器后,一定要關(guān)閉定時(shí)器。
實(shí)例代碼:
詳細(xì)代碼
對(duì)于C51單片機(jī),其內(nèi)部總共有五級(jí)中斷源
分別為外部中斷0、定時(shí)器0、外部中斷1、定時(shí)器1及串行中斷。
C51單片機(jī)的中斷使用時(shí),主要是通過(guò)中斷服務(wù)號(hào)來(lái)決定的。
如你定義一個(gè)中斷服務(wù)函數(shù):
void KEY(void) intterrupt 0
{
}
當(dāng)外部中斷0申請(qǐng)中斷時(shí)
會(huì)自動(dòng)根據(jù)interrupt后面的0,找到上面定義的這個(gè)中斷服務(wù)函數(shù)。
對(duì)于其他四個(gè)中斷源,其對(duì)應(yīng)的中斷號(hào)分別為1、2 、3、4
2秒的應(yīng)該要用定時(shí)器好一點(diǎn)吧,while(!兩秒標(biāo)志)這樣就可以了(兩秒定時(shí)一到,則置位兩秒標(biāo)志位),如果真的對(duì)實(shí)時(shí)性要求非常高的話,就是說(shuō)兩秒一到,不管程序執(zhí)行到哪里,都應(yīng)該結(jié)束這個(gè)循環(huán),那就要用到任務(wù)的調(diào)度了,這個(gè)比較麻煩,因?yàn)闀?huì)涉及到操作系統(tǒng)了,uC/OS可以實(shí)現(xiàn)這個(gè)。至于你說(shuō)的讓循環(huán)程序執(zhí)行一次就結(jié)束的,既然是只有一次,那就不叫循環(huán)了對(duì)吧,不要循環(huán),直接順序執(zhí)行下來(lái)就是一次了嘛