真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

c語言trigger函數(shù) c語言 throw

急求:我編的c語言控制程序,如何更改觸發(fā)方式(按鍵判斷改為高低電平判斷),而保持原程序執(zhí)行結(jié)果。

新建工程

創(chuàng)新互聯(lián)擁有網(wǎng)站維護(hù)技術(shù)和項目管理團(tuán)隊,建立的售前、實施和售后服務(wù)體系,為客戶提供定制化的成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)站維護(hù)、成都服務(wù)器托管解決方案。為客戶網(wǎng)站安全和日常運維提供整體管家式外包優(yōu)質(zhì)服務(wù)。我們的網(wǎng)站維護(hù)服務(wù)覆蓋集團(tuán)企業(yè)、上市公司、外企網(wǎng)站、商城網(wǎng)站建設(shè)、政府網(wǎng)站等各類型客戶群體,為全球超過千家企業(yè)提供全方位網(wǎng)站維護(hù)、服務(wù)器維護(hù)解決方案。

首先新建工程,并加以簡單配置,可以參考我的分享:《IAR如何建立工程》,如下為硬件電路圖:

cc2530 外部中斷

查看cc2530 datasheet可以知道,2530的所有外部引腳均可以配置為中斷模式,如下圖所示:P0\P1\P2 中,P0.0-0.7共享一個中斷地址,P1.0-1.7共享一個中斷地址,P2.0-P2.3共享一個中斷地址。

PxIEN

在引腳中斷功能配置時,常需要設(shè)置P0IEN,主要是開啟/關(guān)閉引腳的中斷功能。如下圖所示,為1時開啟,為0時關(guān)閉中斷。

開啟S1按鈕中斷:

P0IEN |= BIT4;

PICTL

PICTL可以控制Px口中斷觸發(fā)信號:上升沿觸發(fā)、下降沿觸發(fā)。由于按鍵在未按下時處于高電平,按下后為低電平,松開后又為高電平,所以會產(chǎn)生下降沿觸發(fā)信號,配置為下降沿觸發(fā)即可:

PICTL |= BIT0; ?//falling edge

IEN1

除了配置引腳,還需要開啟端口引腳中斷使能,如下所示開啟PO口中斷使能:

IEN1 |= BIT5; //P0 interrupt

PxIFG

在開啟中斷前需要先清除中斷標(biāo)志,以免誤入中斷造成系統(tǒng)混亂。

P0IFG = ~BIT4;

系統(tǒng)中斷使能

學(xué)習(xí)51都知道,在任何中斷操作時,都需要開啟系統(tǒng)中斷:

EA = 1; //system interrupt open

中斷函數(shù)書寫

#pragma vector = P0INT_VECTOR

__interrupt void P0_isr(void)

{

wg_waitUs(10);

P0IFG = ~BIT4;

P0IF = ~BIT4;

P1_0 = ~P1_0; //led1 trigger

}

其中wg_waitUs()是延時函數(shù),起到按鍵消抖作用。

代碼框架

void wg_ledInit(void)

{

P1DIR |= BIT0;

P1 |= BIT0;

}

void wg_btnInit(void)

{

P0IEN |= BIT4; // P0.4 button input

PICTL |= BIT0; ?//falling edge

IEN1 |= BIT5; //P0 interrupt

P0IFG = ~BIT4;

EA = 1; //system interrupt open

}

void wg_waitUs(uint16 duration)

{

while (duration--)

{

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

asm("NOP");

}

}

void main(void)

{

wg_ledInit();

wg_btnInit();

//loop

for(;;)

{

;//

}

}

#pragma vector = P0INT_VECTOR

__interrupt void P0_isr(void)

{

wg_waitUs(10);

P0IFG = ~BIT4;

P0IF = ~BIT4;

P1_0 = ~P1_0; //led1 trigger

}

c語言怎么使用sql觸發(fā)器

c語言怎么使用sql觸發(fā)器:

定義: 何為觸發(fā)器?在SQL Server里面也就是對某一個表的一定的操作,觸發(fā)某種條件,從而執(zhí)行的一段程序。觸發(fā)器是一個特殊的存儲過程。

常見的觸發(fā)器有三種:分別應(yīng)用于Insert , Update , Delete 事件。

我為什么要使用觸發(fā)器?比如,這么兩個表:

Create Table Student( --學(xué)生表

StudentID int primary key, --學(xué)號

....

)

Create Table BorrowRecord( --學(xué)生借書記錄表

BorrowRecord int identity(1,1), --流水號

StudentID int , --學(xué)號

BorrowDate datetime, --借出時間

ReturnDAte Datetime, --歸還時間

...

)

用到的功能有:

1.如果我更改了學(xué)生的學(xué)號,我希望他的借書記錄仍然與這個學(xué)生相關(guān)(也就是同時更改借書記錄表的學(xué)號);

2.如果該學(xué)生已經(jīng)畢業(yè),我希望刪除他的學(xué)號的同時,也刪除它的借書記錄。

