freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

基于armcortex-a8內(nèi)核的嵌入式智能家畢業(yè)論文(編輯修改稿)

2025-08-16 10:53 本頁面
 

【文章內(nèi)容簡(jiǎn)介】 (TRUE) { pTxData[0] = KeyScan()。 // 鍵 值掃描 if(pTxData[0]!= 0) { basicRfSendPacket(LIGHT_ADDR,pTxData,APP_PAYLOAD_LENGTH) 。 halIntOff(); halIntOn()。 } } 這段程序可以說,是發(fā)送模塊的精華,或者說是核心。 Appswich()函數(shù)進(jìn)來之后,首先是一個(gè)錯(cuò)誤返回機(jī)制,如果兩個(gè) Zigbee 連接不成功,會(huì)返回 fail。 連接成功后, Zigbee 會(huì)打開發(fā)送函數(shù),做好發(fā)送準(zhǔn)備。同時(shí)關(guān)閉接收 功能,基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 9 保證模塊的運(yùn)行速度和穩(wěn)定性。接下來程序會(huì)進(jìn)入 while()循環(huán),只要 Zigbee保持連接,發(fā)送模塊就會(huì)一直處準(zhǔn)備在發(fā)送模式或者正在發(fā)送模式。由于使用的是四個(gè)開關(guān)量傳感器,這里作為四個(gè)按鍵,不停地對(duì)連接了四個(gè)傳感器的 IO 關(guān)鍵進(jìn)行按鍵掃描,獲取相應(yīng)的鍵值,并賦值給 Pxdata[]數(shù)組,并使用系統(tǒng)調(diào)用函數(shù) basicRfSendPacket()將信息發(fā)送出去。 basicRfSendPacket 這個(gè)函數(shù)也是整段程序的核心,只有調(diào)用這個(gè)函數(shù)才能將 IO 口接收到的數(shù)據(jù)有序的發(fā)送出去,完成信息的遠(yuǎn)程傳輸 [9]。下面再來 看一下接收模塊的核心代碼。 = LIGHT_ADDR。 if(basicRfInit(amp。basicRfConfig)==FAILED) { HAL_ASSERT(FALSE)。 } basicRfReceiveOn()。 UartInitial()。 while (TRUE) { while(!basicRfPacketIsReady())。 if(basicRfReceive(pRxData, APP_PAYLOAD_LENGTH, NULL)0) { { Delayms1(500)。 halLedToggle(1)。 UartSend_String(Lcddata,5)。 UartSend_String(pRxData,1)。 UartSend_String(Reddata,2)。 } } } 這段程序和發(fā)送程序的主體架構(gòu)是一樣的,不過是使用了調(diào)用函數(shù)basicRfReceive,來接受發(fā)送函數(shù)發(fā)送過來的數(shù)據(jù),同時(shí)初始化了 Zigbee 模塊的UART1,將來自發(fā)送模塊的數(shù)據(jù)打包處理后通過串口發(fā)送出去,并可以通過超基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 10 級(jí)終端看到所接收到的數(shù)據(jù),通過接受到的具體數(shù)據(jù)查看到底是觸發(fā)了什么節(jié)點(diǎn),觸動(dòng)警報(bào)。 下圖 31 為超級(jí)終端接受傳感器信號(hào)的數(shù)據(jù) [10]。 圖 31 超級(jí)終端截圖 同時(shí) Zigbee 也可以接受來自超級(jí)終端的數(shù)據(jù)(在這里超級(jí)終端作為開發(fā)板的一個(gè)替代品),如圖 32 在超級(jí)終端發(fā)送 ledon 命令, Zigbee 的一個(gè) IO 管教被拉高, led 燈亮發(fā)送 ledoff, led 燈滅如圖 32。 圖 32 Zigbee 控制效果圖 基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 11 Zigbee 的接收終端數(shù)據(jù)程序其實(shí)也非常簡(jiǎn)單,是使用串口中斷來做的,即只要串口檢測(cè)收有數(shù) 據(jù)接收,就會(huì)產(chǎn)生中斷,注冊(cè)標(biāo)志位,然后拉高相應(yīng)管腳,實(shí)現(xiàn)對(duì) led 燈的控制。代碼如下: pragma vector = URX0_VECTOR __interrupt void UART0_ISR(void) { URX0IF = 0。 if(U0DBUF 0) { P1_4=~P1_4。 temp = U0DBUF。 } } 整個(gè) Zigbee 模塊的程序架構(gòu),如圖 33。 圖 33 Zigbee 代碼工程結(jié)構(gòu)圖 基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 12 linux 嵌入式系統(tǒng)搭建 首先需要說明的是本次嵌入系統(tǒng),是基于前人原有的開源代碼消化吸收后,然后添加的驅(qū)動(dòng)代碼最終實(shí)現(xiàn)的,這里也是充分的發(fā)揮了 linux 嵌入式的開源性。 本嵌入式系統(tǒng)結(jié)構(gòu)主要分為了三大塊,分 別是: emilib : 抽象數(shù)據(jù)通信。 Hmanager:基于 QT的 PC 端圖形控制程序。 Bdehmanager:基于 QT 的開發(fā)板圖形控制程序。 emilib 數(shù)據(jù)通信模塊介紹 Emilib 工作原理 消息接受者首先需要完成注冊(cè),所謂注冊(cè)即通過 socket 連接本地 emi_core進(jìn)程,將本進(jìn)程進(jìn)程號(hào)以及要注冊(cè)的消息發(fā)送給 emi_core。 Emi_core 收到消息后,需要在內(nèi)部表記錄了(消息號(hào),進(jìn)程號(hào))之間的關(guān)系。每一個(gè)注冊(cè)消息的進(jìn)程只要成功注冊(cè)了,就會(huì)在表里新增一個(gè)項(xiàng),記錄該進(jìn)程注冊(cè)的消息號(hào)和進(jìn)程號(hào)。然后當(dāng)發(fā)送端給 emi_core 發(fā)消息時(shí), emi_core 會(huì)把消息好在表里進(jìn)行匹配,如果是正常情況,那么其會(huì)找到注冊(cè)進(jìn)程的進(jìn)程號(hào),此時(shí) emi_core 會(huì)給該進(jìn)程發(fā)送一個(gè) USER2 信號(hào),同時(shí)附加數(shù)據(jù)放到共享的內(nèi)存 中。而接受進(jìn)程接收到這個(gè)信號(hào)之后,就會(huì)觸發(fā)信號(hào)處理函數(shù),其實(shí)這個(gè)原理個(gè)人認(rèn)為其實(shí)完全可以理解為一個(gè)中斷向量表的工作原理,不過它可以同時(shí)處理多個(gè)進(jìn)程。最后在信號(hào)處理函數(shù)內(nèi)部從 emi_core 提供的共享內(nèi)存中讀取發(fā)送端發(fā)來的信息。如此就完成了一次數(shù)據(jù)通信。 Emilib 的使用方法 首先來介紹下,剛才提到的 emi_core。 emi_core 相當(dāng)于一個(gè)中介或者說就是一個(gè)電話接線員,主要完成了兩部分的工作。首先是接注冊(cè)類的消息,并把消息和一個(gè)函數(shù)綁定。然后是接收發(fā)送類型消息,查找到已經(jīng)被綁定的消息函數(shù)對(duì),匹配出相 同的消息,最后運(yùn)行對(duì)應(yīng)的函數(shù)。 Emilib 中包含 了 庫。主要工作就是提供進(jìn)程需要的函數(shù),來實(shí)現(xiàn)具體功能,接收進(jìn)程調(diào)用庫中的函數(shù)進(jìn)行消息好和函數(shù)的綁定注冊(cè),而發(fā)送進(jìn)程基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 13 調(diào)用庫中的函數(shù)進(jìn)行消息發(fā)送。 下面列出的是 中常用的函數(shù) ( 1)初始化函數(shù) Int emi_ini(void)。 這絕對(duì)是最常用也是最重要的函數(shù),因?yàn)樗仨氃谧?cè)消息之前運(yùn)行,但是每個(gè)進(jìn)程只需要運(yùn)行一次。 ( 2)消息注冊(cè)函數(shù) Int emi_msg_register_exclusice(eu32msg,emi_func func)。 返回值為 0 時(shí)代表成功,負(fù)數(shù)代表失敗,兩個(gè)參數(shù)分別代表要注冊(cè)的消息號(hào),和一個(gè)指向結(jié)構(gòu)體的結(jié)構(gòu)體指針,當(dāng)然要求其提前被寫好。 ( 3)發(fā)送消息函數(shù) Int emi_msg_send_highlevel_blockreturn(char * ipaddr, int msgnum, int send_size, void *send_data, int ret_size,void *ret_data,eu32 cmd) 返回值為 0 代表發(fā)送成功,負(fù)數(shù)代表失敗。 參數(shù) ipaddr 表示接受平 臺(tái)的 ip。 參數(shù) msgnum表示要發(fā)送的消息號(hào)。 參數(shù) send_size 以及 send_data 分別代表附加數(shù)據(jù)的長度和附加數(shù)據(jù)的首地址,如果沒有那么就應(yīng)該設(shè)置為 0 和 NULL。 參數(shù) ret_size 和 ret_data 表示返回?cái)?shù)據(jù)的大小和首地址。 參數(shù) cmd,表示發(fā)送者要發(fā)送給接受者的命令。 Emilib 的測(cè)試 首先需要進(jìn)入 emitest 目錄 ,先建兩個(gè) emi 測(cè)試源文件分別用于發(fā)送和接受,來模擬通信過程。 cd emitest vim vim 以下是在實(shí)驗(yàn)中 對(duì)于 emilib 所做測(cè)試的一部分核心代碼。 添加到 源文件的核心代碼。 char hello[20]=hello。 char buf[5]={0}。 基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 14 emi_msg_send_highlevel_blockreturn(,12345678,6,hello,4,buf,5)。 printf(%s\n,buf)。 添加到 源文件的核心代碼: int test_func(struct emi_msg *msg){ printf(msgcmd %d, msgdata %s\n,msgcmd, msgdata)。 return emi_msg_prepare_return_data(msg,hel,4)。 } Main 函數(shù)代碼如下: emi_init()。 emi_msg_register_exclusive(12345678,test_func)。 while(1){ sleep(1)。 } 然后編譯 以及 : gcc o receiver L../bs/pclib/lib lemi I../libs/pclib/include gcc o sender L../libs/pclib/lib lemi I../libs/pclib/include 編譯完成之后生成了可執(zhí)行文件接著運(yùn)行測(cè)試,首先啟動(dòng) PC 機(jī)的 emi_core程序, 然后分別在兩個(gè)終端啟動(dòng) sender 和 receiver。 sudo ../libs/pclib/bin/emi_core d (一個(gè)終端 ) ./reciever (另一終端 ) ./sender 最后的運(yùn)行結(jié)果為運(yùn)行結(jié)果。 在發(fā)送終端會(huì)顯示: hello 在接收終端會(huì)顯示: msgcmd 5, msgdata hello 證明收發(fā)消息成功。 環(huán)境部署以及 eh_server 基于 ARMcortexA8 內(nèi)核的嵌入式智能家居系統(tǒng)的設(shè)計(jì)與開發(fā) 15 下面來大體介紹下 eh_server, eh_serve 主要實(shí)現(xiàn)
點(diǎn)擊復(fù)制文檔內(nèi)容
研究報(bào)告相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1