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

正文內(nèi)容

張樂(lè)然-無(wú)線新型電子車(chē)牌安全加密和鑒權(quán)系統(tǒng)-資料下載頁(yè)

2025-04-13 04:55本頁(yè)面
  

【正文】 00ms,啟動(dòng)模塊。拉高Reset引腳大于100ms,復(fù)位模塊。等待模塊啟動(dòng)和初始化,直到接收到+CFUN: 1和+CPIN: READY則表示模塊啟動(dòng)完成,SIM卡準(zhǔn)備就緒,已經(jīng)接入網(wǎng)咯。發(fā)送AT命令確認(rèn)模塊工作正常。在庫(kù)函數(shù)中,提供了兩個(gè)函數(shù)用來(lái)啟動(dòng)模塊和檢測(cè)模塊網(wǎng)絡(luò)連接,分別如下://初始化模塊uint8 SQC_ME3000_Init()。//查詢是否入網(wǎng)uint8 SQC_ME3000_Creg()。其中第一個(gè)函數(shù)調(diào)用后就會(huì)啟動(dòng),結(jié)束后返回值,若為1則表示啟動(dòng)成功,若為0則表示啟動(dòng)失敗。第二個(gè)函數(shù)檢測(cè)是否入網(wǎng),原理是發(fā)送發(fā)送AT+CGREG?命令,會(huì)檢測(cè)模塊反饋結(jié)果,若為+CREG: 0, 1則表示入網(wǎng)成功。函數(shù)返回值同樣是返回1表示成功,返回0表示失敗。 ME3000連接服務(wù)器連接服務(wù)器的步驟比較多,在函數(shù)庫(kù)中提供了如下函數(shù)://打開(kāi)gprs網(wǎng)絡(luò)uint8 SQC_ME3000_Open()。//關(guān)閉gprs網(wǎng)絡(luò)uint8 SQC_ME3000_Close()。//查詢gprs連接狀態(tài)uint8 SQC_ME3000_Pppstat()。//使用tcp連接服務(wù)器uint8 SQC_ME3000_Connect(struct _in_addr addr)。//查詢tcp連接狀態(tài)uint8 SQC_ME3000_Tcpstat()。//關(guān)閉tcp連接uint8 SQC_ME3000_Disconnect()。:開(kāi)始打開(kāi)gprs網(wǎng)絡(luò)SQC_ME3000_Open()構(gòu)造_in_add結(jié)構(gòu)體,填入連接的服務(wù)器IP和port成功檢驗(yàn)gprs連接狀態(tài)SQC_ME3000_Pppstat()建立TCP連接SQC_ME3000_Connect(struct _in_addr addr) ME3000連接服務(wù)器流程圖在建立TCP/IP連接時(shí)需要定義結(jié)構(gòu)體_in_addr類(lèi)型的變量,該結(jié)構(gòu)體定義如下:struct _in_addr{ uint8 s_addr[4]。 //保存一個(gè)IP地址 uint16 s_port。 //保存一個(gè)端口號(hào) }。填入其中的IP地址和端口傳入相應(yīng)函數(shù)即可建立連接。其余的一下函數(shù)主要提供了連接的關(guān)閉和狀態(tài)的檢測(cè)功能,在對(duì)于鏈接的管理和監(jiān)測(cè)中需要用到,用的時(shí)候直接調(diào)用即可,返回值會(huì)包含結(jié)果。 ME3000發(fā)送和接收數(shù)據(jù) ME3000的接收和發(fā)送數(shù)據(jù)流程并不相同,發(fā)送數(shù)據(jù)只要是已經(jīng)建立了連接服務(wù)器的TCP/IP連接,就可以隨時(shí)調(diào)用函數(shù)進(jìn)行發(fā)送,但是接收卻要監(jiān)測(cè)接收緩沖區(qū)并主動(dòng)從中提取數(shù)據(jù)。下面對(duì)兩個(gè)部分分別介紹。 發(fā)送函數(shù)如下: //向服務(wù)器發(fā)送數(shù)據(jù) uint8 SQC_ME3000_Send(uint8 * msg,uint16 len)。 使用方法就是調(diào)用函數(shù),傳入兩個(gè)參數(shù),第一個(gè)參數(shù)為待發(fā)送數(shù)據(jù)的指針,第二個(gè)參數(shù)為待發(fā)送數(shù)據(jù)的長(zhǎng)度,返回值1表示發(fā)送成功,0表示發(fā)送失敗。 接收數(shù)據(jù)的則需要用到模塊的狀態(tài)控制塊。狀態(tài)控制塊_ME3000_PIB定義如下:struct _ME3000_PIB{ uint8 Rxbuf[1024]。 //接受數(shù)據(jù)緩沖區(qū) uint16 Rxlen。 //接收數(shù)據(jù)長(zhǎng)度 uint8 Rxflag。 //接收數(shù)據(jù)標(biāo)志位(0無(wú)數(shù)據(jù),1正在接收,2接收完成,3等待發(fā)送數(shù)據(jù)) uint8 *Rxmsg[10]。 //接收的tcp數(shù)據(jù)包指針,最大儲(chǔ)存十個(gè)數(shù)據(jù)包,長(zhǎng)度可以用strlen得到 uint8 msgnum。 //接收到的tcp數(shù)據(jù)包數(shù)量初始0,最大10}。 在結(jié)構(gòu)體中定義了TCP/IP數(shù)據(jù)包緩沖區(qū)的數(shù)據(jù)指針,最大的緩沖數(shù)量為10個(gè),數(shù)量可以通過(guò)變量msgnum獲取。這里數(shù)據(jù)的提取是通過(guò)中斷函數(shù)來(lái)完成的。中斷函數(shù)如下:/* uart5 GPRS中斷服務(wù)函數(shù) */void uart5_isr(void){ int8 recv。 struct _ME3000_PIB * pib。 pib = SQC_ME3000_GetPib()。 recv = LPLD_UART_GetChar(UART5)。 if(recv == 39。+39。) { pibRxflag = 1。 pibRxlen = 0。 pibRxbuf[pibRxlen] = recv。 pibRxlen ++。 return。 } if(recv == 39。39。 amp。amp。 pibRxflag == 0) { pibRxflag = 3。 pibRxlen = 0。 return。 } if(pibRxflag == 1) { pibRxbuf[pibRxlen] = recv。 pibRxlen ++。 if( pibRxbuf[pibRxlen1] == 0x0A amp。amp。 pibRxbuf[pibRxlen2] == 0x0D) //amp。amp。 pibRxbuf[pibRxlen3] == 0x4B //amp。amp。 pibRxbuf[pibRxlen4] == 0x4F) { pibRxbuf[pibRxlen] = 0。 if(strchr(pibRxbuf,39。:39。) == 0) { pibRxflag =0。 pibRxlen = 0。 return。 } else { if(!SQC_ME3000_Recive(pibRxbuf,pibRxlen)) { pibRxflag =2。 return。 } else { pibRxflag =0。 pibRxlen = 0。 return。 } } } return。 }} 中斷函數(shù)在接收數(shù)據(jù)后開(kāi)始分析數(shù)據(jù),ME3000模塊和主控芯片的所有通信都是通過(guò)AT指令完成,因此當(dāng)ME3000模塊從3G網(wǎng)絡(luò)收到了來(lái)自服務(wù)器的數(shù)據(jù)包,也會(huì)向主控芯片發(fā)送AT指令,AT指令都是以0x0A和0x0D結(jié)尾,只要檢測(cè)到這兩個(gè)就應(yīng)當(dāng)結(jié)束接收開(kāi)始 分析接收到的指令。這里接收到之后調(diào)用函數(shù) //解析從服務(wù)器接收到的數(shù)據(jù) uint8 SQC_ME3000_Recive(uint8* cmd,uint16 len)。 函數(shù)傳遞兩個(gè)參數(shù),第一參數(shù)表示接收到的AT指令的指針,第二個(gè)表示指令長(zhǎng)度。:開(kāi)始獲取數(shù)據(jù)長(zhǎng)度len數(shù)據(jù)頭是否是+ZIPRECVY從堆棧中分配空間并提取數(shù)據(jù)放入空間N用空間指針給pib結(jié)構(gòu)體的指針變量賦值并把接收數(shù)據(jù)數(shù)量+1結(jié)束緩沖區(qū)是否已滿YN 接收數(shù)據(jù)包流程圖 在應(yīng)用程序中,需要調(diào)用函數(shù) //獲取pib指針 struct _ME3000_PIB* SQC_ME3000_GetPib()。 該函數(shù)獲取pib指針,使得應(yīng)用程序可以讀取pib結(jié)構(gòu)體中的緩沖區(qū)信息數(shù)量,如果數(shù)量不為0則表示有待處理的數(shù)據(jù),此時(shí)可以從結(jié)構(gòu)體中獲取數(shù)據(jù)指針,用標(biāo)準(zhǔn)庫(kù)函數(shù)strlen()獲取數(shù)據(jù)長(zhǎng)度即可進(jìn)行處理。 需要注意的是,出于節(jié)約RAM資源,提高緩沖區(qū)利用率的目的,數(shù)據(jù)緩沖的指針?biāo)赶虻牡刂肥鞘褂胢alloc分配的堆??臻g,因此為了避免內(nèi)存泄露,在使用完數(shù)據(jù)之后還需要調(diào)用 free函數(shù)來(lái)釋放空間。 JSON格式的通訊協(xié)議 我們?cè)诮⒕W(wǎng)絡(luò)連接時(shí)使用的是TCP/IP協(xié)議,然而在通信協(xié)議上我們使用json的自定義協(xié)議。 JSON(JavaScript Object Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript(Standard ECMA262 3rd Edition December 1999)的一個(gè)子集。 JSON采用完全獨(dú)立于語(yǔ)言的文本格式,但是也使用了類(lèi)似于C語(yǔ)言家族的習(xí)慣(包括C, C++, C, Java, JavaScript, Perl, Python等)。這些特性使JSON成為理想的數(shù)據(jù)交換語(yǔ)言。 易于人閱讀和編寫(xiě),同時(shí)也易于機(jī)器解析和生成(網(wǎng)絡(luò)傳輸速度)。 JSON的操作也有數(shù)十個(gè)操作函數(shù),我們?cè)趉60上參照開(kāi)源的JSON操作庫(kù)cjson實(shí)現(xiàn)了完整的json操作功能。在此基礎(chǔ)上制定了通訊協(xié)議。 下面舉一個(gè)例子,這是登陸協(xié)議: 當(dāng)設(shè)備需要登錄時(shí),使用用戶名和密碼的方式登陸,則構(gòu)造一個(gè)如下的jsonobject{ mand : login, param : { name : wangweipeng, pwd : 12345678 }} 服務(wù)器接收到數(shù)據(jù)后,就可以從中讀取出這個(gè)數(shù)據(jù)請(qǐng)求,其中命令是“l(fā)ogin”也就是登陸請(qǐng)求,參數(shù)中有兩個(gè)參數(shù),一個(gè)是登錄名“wangweipeng”,一個(gè)是密碼“12345678”,在驗(yàn)證參數(shù)的合法性之后如果登陸成功,返回如下JSON:{ result : true, param : { truename : wangweipeng }} 這里返回的結(jié)果是“true”表示登陸成功,還附帶的參數(shù)“truename”用來(lái)該登陸賬號(hào)持有者的真實(shí)姓名。如果參數(shù)合法性驗(yàn)證失敗,比如密碼錯(cuò)誤,則返回如下JSON:{ result : false, param : { reason : 密碼錯(cuò)誤 }} 這里的結(jié)果是“falsh”表示登陸請(qǐng)求失敗,參數(shù)中的“reason”給出了失敗的原因是“密碼錯(cuò)誤”。我們?cè)诜?wù)器上使用網(wǎng)絡(luò)測(cè)試工具建立了一個(gè)測(cè)試服務(wù)器,然后把ip地址和端口寫(xiě)入到程序中,讓電子車(chē)牌連接服務(wù)器,并測(cè)試與服務(wù)器的收發(fā)信息操作。操作流程遵循圖54,從log中可見(jiàn),已經(jīng)順利建立了一個(gè)基于TCP協(xié)議的服務(wù)器,并且有一個(gè)客戶端已經(jīng)連接。已建立連接TCP服務(wù)器,地址【】,端口【8001】【:37872】連入...現(xiàn)在我們?cè)谇度胧蕉藰?gòu)造了一個(gè)數(shù)據(jù)包,可以看到,服務(wù)器端立刻收到了數(shù)據(jù)包并顯示了出來(lái)。我們同樣返回一段數(shù)據(jù):接受自【:37872】:hello server!發(fā)送至【:37872】:hello device!從log中可以看到,嵌入式部分也收到了數(shù)據(jù)。證明服務(wù)器通訊成功。通訊模塊的設(shè)計(jì)符合要求。ME3000初始化...ME3000初始化成功!ME3000打開(kāi)GPRS...ME3000打開(kāi)GPRS成功!ME3000正在連接...地址【】,端口【8001】...ME3000 TCP連接成功!ME3000 發(fā)送:hello server!ME3000 接受自...地址【】,端口【8001】:msg:hello device!,len:13 片上flash儲(chǔ)存 本設(shè)計(jì)使用的k60芯片型號(hào)為MK60DN512ZVLQ10,擁有512k的片上flash資源。這512k的flash又分為各256k的兩塊。芯片flash設(shè)計(jì)為兩塊flash分開(kāi)讀寫(xiě),即一塊擦寫(xiě)時(shí)另一塊仍然可以讀取,互不干擾。 因此我們利用上半片256k的flash作為code的存放區(qū),下半片256k作為data的存放區(qū),利用如下四個(gè)函數(shù)進(jìn)行flash操作: //Flash擦寫(xiě)模塊初始化 void LPLD_Flash_Init(void)。 //Flash扇區(qū)擦除 uint8 LPLD_Flash_SectorErase(uint32 seq)。 //Flash數(shù)據(jù)寫(xiě)入 uint8 LPLD_Flash_ByteProgram(uint32 seq, uint32* offset, uint32 len)。 //Flash數(shù)據(jù)讀取 uint8 LPLD_Flash_Read(uint32 *add,uint32 len)。 使用時(shí)需要先調(diào)用用初始化函數(shù)對(duì)模塊進(jìn)行初始化,初始化之后就可以調(diào)用函數(shù)進(jìn)行操作。眾所周知,flash擦除是以扇區(qū)為單位整塊擦除的,和機(jī)械硬盤(pán)以字節(jié)為單位操作的方式不用。這里512k以2k為一個(gè)扇區(qū)分為256個(gè)扇區(qū),因此擦除時(shí)給出指針,函數(shù)會(huì)擦除整個(gè)2k扇區(qū)。而在寫(xiě)入時(shí)是沒(méi)有這個(gè)整個(gè)限制,但是寫(xiě)入前必須對(duì)要寫(xiě)入的扇區(qū)進(jìn)行擦除。擦除過(guò)后才能進(jìn)行寫(xiě)入。 讀取最簡(jiǎn)單,不需要擦除也沒(méi)有限制,只要給出地址和數(shù)據(jù)長(zhǎng)度就可以把數(shù)據(jù)從Flash中讀取出來(lái) flash儲(chǔ)存測(cè)試 flash模塊的測(cè)試流程如下,先擬一段字符串,然后將字符串寫(xiě)入flash,然后再?gòu)膄lash中讀取。Flash 初始化...Flash 初始化成功!Flash 擦除塊:3Flash 寫(xiě)入數(shù)據(jù):msg:start a test!,len:13,add:3,offset:0Flash 數(shù)據(jù)寫(xiě)入成功!Flash 讀取數(shù)據(jù):add:3,offset:0,len:13Flash 讀取數(shù)據(jù)成功!msg:start a test! 通訊測(cè)試 可以看到,flash模塊的擦除、寫(xiě)入、讀取都成功,功能達(dá)到了設(shè)計(jì)目標(biāo)。 基于硬件的芯片讀取保護(hù) 儲(chǔ)存在Flash上面的程序和數(shù)據(jù)雖然是經(jīng)過(guò)加密的,但是如
點(diǎn)擊復(fù)制文檔內(nèi)容
公司管理相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖鄂ICP備17016276號(hào)-1