等等。

這時候可以用到觸發(fā)器。對于1,創(chuàng)建一個Update觸發(fā)器:

Create Trigger truStudent

On Student --在Student表中創(chuàng)建觸發(fā)器

for Update --為什么事件觸發(fā)

As --事件觸發(fā)后所要做的事情

if Update(StudentID)

begin

Update BorrowRecord

Set StudentID=i.StudentID

From BorrowRecord br , Deleted d ,Inserted i --Deleted和Inserted臨時表

Where br.StudentID=d.StudentID

end

理解觸發(fā)器里面的兩個臨時的表:Deleted , Inserted 。注意Deleted 與Inserted分別表示觸發(fā)事件的表“舊的一條記錄”和“新的一條記錄”。

一個數(shù)據(jù)庫系統(tǒng)中有兩個虛擬表用于存儲在表中記錄改動的信息,分別是:

虛擬表Inserted 虛擬表Deleted

在表記錄新增時 存放新增的記錄 不存儲記錄

修改時 存放用來更新的新記錄 存放更新前的記錄

刪除時 不存儲記錄 存放被刪除的記錄

一個Update 的過程可以看作為:生成新的記錄到Inserted表,復(fù)制舊的記錄到Deleted表,然后刪除Student記錄并寫入新紀(jì)錄。

對于2,創(chuàng)建一個Delete觸發(fā)器

Create trigger trdStudent

On Student

for Delete

As

Delete BorrowRecord

From BorrowRecord br , Delted d

Where br.StudentID=d.StudentID

從這兩個例子我們可以看到了觸發(fā)器的關(guān)鍵:A.2個臨時的表;B.觸發(fā)機(jī)制。

invoke和trigger的區(qū)別

在語言中一般 Invoke是立即調(diào)用一段委托代碼,相當(dāng)于調(diào)用了一個函數(shù)。

而trigger是觸發(fā)一個事件,而事件機(jī)制允許注冊多個事件。也即trigger所有綁定到該事件的監(jiān)聽器都會被觸發(fā)。

invoke,trigger兩種思路了,如果只想簡單的執(zhí)行一個函數(shù)可以用invoke,如果是類似事件那種可能有多個函數(shù)被調(diào)用就用trigger。

觸發(fā)器到底是什么意思?

一個觸發(fā)器是一種聲明,告訴數(shù)據(jù)庫應(yīng)該在執(zhí)行特定的操作的時候執(zhí)行特定的函數(shù)。 觸發(fā)器可以定義在一個INSERT,UPDATE, 或者 DELETE 命令之前或者之后執(zhí)行,要么是對每個被修改的行一次, 要么是每條 SQL 一次。 如果發(fā)生觸發(fā)器事件,那么將在合適的時刻調(diào)用觸發(fā)器的函數(shù)以處理該事件。

觸發(fā)器函數(shù)必須在創(chuàng)建觸發(fā)器之前,作為一個沒有參數(shù)并且返回trigger類型的函數(shù)定義。 (觸發(fā)器函數(shù)通過特殊的 TriggerData 結(jié)構(gòu)接收其輸入,而不是用普通函數(shù)參數(shù)那種形式。)

一旦創(chuàng)建了一個合適的觸發(fā)器函數(shù),觸發(fā)器就用 CREATE TRIGGER 創(chuàng)建。同一個觸發(fā)器函數(shù)可以用于多個觸發(fā)器。

PostgreSQL 提供按行觸發(fā)的觸發(fā)器和按語句觸發(fā)的觸發(fā)器。在按行觸發(fā)的觸發(fā)器里, 觸發(fā)器函數(shù)是為觸發(fā)觸發(fā)器的語句影響的每一行執(zhí)行一次。相比之下,一個按語句觸發(fā)的觸發(fā)器是在每執(zhí)行一次合適的語句執(zhí)行一次的, 而不管影響的行數(shù)。特別是,一個影響零行的語句將仍然導(dǎo)致任何適用的按語句觸發(fā)的觸發(fā)器的執(zhí)行。 這兩種類型的觸發(fā)器有時候分別叫做行級別的觸發(fā)器和語句級別的觸發(fā)器。

觸發(fā)器還通常分成 before 觸發(fā)器和 after 觸發(fā)器。 語句級別的 "before" 觸發(fā)器通常在語句開始做任何事情之前觸發(fā), 而語句級別的 "after" 觸發(fā)器在語句的最后觸發(fā)。 行級別的 "before" 觸發(fā)器在對特定行進(jìn)行操作的時候馬上觸發(fā), 而行級別的 "after" 觸發(fā)器在語句結(jié)束的時候觸發(fā)(但是在任何語句級別的 "after" 觸發(fā)器之前)。

