




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院、軟件學(xué)院學(xué)生實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)題目: 基于ATOS平臺(tái)的物聯(lián)網(wǎng)實(shí)驗(yàn) 學(xué)生姓名: 指導(dǎo)教師: 專業(yè)班級(jí): 提交日期: 49 實(shí)驗(yàn)一 LED組件1.1 實(shí)驗(yàn)要求綠燈一直處于熄滅的狀態(tài),紅燈不停閃爍(注意:工具箱提供的代碼有bug,對(duì)于基站節(jié)點(diǎn)LED_BLUE -> 紅燈 LED_YELLOW -> 綠燈 ON和OFF邏輯相反)1.2 實(shí)驗(yàn)思路將綠燈狀態(tài)改為OFF,紅燈通過(guò)時(shí)間延遲控制其的亮滅。1.3 實(shí)驗(yàn)關(guān)鍵代碼/* LED 示例程序的實(shí)現(xiàn)模塊,簡(jiǎn)單的點(diǎn)亮3個(gè)LED燈date 2010-1*/module LedMuses interface Boot;implemen
2、tation/* LED燈演示*/task void DemoLed()/* 目前節(jié)點(diǎn)上提供兩個(gè)LED燈LED_BLUE -> 藍(lán)燈LED_YELLOW -> 黃燈*/int i,j;while(1)for(i=0;i<1000;i+)for(j=0;j<500;j+);LED_BLUE_OFF; /* 熄滅藍(lán)色LED燈 */LED_YELLOW_OFF; /* 點(diǎn)亮黃色LED燈 */for(i=0;i<1000;i+)for(j=0;j<500;j+);LED_BLUE_ON; /* 熄滅藍(lán)色LED燈 */LED_YELLOW_OFF; /* 點(diǎn)亮黃色LE
3、D燈 */* 啟動(dòng)事件處理函數(shù),在LED.nc已經(jīng)關(guān)聯(lián)到MainC.Boot接口系統(tǒng)啟動(dòng)后會(huì)調(diào)用此函數(shù)*/event void Boot.booted()post DemoLed();1.4 實(shí)驗(yàn)截圖1.5 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),掌握了對(duì) LED的簡(jiǎn)單控制,受益匪淺,并且對(duì)此次實(shí)驗(yàn)的運(yùn)作過(guò)程開(kāi)始了解。 實(shí)驗(yàn)二 定時(shí)器組件1.1 實(shí)驗(yàn)要求通過(guò)定時(shí)器讓綠色燈閃爍,并且閃爍三次后停止閃爍。1.2 實(shí)驗(yàn)思路設(shè)置一個(gè)變量,在計(jì)時(shí)器每計(jì)數(shù)一次自加一次,加到三時(shí),停止計(jì)時(shí)器。1.3 實(shí)驗(yàn)關(guān)鍵代碼#define DBG_LEV 5module TimerLedMuses interface Boot;/* T
4、imer為系統(tǒng)接口TMilli指明了定時(shí)器的精度為毫秒 */uses interface Timer<TMilli> as Timer1; /* as關(guān)鍵字為接口別名 */uses interface Timer<TMilli> as Timer2;implementation/* 任務(wù): 切換黃色LED燈 */int i=0;/* 啟動(dòng)事件處理函數(shù),在TimerLed.nc已經(jīng)關(guān)聯(lián)到MainC.Boot接口系統(tǒng)啟動(dòng)后會(huì)調(diào)用此函數(shù)*/event void Boot.booted()/* 定時(shí)器1: 持續(xù)工作,每隔1s觸發(fā)一次 */call Timer1.startPer
5、iodic(1000);/* 定時(shí)器2: 持續(xù)工作,每隔3s觸發(fā)一次*/call Timer2.startPeriodic(5000);/* 定時(shí)器1的事件處理函數(shù) */event void Timer1.fired()/* 事件處理中直接切換藍(lán)色LED燈 */ADBG(5, "led blue toggle.rn");/LED_BLUE_TOGGLE;ADBG(5, "led yellow toggle.rn");/post ToggleLedYellow();LED_YELLOW_TOGGLE;i=i+1;if(i=3) call Timer1.st
6、op(); /通過(guò)stop函數(shù)使定時(shí)器停止/* 定時(shí)器2的事件處理函數(shù) */event void Timer2.fired()/ADBG(5, "led yellow toggle.rn");/post ToggleLedYellow();1.4 實(shí)驗(yàn)截圖1.5 實(shí)驗(yàn)心得通過(guò)此次實(shí)驗(yàn),加強(qiáng)了我對(duì)代碼的思考,更加了解定時(shí)器函數(shù)的使用。實(shí)驗(yàn)三 串口調(diào)試1.1 實(shí)驗(yàn)要求通過(guò)級(jí)別控制,使得某些調(diào)試語(yǔ)句沒(méi)有被輸出到串口。1.2 實(shí)驗(yàn)思路默認(rèn)的ADBG_LEV為3000,將語(yǔ)句中的DBG_LEV參數(shù)改為比默認(rèn)的ADBG_LEV小即可1.3 實(shí)驗(yàn)關(guān)鍵代碼/* 串口調(diào)試程序的實(shí)現(xiàn)模塊dat
7、e */* 定義調(diào)試級(jí)別,參加Makefile的ADBG_LEVEL定義,設(shè)置大于等于ADBG_LEVEL */#define DBG_LEV3000module SerialDebugMuses interface Boot;implementation/* 任務(wù): 通過(guò)串口打印信息來(lái)調(diào)試 */task void DebugSerial()uint8_t num1 = 0x39;uint32_t num2 = 0x12345678;float float1 = 123.1234;/* ADBG,格式類似于printf,第一個(gè)參數(shù)為調(diào)試等級(jí),可以參見(jiàn)tos/lib/common/antdebu
8、g.h */* 打印字符和字符串 */ADBG(DBG_LEV, "rnrnDEMO of Serial Debugrn", 'x');ADBG(DBG_LEV, "1. This is a string, and this is char '%c'rn", 'x');/* 打印8位的數(shù)字 */ADBG(DBG_LEV, "2. NUM1: HEX=0x%x, DEC=%drn", (int)(num1), (int)(num1);/* 打印32位數(shù)字 */ADBG(2000, &quo
9、t;2. NUM2: HEX=0x%lx, DEC=%ldrn", (uint32_t)(num2), (uint32_t) (num2);/* 打印浮點(diǎn)數(shù)*/ADBG(DBG_LEV, "3. FLOAT: %frn", float1);/* 啟動(dòng)事件處理函數(shù),在SerialDebug.nc已經(jīng)關(guān)聯(lián)到MainC.Boot接口系統(tǒng)啟動(dòng)后會(huì)調(diào)用此函數(shù)*/event void Boot.booted()post DebugSerial();1.4 實(shí)驗(yàn)截圖圖1 未屏蔽前圖2 屏蔽后1.5 實(shí)驗(yàn)心得此次實(shí)驗(yàn)加深了我對(duì)串口的了解與使用,是一次非常好的實(shí)驗(yàn)材料,受益匪淺。實(shí)
10、驗(yàn)四 串口通信1.1 實(shí)驗(yàn)要求實(shí)現(xiàn)一個(gè)串口實(shí)驗(yàn),在串口助手中實(shí)現(xiàn)回顯的功能。(鍵盤鍵入的任何內(nèi)容回車后顯示在串口助手的終端)1.2 實(shí)驗(yàn)思路直接在原有的UartStream.receivedByte函數(shù)基礎(chǔ)上修改,直接輸出結(jié)果1.3 實(shí)驗(yàn)關(guān)鍵代碼/* 串口輸入輸出程序的實(shí)現(xiàn)模塊authordate */#include <strings.h>/* 定義此宏,將演示UartStream.receive函數(shù),允許一次指定數(shù)量的數(shù)據(jù) */#define SERIALIO_RECEIVE#define DBG_LEV3000module SerialIoMuses interface Bo
11、ot;uses interface StdControl as UartStdControl;uses interface UartStream;implementationuint8_t m_receive_len;uint8_t m_echo_buf;uint8_t m_send_buf100;/* 顯示一個(gè)菜單提示用戶 */void showMenu() strcpy(m_send_buf, "rnrnDemo of Serio I/Orn1 Toggle BLUE LEDrn2 Toggle YELLOW LEDrn");/* 通過(guò)UartStream.send可以
12、發(fā)送字節(jié)數(shù)據(jù) */call UartStream.send(m_send_buf, strlen(m_send_buf);/* 啟動(dòng)事件處理函數(shù),在SerialIo.nc已經(jīng)關(guān)聯(lián)到MainC.Boot接口系統(tǒng)啟動(dòng)后會(huì)調(diào)用此函數(shù)*/event void Boot.booted()LED_BLUE_ON;LED_YELLOW_ON;call UartStdControl.start();showMenu();async event void UartStream.sendDone(uint8_t *buf, uint16_t len, error_t error)/* 重新發(fā)送剛才接收的字符進(jìn)行回
13、顯 */task void showMenuTask()showMenu();task void lightLED()if(m_echo_buf='1')LED_BLUE_TOGGLE; /* 切換藍(lán)色LED燈 */ADBG(DBG_LEV, "You choose to toggle BLUE LEDrn");else if (m_echo_buf = '2')LED_YELLOW_TOGGLE; /* 切換黃色LED燈 */ADBG(DBG_LEV, "You choose to toggle YELLOW LEDrn"
14、;);/* 如果沒(méi)有調(diào)用receive接收,則每接收到一個(gè)數(shù)據(jù)就會(huì)觸發(fā)此事件 */async event void UartStream.receivedByte(uint8_t byte)m_echo_buf = byte;ADBG(DBG_LEV, "%cr",m_echo_buf); /將byte直接輸出post lightLED(); /* 在接收完receive命令欲接收的長(zhǎng)度后會(huì)調(diào)用此事件 */async event void UartStream.receiveDone(uint8_t *buf, uint16_t len, error_t error)1.4
15、 實(shí)驗(yàn)截圖1.5 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),對(duì)串口通信的原理有了大致的了解,同時(shí)也更加深刻了我對(duì)這門課的認(rèn)識(shí),鞏固了我的理論知識(shí)。實(shí)驗(yàn)五 FLASH讀寫1.1 實(shí)驗(yàn)要求自己定義一個(gè)結(jié)構(gòu)體,并且將結(jié)構(gòu)體的內(nèi)容寫入到0x1fff8,并且在寫完后將結(jié)構(gòu)體的數(shù)據(jù)讀取出來(lái)和原始數(shù)據(jù)進(jìn)行比較。1.2 實(shí)驗(yàn)思路將原有代碼的讀寫數(shù)組改成結(jié)構(gòu)體中的數(shù)組即可1.3 實(shí)驗(yàn)關(guān)鍵代碼/* 定義調(diào)試級(jí)別,參加Makefile的ADBG_LEVEL定義,設(shè)置大于等于ADBG_LEVEL */#define DBG_LEV3000module TestFlashCuses interface Boot;uses interfac
16、e HalFlash;implementation struct data uint8_t ieee38; uint8_t ieee48; ; struct data arr;task void initTask() uint8_t i; arr.ieee40=2; arr.ieee41=2; arr.ieee42=3; arr.ieee43=3; arr.ieee44=4; arr.ieee45=4; arr.ieee46=5; arr.ieee47=5;ADBG(DBG_LEV, "read now n");call HalFlash.erase(uint8_t*)0x
17、1fff8);for (i=0; i < 8; i+=4)call HalFlash.write(uint8_t*)(0x1FFF8+i), (arr.ieee4+i), 4);call HalFlash.read(arr.ieee3, (uint8_t *)0x1FFF8, 8);ADBG(DBG_LEV, "read ok.n");for (i=0; i < sizeof(arr.ieee3); +i)ADBG(DBG_LEV, "arr.ieee3%d=%dn", (int)i, (int)arr.ieee3i);event void
18、Boot.booted()ADBG(DBG_LEV, "Boot.bootedn");post initTask();1.4 實(shí)驗(yàn)截圖1.5 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),對(duì)FlASH讀寫的原理有了大致的了解,同時(shí)也更加深刻了我對(duì)這門課的認(rèn)識(shí),鞏固了我的理論知識(shí)。實(shí)驗(yàn)六 點(diǎn)對(duì)點(diǎn)通信1.1 實(shí)驗(yàn)要求完成一個(gè)兩跳點(diǎn)對(duì)點(diǎn)的傳輸,讓基站給節(jié)點(diǎn)1發(fā)送一個(gè)消息,節(jié)點(diǎn)1在接收到消息后將自己的藍(lán)燈狀態(tài)改變,延遲1s后將消息繼續(xù)傳遞給節(jié)點(diǎn)2,節(jié)點(diǎn)2在接收到消息后將自己的黃燈狀態(tài)改變。1.2 實(shí)驗(yàn)思路1.3 實(shí)驗(yàn)關(guān)鍵代碼基站節(jié)點(diǎn) 同節(jié)點(diǎn)2#define DBG_LEV 1000module P2PMu
19、ses interface Boot;interface AtosControl;interface StdControl as UartStdControl;interface UartStream;interface AMSend;interface Receive;interface AMPacket;interface Packet;implementationenumMAX_ADDRESS_LEN = 5,INPUT_ADDRESS = 0,INPUT_DATA = 1,;message_t m_msg;uint8_t m_len = 0;char m_address_strMAX_
20、ADDRESS_LEN = 0;uint8_t m_address_index = 0;uint8_t m_input_type = 0;/* 顯示菜單*/task void showMenu()if( m_input_type = INPUT_DATA)/*等待輸入欲發(fā)送的數(shù)據(jù)*/ADBG_APP( "rn* To Send:rn");else/*等待輸入欲發(fā)送的地址*/ADBG_APP( "rn#rn* MY NodeId = 0x%x, Group=0x%x, destination ?rn",ADBG_N(call AMPacket.addres
21、s(),ADBG_N(TOS_IEEE_PANID);m_input_type = INPUT_ADDRESS;m_address_index = 0;/*將從串口輸入的地址字符串轉(zhuǎn)化為真實(shí)地址*/uint16_t getDestAddress()uint16_t address = 0;uint8_t i = 0;if(m_address_index > MAX_ADDRESS_LEN)m_address_index = MAX_ADDRESS_LEN -1;for ( i=0; i < m_address_index; +i)uint8_t digital = m_addres
22、s_stri;if(digital >= 'A' && digital <= 'F')digital = digital - 'A' + 10;else if(digital >= 'a' && digital <= 'f')digital = digital - 'a' + 10;else if(digital >= '0' && digital <= '9')digital = d
23、igital - '0'address = address*16 +digital;return address;/* 發(fā)送數(shù)據(jù)*/task void sendData()uint8_t i;uint8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t address = call AMPacket.address();uint16_t dest_address = getDestAddress();ADBG_APP( "rnrn* Sending . from %d, to %d, len=
24、%drn",ADBG_N(address),ADBG_N(dest_address),ADBG_N(m_len);call AMSend.send(dest_address, &m_msg, m_len);/LED_BLUE_TOGGLE;/*發(fā)送完處理*/event void AMSend.sendDone(message_t* msg, error_t result)/ADBG_APP( "send donen");ADBG_APP( "* Sent%s!rn", (result = SUCCESS) ? "OK"
25、; : "FAIL");if (result = SUCCESS)LED_BLUE_TOGGLE;elseLED_YELLOW_TOGGLE;m_len = 0;m_input_type = INPUT_ADDRESS;post showMenu();/* 節(jié)點(diǎn)啟動(dòng)完畢*/event void Boot.booted()/*開(kāi)啟射頻*/call AtosControl.start();/*開(kāi)啟串口通信*/call UartStdControl.start();LED_YELLOW_OFF;LED_BLUE_OFF;ADBG_APP( "rn#rn");A
26、DBG_APP( " P2PDEMO My Address = 0x%x, Group = 0x%xrn", ADBG_N(call AMPacket.address(), ADBG_N(TOS_IEEE_PANID);ADBG_APP( "#rn");m_input_type = INPUT_ADDRESS;post showMenu();/*從串口接收數(shù)據(jù)*/async event void UartStream.receivedByte(uint8_t c)if(c != 'r')if (m_input_type = INPUT_D
27、ATA)/*輸入數(shù)據(jù)*/uint8_t* payload = (uint8_t*)call Packet.getPayload(&m_msg, NULL);if(m_len >= call Packet.maxPayloadLength()return;payloadm_len+ = c;ADBG_APP( "%c", c);if(m_len < call Packet.maxPayloadLength()return;else/*輸入地址*/if(m_address_index < MAX_ADDRESS_LEN)m_address_strm_a
28、ddress_index+ = c;ADBG_APP( "%c", c);if(m_address_index < MAX_ADDRESS_LEN)return;/*按下回車鍵或者到達(dá)最大長(zhǎng)度,則處理*/if(m_input_type = INPUT_DATA)post sendData();else/*地址處理完畢,準(zhǔn)備輸入數(shù)據(jù)*/m_input_type = INPUT_DATA;post showMenu();/* 實(shí)現(xiàn)接口UartStream 接口中的事件*/async event void UartStream.sendDone(uint8_t* buf,
29、uint16_t len, error_t error)async event void UartStream.receiveDone(uint8_t* buf, uint16_t len, error_t error)/*射頻接收數(shù)據(jù)*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)uint8_t i;ADBG_APP( "rn*Receive, len = %d, DATA:rn", ADBG_N(len);for(i=0; i < len; i+)ADBG_
30、APP( "%c", (uint8_t*)payload)i);ADBG_APP( "rn");LED_YELLOW_TOGGLE;m_input_type = INPUT_ADDRESS;節(jié)點(diǎn)1:(P2PC中添加Timer1的定時(shí)器聲明)configuration P2PCimplementationcomponents P2PM;components MainC;P2PM.Boot -> MainC.Boot;/* 串口收發(fā)組件*/components PlatformSerialC;P2PM.UartStdControl -> Plat
31、formSerialC;P2PM.UartStream -> PlatformSerialC;/*活動(dòng)消息組件*/ components new PlatformMacC(123);components AtosMacC;P2PM.AtosControl -> AtosMacC;P2PM.AMPacket -> PlatformMacC;P2PM.Packet -> PlatformMacC;P2PM.AMSend -> PlatformMacC;P2PM.Receive ->PlatformMacC;components new TimerMilliC()
32、 as Timer1;P2PM.Timer1 -> Timer1; / 添加Timer1的定時(shí)器聲明#define DBG_LEV 1000module P2PMuses interface Boot;interface AtosControl;interface StdControl as UartStdControl;interface UartStream;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface Timer<TMilli> as Timer1; im
33、plementationenumMAX_ADDRESS_LEN = 5,INPUT_ADDRESS = 0,INPUT_DATA = 1,;message_t m_msg;uint8_t m_len = 0;char m_address_strMAX_ADDRESS_LEN = 0;uint8_t m_address_index = 0;uint8_t m_input_type = 0;/* 顯示菜單*/task void showMenu()if( m_input_type = INPUT_DATA)/*等待輸入欲發(fā)送的數(shù)據(jù)*/ADBG_APP( "rn* To Send:rn&q
34、uot;);else/*等待輸入欲發(fā)送的地址*/ADBG_APP( "rn# rn* MY NodeId = 0x%x, Group=0x%x, destination ?rn",ADBG_N(call AMPacket.address(),ADBG_N(TOS_IEEE_PANID);m_input_type = INPUT_ADDRESS;m_address_index = 0;/*將從串口輸入的地址字符串轉(zhuǎn)化為真實(shí)地址*/uint16_t getDestAddress()uint16_t address = 0;uint8_t i = 0;if(m_address_i
35、ndex > MAX_ADDRESS_LEN)m_address_index = MAX_ADDRESS_LEN -1;for ( i=0; i < m_address_index; +i)uint8_t digital = m_address_stri;if(digital >= 'A' && digital <= 'F')digital = digital - 'A' + 10;else if(digital >= 'a' && digital <= '
36、;f')digital = digital - 'a' + 10;else if(digital >= '0' && digital <= '9')digital = digital - '0'address = address*16 +digital;return address;/* 發(fā)送數(shù)據(jù)*/task void sendData()uint8_t i;uint8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t
37、address = call AMPacket.address();uint16_t dest_address = getDestAddress();ADBG_APP( "rnrn* Sending . from %d, to %d, len=%drn",ADBG_N(address),ADBG_N(dest_address),ADBG_N(m_len);call AMSend.send(dest_address, &m_msg, m_len);/LED_BLUE_TOGGLE;task void sendData1()/* 節(jié)點(diǎn)1發(fā)送數(shù)據(jù)*/uint8_t i;u
38、int8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t address = call AMPacket.address();uint16_t dest_address = 03;/目的地址為3ADBG_APP( "rnrn* Sending . from %d, to %d, len=%drn",ADBG_N(address),ADBG_N(dest_address),ADBG_N(m_len);call AMSend.send(dest_address, &m_msg, m_len);
39、/LED_BLUE_TOGGLE;/*發(fā)送完處理*/event void AMSend.sendDone(message_t* msg, error_t result)/ADBG_APP( "send donen");ADBG_APP( "* Sent%s!rn", (result = SUCCESS) ? "OK" : "FAIL");if (result = SUCCESS)LED_BLUE_TOGGLE;elseLED_YELLOW_TOGGLE;m_len = 0;m_input_type = INPUT_
40、ADDRESS;post showMenu();/* 節(jié)點(diǎn)啟動(dòng)完畢*/event void Boot.booted()/*開(kāi)啟射頻*/call AtosControl.start();/*開(kāi)啟串口通信*/call UartStdControl.start();LED_YELLOW_OFF;LED_BLUE_OFF;ADBG_APP( "rn#rn");ADBG_APP( " P2PDEMO My Address = 0x%x, Group = 0x%xrn", ADBG_N(call AMPacket.address(), ADBG_N(TOS_IEEE
41、_PANID);ADBG_APP( "#rn");m_input_type = INPUT_ADDRESS;post showMenu();/*從串口接收數(shù)據(jù)*/async event void UartStream.receivedByte(uint8_t c)if(c != 'r')if (m_input_type = INPUT_DATA)/*輸入數(shù)據(jù)*/uint8_t* payload = (uint8_t*)call Packet.getPayload(&m_msg, NULL);if(m_len >= call Packet.max
42、PayloadLength()return;payloadm_len+ = c;ADBG_APP( "%c", c);if(m_len < call Packet.maxPayloadLength()return;else/*輸入地址*/if(m_address_index < MAX_ADDRESS_LEN)m_address_strm_address_index+ = c;ADBG_APP( "%c", c);if(m_address_index < MAX_ADDRESS_LEN)return;/*按下回車鍵或者到達(dá)最大長(zhǎng)度,則處
43、理*/if(m_input_type = INPUT_DATA)post sendData();else/*地址處理完畢,準(zhǔn)備輸入數(shù)據(jù)*/m_input_type = INPUT_DATA;post showMenu();/* 實(shí)現(xiàn)接口UartStream 接口中的事件*/async event void UartStream.sendDone(uint8_t* buf, uint16_t len, error_t error)async event void UartStream.receiveDone(uint8_t* buf, uint16_t len, error_t error)/*
44、射頻接收數(shù)據(jù)*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)uint8_t i;call Timer1.startPeriodic(1000);ADBG_APP( "rn*Receive, len = %d, DATA:rn", ADBG_N(len);for(i=0; i < len; i+)ADBG_APP( "%c", (uint8_t*)payload)i);ADBG_APP( "rn");LED_YELLOW_T
45、OGGLE;m_input_type = INPUT_ADDRESS;/*定時(shí)器事件處理函數(shù)*/event void Timer1.fired() /定時(shí)器結(jié)束后執(zhí)行post sendData1();/給節(jié)點(diǎn)2發(fā)送數(shù)據(jù)call Timer1.stop();1.4 實(shí)驗(yàn)截圖1.5 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),對(duì)點(diǎn)對(duì)點(diǎn)的原理有了大致的了解,同時(shí)也更加深刻了我對(duì)這門課的認(rèn)識(shí),鞏固了我的理論知識(shí)。對(duì)于延時(shí)發(fā)送可以通過(guò)定時(shí)器來(lái)實(shí)現(xiàn)也更為熟悉。實(shí)驗(yàn)七 射頻廣播1.1 實(shí)驗(yàn)要求寫一個(gè)射頻廣播實(shí)驗(yàn),包括基站和兩個(gè)節(jié)點(diǎn)的程序。使得兩個(gè)節(jié)點(diǎn)在接收到基站的三個(gè)廣播信號(hào)停止接收廣播數(shù)據(jù)。1.2 實(shí)驗(yàn)思路添加全局變量,每次廣
46、播成功變量自減一次,判斷是否為0,為0時(shí)停止廣播。1.3 實(shí)驗(yàn)關(guān)鍵代碼#define DBG_LEV 1000module BroadcastPuses interface Boot;interface AtosControl;interface AMSend;interface Receive;interface AMPacket;interface Packet;interface Timer<TMilli> as SensorTimer;implementationmessage_t m_msg;int i = 3;/定義控制廣播次數(shù)的參數(shù)/* 發(fā)送數(shù)據(jù)*/task void
47、 sendData()uint16_t m_len = 0x00;uint8_t* payload = call Packet.getPayload(&m_msg, NULL);uint16_t address = call AMPacket.address();*payload = 0x01;m_len = 0x01;if (address = 0x01)call AMSend.send(0xFFFF, &m_msg, m_len);LED_BLUE_TOGGLE;/*發(fā)送完處理*/event void AMSend.sendDone(message_t* msg, erro
48、r_t success)/* 節(jié)點(diǎn)啟動(dòng)完畢*/event void Boot.booted()/*開(kāi)啟射頻*/call AtosControl.start();LED_YELLOW_ON;LED_BLUE_ON;call SensorTimer.startPeriodic(1000);event void SensorTimer.fired()post sendData();/*射頻接收數(shù)據(jù)*/event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)LED_BLUE_TOGGLE;i = i - 1;if(i=0) call AtosControl.stop();/每次廣播完成后自減1,減到0時(shí)停止廣播1.4 實(shí)驗(yàn)心得通過(guò)這次實(shí)驗(yàn),對(duì)射頻廣播的原理有了大致的
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津舞臺(tái)噴泉施工方案
- 建筑施工方案分類
- 調(diào)料品稅務(wù)知識(shí)培訓(xùn)課件
- 合同范例 購(gòu)銷合同
- 合肥搬家合同范例
- 只有金額合同范例
- 買賣他人按揭房合同范例
- 特殊學(xué)生支持與幫助方案計(jì)劃
- 強(qiáng)化數(shù)據(jù)保護(hù)與隱私管理計(jì)劃
- 全院綜合評(píng)估與自查報(bào)告計(jì)劃
- 2023年沈陽(yáng)職業(yè)技術(shù)學(xué)院?jiǎn)握袛?shù)學(xué)模擬試題附答案解析
- DSA室的手術(shù)配合教學(xué)課件
- 人教版四年級(jí)下冊(cè)音樂(lè)第四單元《凱皮拉的小火車》優(yōu)質(zhì)教案
- 三調(diào)土地利用現(xiàn)狀分類和三大地類對(duì)應(yīng)甄選
- 房地產(chǎn)合約規(guī)劃分類明細(xì)
- 八年級(jí)物理(上冊(cè))知識(shí)點(diǎn)整理 (2)
- 新冀人版小學(xué)科學(xué)三年級(jí)下冊(cè)全冊(cè)教案(2022年春修訂)
- 高中物理萬(wàn)有引力定律知識(shí)點(diǎn)總結(jié)與典型例題
- 吊裝平臺(tái)施工方案
- 粱、柱、板截面取值原則最終
- 如何激發(fā)學(xué)生學(xué)習(xí)物理的興趣PPT課件
評(píng)論
0/150
提交評(píng)論