版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、rtx51小型實時操作系統(tǒng)的應(yīng)用體會2007年06月27日 星期三 23:53最近在做設(shè)計的時候老遇到一些幾個任務(wù)需要同時進行的情況,剛開始想自己去做一個多任務(wù)的程序(因為稱不上系統(tǒng)),想用一個脈沖計數(shù)的方法來實現(xiàn)多任務(wù)切換,但是感覺實現(xiàn)起來比較麻煩。無意中發(fā)現(xiàn)了51單片機下個rtx51實時操作系統(tǒng)(本人以前不知道的),后來就去找相關(guān)資料。發(fā)現(xiàn)這方面的資料在網(wǎng)上很少,也很雜亂。經(jīng)過一段時間的學(xué)習(xí),我有了個大概的了解。下面給大家講述一下:RTX51是一個用于8051系列處理器多任務(wù)實時操作系統(tǒng)。RTX51可以簡化那些復(fù)雜而且時間要求嚴(yán)格的工程的軟件設(shè)計工作。有二個不同的RTX51版本可以利用:R
2、TX51 Full 使用四個任務(wù)優(yōu)先權(quán)完成同時存在時間片輪轉(zhuǎn)調(diào)度和搶先的任務(wù)切換 RTX51工作在與中斷功能相似的狀態(tài)下 信號和信息可以通過郵箱系統(tǒng)在任務(wù)之間互相傳遞 你可以從一存池中分配和釋放內(nèi)存 你可以強迫一個任務(wù)等待中斷 超時或者是從另一個任務(wù)或中斷發(fā)出的信號或信息RTX51 Tiny 是一個 RTX51的子集 它可以很容易地在沒有任何外部存儲器的單片8051系統(tǒng)上運轉(zhuǎn)。 除了下列例外 RTX51 Tiny支持許多在RTX51中的特征。RTX51 Tiny僅支持時間片輪轉(zhuǎn)任務(wù)切換和使用信號進行任務(wù)切換 不支持搶先式的任務(wù)切換。不包括消息歷程。沒有存儲器池分配程序 。RTX51使用一個80
3、51硬件計時器中斷作為定時程序。 產(chǎn)生的周期性中斷用于驅(qū)動 RTX51時鐘。 RTX51不需要在你的程序中擁有一個主函數(shù) 它將自動開始執(zhí)行任務(wù) 0 如果你確實有一個主函數(shù) 你必須利用 RTX51 Tiny中的 os_create_task函數(shù)或 RTX51中的 os_start_system函數(shù)手工啟動 RTX51。 下列例子顯示一個只使用時間片輪轉(zhuǎn)任務(wù)調(diào)度的簡單的 RTX51應(yīng)用程序 在本程序里的二個任務(wù)是簡單計數(shù)器回路 rtx51開始執(zhí)行函數(shù)名為 job0的任務(wù) 0 。 這些功能添加了另一個叫做 job1任務(wù)。 在 job0運行一會兒以后 RTX51切換到 job1。 在 job0運行一會
4、兒以后、RTX51轉(zhuǎn)回到j(luò)ob0。 這個過程將不確定地重復(fù)下去 #include <rtx51tny.h> int counter0; int counter1; void job0 (void) _task_ 0 os_create (1); /* mark task 1 as ready */ while (1) /* loop forever */ counter0+; /* update the counter */ void job1 (void) _task_ 1 while (1) /* loop forever */ counter1+; /* update the
5、 counter */ 今天夜已很深了,明早還有考試,對不起了,不寫了。我介紹幾個資料的下載地址,大家自己去看吧!【轉(zhuǎn)】 KEIL RTX51 TINY內(nèi)核的分析與應(yīng)用2011年04月18日 星期一 19:28轉(zhuǎn)載自 lan042最終編輯 lan042特性:最大任務(wù)數(shù):16最大激活的任務(wù)數(shù):16所需的CODE空間:最大900ByteDATA空間:7字節(jié)STACK空間:3字節(jié)XDATA空間:0字節(jié)時鐘數(shù):0個系統(tǒng)時鐘分頻:1000-65535中斷嵌套:小于20層任務(wù)切換時間:100-700時鐘周期工具要求:以下軟件應(yīng)用需要用 RTX51 TinyC51紡編譯器A51 Marco Assemble
6、rBL51 Linker or Lx51 LinkerRTX51TNY.LIB 和 RTX51BT.LIB必需存儲在庫路徑上,一般是文件夾KEILC51LIBRTX51TNY.H包含文件必須存儲在包含文件路徑上,一般是文件夾KEILC51INC目標(biāo)要求:應(yīng)用程序可能需要外部分的數(shù)據(jù)存儲空間,但內(nèi)核并不需要外部存儲空間KEIL C51支持各種存儲模式:選擇存儲模式只影響應(yīng)用程序的存的數(shù)據(jù)存儲,操作系統(tǒng)的變量和堆棧只存在于51的內(nèi)存中,即DATA和IDATA,一般情況下,RTX51 Tiny的應(yīng)用只需要小存儲模式在RTX51 Tiny中每個應(yīng)用程序運行的時間是固定的,支持cooperative任務(wù)
7、切換和round-robin任務(wù)切換,不支持preemptive任務(wù)切換和任務(wù)優(yōu)先級。如果應(yīng)用程序需要preemptive任務(wù)切換則必須使用RTX51 FULL-Time Executive版本。中斷:RTX51 Tiny的工作與中斷函數(shù)是并行工作的。中斷服務(wù)程序可以向RTX51 Tiny的任務(wù)發(fā)信號(使用函數(shù)isr_send_signal),也可以置位作任務(wù)的Ready標(biāo)志(使用函數(shù)isr_set _ready)在RTX51 Tiny中必須使能中斷,但是在RTX51 Tiny沒有中斷服務(wù)管理RTX51 Tiny使用Timer0和Timer0中斷。全局中斷禁能和Timer0中斷禁能會使RTX5
8、1 Tiny停止工作,所以只能在短時間內(nèi)禁能中斷??芍厝牒瘮?shù)非可重入的C函數(shù)不能被多個任務(wù)或中斷過程調(diào)用。非可重入的函數(shù)的參數(shù)和變量保存在靜態(tài)存儲空間中,當(dāng)它們同時被多個任務(wù)調(diào)用時,這些參數(shù)和變量就可能被覆蓋了。你可以在多任務(wù)系統(tǒng)中調(diào)用非可重入函數(shù)如果你能保證他們不會同進行。不過,這就意味著必須能 round-robin任務(wù)調(diào)度,并且非可重入函數(shù)不可以調(diào)用RTX51 Tiny的功能函數(shù)。只使用寄存器就量和自動變量的函數(shù)自然地就是可重入函數(shù),可以毫無限制地在RTX51 Tiny中調(diào)用。C51編譯器支可重入函數(shù)??芍厝牒褏?shù)和局部變量保存在堆棧中。這樣就可以保證他們被多個任務(wù)同時使用。RTX51
9、 Tiny并不管理可重入函數(shù)的堆棧,因些,如果你在應(yīng)用程序中使用了可重入函數(shù),你必須確保這些功能函數(shù)不調(diào)用任務(wù)RTX51 Tiny的系統(tǒng)函數(shù),并且可重入函數(shù)不會被round-robin任務(wù)切換所中斷。注意:如果你打自在多個任務(wù)或中斷中調(diào)用可重入或非可重入函數(shù)必須禁止round-robin任務(wù)切換。運行時庫:所有的C51可重入運行時庫可能毫無限制地在所用任務(wù)中使用。非可重入時庫的要與可重入函數(shù)的要求相同。多個數(shù)據(jù)指針C51編譯器允許使用多個數(shù)據(jù)指針。RTX51 Tiny對他們不進行管理,所以在應(yīng)用中你必須小心Essentially,你必須確保在改變數(shù)據(jù)指針時不會發(fā)生round-robin切換。注
10、意:當(dāng)你打算使用多數(shù)據(jù)指針時你最好禁止round-robin切換。算術(shù)單元(說法與多個數(shù)據(jù)指針相同)工作寄存器組RTX51 Tiny的所有任務(wù)都使用工作組0。 因些,所有的任務(wù)都必須使用C51默認的編譯選項:REGISTERBANK (0)中斷函數(shù)可能會使用其他的工作寄存器組。然而RTX51 Tiny在工作寄存器組中永遠需要6個字節(jié)。RTX51 Tiny在工作寄存器組中使用的這些字節(jié)可以參考配置文件單個任務(wù)程序嵌入式和標(biāo)準(zhǔn)C程序都mian()函數(shù)開始。在入式應(yīng)用中, main函數(shù)一般都是一個死循環(huán),我們也可以把它看作是一個連續(xù)執(zhí)行的任務(wù)。如:void main (void)while (1)
11、/* repeat forever */do_something (); /* execute the do_something 'task' */在這個例子中,do_something ()函數(shù)可以認為是一個單任務(wù),既然只有一個任務(wù)在執(zhí)行,就不需要具有多任務(wù)能力或多任務(wù)操作系統(tǒng)。多任務(wù)程序許多成熟的C程序使用一種叫做pseudo多任務(wù)的策略,把多個作協(xié)做為一循環(huán),如:void main (void)int counter = 0;while (1) /* repeat forever */check_serial_io (); /* check for serial inpu
12、t */process_serial_cmds (); /* process serial input */check_kbd_io (); /* check for keyboard input */process_kbd_cmds (); /* process keyboard input */adjust_ctrlr_parms (); /* adjust the controller */counter+; /* increment counter */在這個例子中,每個函數(shù)完成一個獨立的操作或任務(wù)。這些函數(shù)是一個一個順序執(zhí)行的當(dāng)添加更多的任務(wù)時調(diào)度就行了一個問題。比方說,如果函數(shù)pr
13、ocess_kbd_cmds執(zhí)行的時間比較長,主循環(huán)就需要很長時間才能再執(zhí)行到函數(shù)check_serial_io ,這時候串口的數(shù)據(jù)可能會丟失。當(dāng)然check_serial_io 可以在主循環(huán)中多調(diào)用幾次來解決這個問題,但最終這種方法并不是最有效的。RTX51 Tiny的程序當(dāng)使用RTX51 Tiny時,你可以為每一個任務(wù)生成一個獨立的函數(shù),如:void check_serial_io_task (void) _task_ 1/* This task checks for serial I/O */void process_serial_cmds_task (void) _task_ 2/*
14、This task processes serial commands */void check_kbd_io_task (void) _task_ 3/* This task checks for keyboard I/O */void process_kbd_cmds_task (void) _task_ 4/* This task processes keyboard commands */void startup_task (void) _task_ 0os_create_task (1); /* Create serial_io Task */os_create_task (2);
15、/* Create serial_cmds Task */os_create_task (3); /* Create kbd_io Task */os_create_task (4); /* Create kbd_cmds Task */os_delete_task (0); /* Delete the Startup Task */在這個例子中,每個函數(shù)定義了一個RTX51 Tiny的任務(wù)。RTX51 Tiny程序沒有主C函數(shù),RTX51 Tiny首先執(zhí)行任務(wù)0。作為一個典型的應(yīng)用,任務(wù)0只是簡單地用來生成其他的所有任務(wù)。工作原理RTX51 Tiny使用并管理你的目標(biāo)資源,這一部分講述RTX
16、51 Tiny如何使用這些資源。RTX51 Tiny的許多方面都可以根據(jù)工程需要進行配置。時間片中斷RTX51 Tiny使用標(biāo)準(zhǔn)的8051的定時器0來產(chǎn)生定時中斷。這個中斷就是RTX51 Tiny的時鐘片。RTX51 Tiny運行時庫中用的時等待時間都是以這個時間片為單位的RTX51 Tiny的默認的時間片是10000個機器周期。因此,標(biāo)準(zhǔn)的8051運行在12MHz的時鐘下的時候,時間片有0.01S或著說是100Hz。這個值可以在CONF_TNY.A51 配置文件中更改。注意:你在以RTX51 Tiny時間片中斷中編輯你自己的代碼,參考:CONF_TNY.A51任務(wù):RTX51 Tiny可以看
17、作是一個任務(wù)切換器。要生成RTX51 Tiny程序,你必須生成一個具有一個或多個任務(wù)的應(yīng)用。以下細節(jié)可以幫你更快地理解RTX51任務(wù)必須用C語言編寫,并且用Keil C51支持的關(guān)鍵詞聲明RTX51 Tiny使用準(zhǔn)確的狀態(tài)維護任務(wù)。同時只有一個任務(wù)可以處于運行狀態(tài)可能會有多個任務(wù)處于就緒,等待,刪除或超時狀態(tài)空閑任務(wù)總是處于就緒狀態(tài),即使使用你的所有任務(wù)都處于block狀態(tài)任務(wù)管理RTX51 Tiny的任務(wù)總是處于以下狀態(tài)中一確定的狀態(tài)RUNNING:任務(wù)處于運行狀態(tài),os_running_task_id返回正在運行的任務(wù)的編號READY:任務(wù)處于就緒狀態(tài)。當(dāng)一個正在運行的任務(wù)運行完畢,RTX
18、51 Tiny就會啟動下一個就緒狀態(tài)的任務(wù)。一個任務(wù)可以通設(shè)置他的READY標(biāo)志位os_set_ready or isr_set_ready使它立即進入就緒狀態(tài)(即使它可能正在等待時間到或等一個信號)WAITTING:處于等待一個事件的任務(wù)就處于等待狀態(tài)。當(dāng)所等待的事件發(fā)生后,任務(wù)就轉(zhuǎn)換到就緒狀態(tài),函數(shù)os_wait用來使一個作任務(wù)進行等待狀態(tài)DELETED:沒有開始運行的任務(wù)或被刪除的任務(wù)處于DELETED狀態(tài)。函數(shù)os_delete_task使一個已經(jīng)啟動(使用函數(shù)os_create_task)的任務(wù)進入DELETED狀態(tài)TIME-OUT:被round-robin Time-Out中斷的任
19、務(wù)處于TIME-OUT狀態(tài)。這個狀態(tài)在round-robin程序中等效于READY狀態(tài)事件(Events)在實時操作系統(tǒng)中事件可以用來控制任務(wù)的執(zhí)行。一個可能會等待一個事件,也可能給其他任務(wù)設(shè)置事件標(biāo)志。函數(shù)os_wait允許任務(wù)等待一個或多個事件。任務(wù)等待的是最普通的事件就是Timeout,一個簡單的Timeout就是一定數(shù)量的clock ticks,當(dāng)一個任務(wù)等待的時間耗盡時,它就可以繼續(xù)執(zhí)行了,當(dāng)它等待時,其他的任務(wù)就可以運行variant of the Timeout is the Interval. An interval is like a timeout except that
20、the specified number of clock ticks is relative to the last time the os_wait function was invoked by the task. The Interval may be used to generate a task which is run on a regular, synchronous schedule (like once every second) regardless of how long the task takes between calls to the os_wait funct
21、ion.(以上內(nèi)容是說,interval類似于timeout,但與timeout不同的是interval參考的不是上一次任務(wù)執(zhí)行后的時間,而是某個特定的時間點,從而是一個規(guī)律性的、周期性的運行的任務(wù):比如說每秒一次)信號是任務(wù)間通信的一種簡單的形式,一個任務(wù)可以等待其他作任務(wù)給他發(fā)一個信號(使用 os_send_signal and isr_send_signal 函數(shù))。每個任務(wù)的READY標(biāo)志都可能被其他任務(wù)置位(使用 os_set_ready and isr_set_ready 函數(shù))。一個等timeout, interval, 或信號的任務(wù)都可以通過置位READY標(biāo)志重新啟動。RTX5
22、1 Tiny會為每個事件維護一個標(biāo)志。以下事件選擇項可以被用來表明等待什么:事件選項 描述K_IVL 等待特定數(shù)目的IntervalK_SIG 等待一個信號K_TMO 等待Timeout當(dāng)函數(shù)os_wait返回,發(fā)生的事件被返回值標(biāo)志返回值 描述RDY_EVENT 任務(wù)的就緒標(biāo)志被置位SIG_EVENT 信號已收到TMO_EVENT 一個Timeout已經(jīng)結(jié)束或一個interval已經(jīng)完畢函數(shù)os_wait可能會等待以下事件組合K_SIG | K_TMO:os_wait延遲任務(wù)直到一個信號已經(jīng)發(fā)給他,或直到設(shè)定的clocktick耗盡K_SIG | K_IVL:os_wait延遲任務(wù)直到一個信
23、號已經(jīng)發(fā)給他,或直到設(shè)定的interval耗盡注意:上面的兩個事件也可能不組合。任務(wù)調(diào)度器任務(wù)調(diào)度器是RTX51 Tiny的一部分,用來將處理器交給任務(wù)。任務(wù)調(diào)度器根據(jù)以下規(guī)則決定具體執(zhí)行哪一個任務(wù)。當(dāng)出現(xiàn)以下情況將中斷當(dāng)前任務(wù)任務(wù)調(diào)用函數(shù)os_wait,并且等待的任務(wù)還沒有發(fā)生任務(wù)執(zhí)行的時間超過了設(shè)定的round-robin時間片其他的任務(wù)在出現(xiàn)以下條件時開始運行沒有其他任務(wù)正在運行將啟動的任務(wù)正處于就緒狀態(tài)或TIME-OUT狀態(tài)RTX51 tiny(2)Round-robin 任務(wù)切換RTX51 Tiny可以配置成使用round-robin多任務(wù)。Round-robinp容許quasi-p
24、arallel執(zhí)行多任務(wù)。任務(wù)并不是連續(xù)執(zhí)行的,而是分時間片執(zhí)行的(可用的CPU時間被分成時間片,RTX51 Tiny把時間片分配給各個任務(wù))。時間片的時間很短(以毫秒為單位),所以任務(wù)看起來像連續(xù)執(zhí)行一樣任務(wù)在分配給他的時間片內(nèi)執(zhí)行(除非放棄)。然后切換到下一個就緒的任務(wù)。RTX51tiny(3)編譯連接有兩種方法編譯和連接RTX51 Tiny應(yīng)用程序RTX51 Tiny(4)os_set_readySummary:i nclude <rtx51tny.h>char os_set_ready (unsigned char task_id); /* Task to make rea
25、dy */Description:使編號為task_id的任務(wù)就入就緒狀態(tài),可以任務(wù)中調(diào)用該函數(shù)Return Value: None.原創(chuàng):RTX51 Tiny操作系統(tǒng)實例應(yīng)用0推薦/*/*
26、160; */* RCPU.C: C-51 COMPILER
27、 */*
28、160;
29、160; */*/ char code title = "RCPUn" "GLOBAL TECH 2005n" "VERSION 2.0n"i nclude <reg52.h>
30、60; /* special function registers 8052 */i nclude <rtx51tny.h>
31、0; /* RTX-51 tiny functions & defines */i nclude <stdio.h> /* standard I/O .h-file
32、0; */i nclude <mydef.h>i nclude "keyname.h"i nclude "vfd.h"i nclude "tmr2.h"/* constants for os_task function */#define INIT 0 /* task nu
33、mber of task: init */#define PROCKEY 1 /* task number of task: prockey
34、160; */#define PROCPIR 2 /* task number of task: procpir */#define VFDCODE 3 /* task
35、 number of task: vfdcode */#define NECCODE 4 /* task number of task: neccode */#defi
36、ne USARTSEND 5 /* task number of task: usartsend */#define CLOCK 7
37、 /* task number of task: clock */#define TICK 6 /* task number of task: procrst */#define VIEWCON
38、; 8/* constants for UsartSend function */#define UsartSendMotor 1 /* Command for control to MOTO board */#define UsartSendQCB 2
39、; /* Command for control to QCB board */#define UsartSendTime 3 /* System time
40、 */#define UsartSendVFD 4 /* IDE state
41、0; */#define UsartSendPIR 5 /* pir
42、160; */#define UsartSendNEC 6 /* NEC code &
43、#160; */#define UsartSendKey 7 /* key code
44、 */#define UsartSendPIREN 8 /* PIR_EN
45、; */#define IDEFREE 1#define IDEPLAY 2#define IDESETUP 3#define IDERECORD 4#define IDENOSIG
46、; 5#define VIEWIDE 1#define VIEWQUAD1 2#define VIEWQUAD2 3unsigned char QUAD_NOW_BAK;unsigned char CAM_NOW_QUAD1;unsigned char CAM_NOW_QUAD2;unsigned char TickCounter;unsigne
47、d char MotorCmd;unsigned char NECCmd;unsigned char UsartSendData;unsigned char UsartSendCmd;unsigned char IDEStatus;unsigned char rst6s,stopcount;unsigned int rst4h;bit PWFlag;bit viewportbak;bit StopFlagBit;/*/* Task 0 'init': Initialize
48、 */*/void init (void) _task_ INIT
49、60; /* program execution starts here */ serial_init (); /* initialize the serial interface
50、 */ VIEW_SA = 0; VIEW_SB = 0; os_create_task (PROCKEY); /* key sample task
51、0; */ os_create_task (PROCPIR); /* PIR sample task */ os_create_task (VFDCODE)
52、; /* VFDCODE incepted from IDE board */ os_create_task (NECCODE); /* send NECCODE to IDE board
53、160; */ os_create_task (USARTSEND); /* send data to USART port */ os_create_task (CLOCK);
54、/* start clock task */ os_create_task (TICK); /* process tick
55、; */ os_create_task (VIEWCON); os_delete_task (INIT); /* stop init task (no longer needed)
56、 */char code motordata =0x01,0x09,0x0,0x08,0x03,0x0B,0x02,0x0A,0x0D,0x05,0x0C,0x04,0x0F,0x07,0x0E,0x06;/*/* Task 1 'prockey': monitor key incepted
57、160; */*/void prockey (void) _task_ PROCKEY while (1)
58、/* prockey is an endless loop */ KEY_NOW = _getkey (); /* key is incepted
59、0; */ TickCounter = 0; if (KEY_NOW = '')continue;
60、0; if (KEY_NOW = SLEEP)continue; switch (KEY_NOW) /*
61、160; */ case PANUP:
62、0; if (CAM_NOW != 0)&(IDEStatus != IDESETUP)
63、 /* motor control */
64、60; MotorCmd = motordata(CAM_NOW-1)*4; UsartSendCmd = UsartSendMotor;
65、60; os_send_signal (USARTSEND); break;
66、60; case PANDOWN: if (CAM_NOW != 0)&(IDEStatus != IDESETUP)
67、60; /* motor control */ &
68、#160; MotorCmd = motordata(CAM_NOW-1)*4+1;
69、; UsartSendCmd = UsartSendMotor; os_send_signal (USARTSEND);
70、 break; case PANLEFT: if (IDEStatus = IDESETUP) break
71、; if (CAM_NOW = 0)
72、; /* QCB control */
73、; CAM_NOW_QUAD1 = 0; QUAD_NOW = 1; UsartSendCmd = UsartSendQCB;
74、60; os_send_signal (USARTSEND); NECCmd = TOQUAD1;
75、; os_send_signal (NECCODE); else
76、60; /* motor control */ &
77、#160; MotorCmd = motordata(CAM_NOW-1)*4+2;
78、; UsartSendCmd = UsartSendMotor; os_send_signal (USARTSEND);
79、; break; case PANRIGHT: if (IDEStatus = IDESETUP) break;
80、0; if (CAM_NOW = 0) /* QCB co
81、ntrol */ CAM_NOW_QUAD2 = 0;
82、60; QUAD_NOW = 2; UsartSendCmd = UsartSendQCB;
83、160; os_send_signal (USARTSEND); NECCmd = TOQUAD2;
84、0; os_send_signal (NECCODE); else
85、160; /* motor control */
86、 MotorCmd = motordata(CAM_NOW-1)*4+3; UsartSendCmd = UsartS
87、endMotor; os_send_signal (USARTSEND);
88、0; break; case QUAD: /* QCB control &
89、#160; */ if (IDEStatus = IDESETUP) break; if (CAM_NOW
90、!= 0) CAM_NOW = 0;
91、; UsartSendCmd = UsartSendQCB; os_send_signal (USARTSEND);
92、160; if (QUAD_NOW=1)CAM_NOW_QUAD1 = CAM_NOW; if (QUAD_NOW=2)CAM_NOW_QUAD2 = CAM_NOW;
93、 break; case CAMERA1: /* QCB control
94、; */ if (IDEStatus = IDESETUP) break;
95、; if (CAM_NOW = 0) CAM_NOW = 1;
96、0; UsartSendCmd = UsartSendQCB; os_send_signal (USARTSEND); &
97、#160; if (QUAD_NOW=1)CAM_NOW_QUAD1 = CAM_NOW; if (QUAD_NOW=2)CAM_NOW_QUAD2 = CAM_NOW;
98、; break; case CAMERA2: &
99、#160; /* QCB control */ if (IDEStatus = IDESETUP) break;
100、0; if (CAM_NOW = 0)
101、0; CAM_NOW = 2; UsartSendCmd = UsartSendQCB; os_send_signal (USART
102、SEND); if (QUAD_NOW=1)CAM_NOW_QUAD1 = CAM_NOW; if (QUAD_NOW=2)CAM_NOW_QU
103、AD2 = CAM_NOW; break; case CAMERA3:
104、 /* QCB control */
105、 if (IDEStatus = IDESETUP) break; if (CAM_NOW = 0)
106、60; CAM_NOW = 3; UsartSendCmd = UsartSendQCB;
107、60; os_send_signal (USARTSEND); if (QUAD_NOW=1)CAM_NOW_QUAD1 = CAM_NOW; &
108、#160; if (QUAD_NOW=2)CAM_NOW_QUAD2 = CAM_NOW; break; &
109、#160; case CAMERA4: /* QCB control */
110、; if (IDEStatus = IDESETUP) break; if (CAM_NOW = 0)
111、160; CAM_NOW = 4; UsartSendCmd = UsartSendQCB;
112、160; os_send_signal (USARTSEND); if (QUAD_NOW=1)CAM_NOW_QUAD1 = CAM_NOW;
113、 if (QUAD_NOW=2)CAM_NOW_QUAD2 = CAM_NOW; break;
114、 case STOP: if (StopFlagBit = 0)
115、60; NECCmd = KEY_NOW; os_send_signal (NECCODE); /* send NECCom to IDE
116、60; */ break;
117、0; default : NECCmd = KEY_NOW; os_send_signal (NECCODE); /* send NECCom to IDE
118、 */ break; if (KEY_NOW = STOP)
119、; /* stop check */ StopFlagBit = 1; &
120、#160; /* stop counter start */ else StopFlagBit = 0;
121、160; /* stop counter stop */ /*/* Task 2 'procpir': PIR signal manage &
122、#160; */*/void procpir (void) _task_ PROCPIR unsigned char pirport,pirportn; while(1
123、) if (IDEStatus = IDEFREE) pirport = P2; /* PI
124、R Signal Sample */ if (pirport!=0xFF)
125、0; pirportn = pirport; UsartSendData = pirport; &
126、#160; UsartSendCmd = UsartSendPIR; os_send_signal (USARTSEND);
127、0; if (pirportn&0x01)!=0) if (PIR_EN&0x80)!=0
128、) CAM_NOW = CAM_NOW_QUAD1;
129、60; QUAD_NOW = 1; NECCmd = TRIG_Q1;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 致富帶頭人先進事跡(10篇)
- 二零二五年度鋼鐵企業(yè)出口信用擔(dān)保合同3篇
- 二零二五年度環(huán)境宣傳教育基地建設(shè)環(huán)境行政服務(wù)合同3篇
- 家庭教育背景下的小學(xué)數(shù)學(xué)教學(xué)方法創(chuàng)新
- 小型商業(yè)空間的節(jié)能環(huán)保設(shè)計思路與實踐案例
- 二零二五年度版權(quán)出版合同標(biāo)的與出版權(quán)益分配合同2篇
- 2025年文化產(chǎn)業(yè)發(fā)展專項資金采購合同2篇
- 2024遠程醫(yī)療服務(wù)框架合同
- 浙江省縣中聯(lián)盟2023-2024學(xué)年高二上學(xué)期第一次聯(lián)考日語試題
- 二零二五年度能源設(shè)施安保外包合同終止與能源安全協(xié)議
- 控制變量法教學(xué)課件
- 2023年吉林電力股份有限公司招聘筆試題庫及答案解析
- 皮帶崗位題庫解讀
- 食品企業(yè)產(chǎn)品出廠檢驗報告
- 血壓計保養(yǎng)記錄表
- 鍋爐本體水壓試驗記錄
- 綜治工作中心信訪穩(wěn)定和矛盾糾紛排查化解工作流程圖
- 牛初乳知識課件
- 鼻出血鼻孔填塞-臨床實踐能力訓(xùn)練考核標(biāo)準(zhǔn)
- 初中中考英語總復(fù)習(xí)《代詞動詞連詞數(shù)詞》思維導(dǎo)圖
- 煤氣化工藝路線的比較
評論
0/150
提交評論