按語句觸發(fā)的觸發(fā)器應(yīng)該總是返回 NULL。 如果必要,按行觸發(fā)的觸發(fā)器函數(shù)可以給調(diào)用它的執(zhí)行者返回一表數(shù)據(jù)行(一個類型為 HeapTuple 的數(shù)值), 那些在操作之前觸發(fā)的觸發(fā)器有以下選擇:

它可以返回 NULL 以忽略對當(dāng)前行的操作。 這就指示執(zhí)行器不要執(zhí)行調(diào)用該觸發(fā)器的行級別操作(對特定行的插入或者更改))。

只用于INSERT和UPDATE觸發(fā)器: 返回的行將成為被插入的行或者是成為將要更新的行。 這樣就允許觸發(fā)器函數(shù)修改被插入或者更新的行。

一個無意導(dǎo)致任何這類行為的在操作之前觸發(fā)的行級觸發(fā)器必須仔細(xì)返回那個被當(dāng)作新行傳進(jìn)來的同一行 (也就是說,對于 INSERT 和 UPDATE 觸發(fā)器而言,是 NEW 行, 對于 DELETE 觸發(fā)器而言,是 OLD 行)。

對于在操作之后觸發(fā)的行級別的觸發(fā)器,其返回值會被忽略,因此他們可以返回NULL。

如果多于一個觸發(fā)器為同樣的事件定義在同樣的關(guān)系上, 觸發(fā)器將按照由名字的字母順序排序的順序觸發(fā)。 如果是事件之前觸發(fā)的觸發(fā)器,每個觸發(fā)器返回的可能已經(jīng)被修改過的行成為下一個觸發(fā)器的輸入。 如果任何事件之前觸發(fā)的觸發(fā)器返回 NULL 指針, 那么對該行的操作將被丟棄并且隨后的觸發(fā)器不會被觸發(fā)。

通常,行的 before 觸發(fā)器用于檢查或修改將要插入或者更新的數(shù)據(jù)。 比如,一個 before 觸發(fā)器可以用于把當(dāng)前時間插入一個 timestamp 字段, 或者跟蹤該行的兩個元素是一致的。行的 after 觸發(fā)器多數(shù)用于填充或者更新其它表, 或者對其它表進(jìn)行一致性檢查。這么區(qū)分工作的原因是, after 觸發(fā)器肯定可以看到該行的最后數(shù)值, 而 before 觸發(fā)器不能;還可能有其它的 before 觸發(fā)器在其后觸發(fā)。 如果你沒有具體的原因定義觸發(fā)器是 before 還是 after,那么 before 觸發(fā)器的效率高些, 因為操作相關(guān)的信息不必保存到語句的結(jié)尾。

如果一個觸發(fā)器函數(shù)執(zhí)行 SQL 命令,然后這些命令可能再次觸發(fā)觸發(fā)器。 這就是所謂的級聯(lián)觸發(fā)器。對級聯(lián)觸發(fā)器的級聯(lián)深度沒有明確的限制。 有可能出現(xiàn)級聯(lián)觸發(fā)器導(dǎo)致同一個觸發(fā)器的遞歸調(diào)用的情況; 比如,一個 INSERT 觸發(fā)器可能執(zhí)行一個命令, 把一個額外的行插入同一個表中,導(dǎo)致 INSERT 觸發(fā)器再次激發(fā)。 避免這樣的無窮遞歸的問題是觸發(fā)器程序員的責(zé)任。

在定義一個觸發(fā)器的時候,我們可以聲明一些參數(shù)。 在觸發(fā)器定義里面包含參數(shù)的目的是允許類似需求的不同觸發(fā)器調(diào)用同一個函數(shù)。 比如,我們可能有一個通用的觸發(fā)器函數(shù), 接受兩個字段名字,把當(dāng)前用戶放在第一個,而當(dāng)前時間戳在第二個。 只要我們寫得恰當(dāng),那么這個觸發(fā)器函數(shù)就可以和觸發(fā)它的特定表無關(guān)。 這樣同一個函數(shù)就可以用于有著合適字段的任何表的 INSERT 事件,實現(xiàn)自動跟蹤交易表中的記錄創(chuàng)建之類的問題。如果定義成一個 UPDATE 觸發(fā)器,我們還可以用它跟蹤最后更新的事件。

每種支持觸發(fā)器的編程語言都有自己的方法讓觸發(fā)器函數(shù)得到輸入數(shù)據(jù)。 這些輸入數(shù)據(jù)包括觸發(fā)器事件的類型(比如,INSERT 或者 UPDATE)以及所有在 CREATE TRIGGER 里面列出的參數(shù)。 對于低層次的觸發(fā)器,輸入數(shù)據(jù)也包括 INSERT 和 UPDATE 觸發(fā)器的 NEW 行,和/或 UPDATE 和 DELETE 觸發(fā)器的 OLD 行。 語句級別的觸發(fā)器目前沒有任何方法檢查改語句修改的獨立行。


分享文章:c語言trigger函數(shù) c語言 throw
文章地址:http://weahome.cn/article/dosgcgs.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部