




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、GC65-E OpenCPU快速開發(fā)指南GSM/GPRS 系列版本:GC65-E_OpenCPU_快速開發(fā)指南_V1.0日期:2014-01-13GC65-E OpenCPU 快速開發(fā)指南移遠(yuǎn)公司始終以為客戶提供最及時(shí)、最全面的服務(wù)為系方式如下:,如需任何幫助,請(qǐng)隨時(shí)司總部,聯(lián)移遠(yuǎn)通信技術(shù)市徐匯區(qū)田州路 99 號(hào) 13 幢 501 室郵箱: : +86 21 51086236或司當(dāng)?shù)剞k事處,登錄:http/support/salesupport.aspx 如需技術(shù)支持或反饋技術(shù)文檔中,可隨時(shí)登陸如下:http/support/techsupport.aspx前言移遠(yuǎn)公司提供該文檔內(nèi)容用以支持其
2、客戶的產(chǎn)品設(shè)計(jì)??蛻繇毎凑瘴臋n中提供的規(guī)范,參數(shù)來設(shè)計(jì)其產(chǎn)品由于客戶操作不當(dāng)而造成的人身該文檔規(guī)范進(jìn)行更新?;驌p失 本公司不承擔(dān)任何責(zé)任。在未前,移遠(yuǎn)公司對(duì)本文檔手冊(cè)屬于移遠(yuǎn)公司,任何人我公司該文檔將承擔(dān)。20 4移遠(yuǎn)通信技術(shù)保留一切權(quán)利。Copyright QuecWireless Solutions C,20141 / 32移遠(yuǎn)通信技術(shù)GC65-EOpenCPU快速開發(fā)指南適 用 產(chǎn) 品2 / 32移遠(yuǎn)通信技術(shù)模塊類型GC65-EGC65-EOpenCPU快速開發(fā)指南文檔歷史修訂1.02014-01-13初始版本移遠(yuǎn)通信技術(shù)3 / 30版本日期作者變更表述GC65-E OpenCPU 快速
3、開發(fā)指南目錄文檔歷史3目錄4表格索引5索引61引言72OpenCPU 文檔83必需品...3.1.5.主機(jī)系統(tǒng)9編譯器和集成開發(fā)環(huán)境9編程語言9硬件模塊9OpenCPU SDK9456編譯環(huán)境10編譯11. .6.3.使用TE-A12使用模塊12. 12789調(diào)試13了解 SDK14建立工程1610如何開始編程17.如何編程 GPIO17編程 GPRS2111編程注意事項(xiàng)28....0.外部看門狗28重啟方案28重要參數(shù)保護(hù)功
4、能28. 29客戶任務(wù)Timer 使用29串口功能29GPRS 和 TCP 功能30動(dòng)態(tài)內(nèi)存分配30程序調(diào)試30低功耗3112附錄324 / 32移遠(yuǎn)通信技術(shù)GC65-E OpenCPU 快速開發(fā)指南表格索引表表表1:OPENCPU 文檔82:目錄描述143:參考文檔325 / 32移遠(yuǎn)通信技術(shù)GC65-E OpenCPU 快速開發(fā)指南索引圖 1:編譯11圖 2:目錄結(jié)構(gòu)14圖 3:“MAIN.C” 文檔16圖 4:EVB LED指示186 / 32移遠(yuǎn)通信技術(shù)GC65-EOpenCPU快速開發(fā)指南1引言本文檔引導(dǎo)描述了如何快速使用 OpenCPU 開發(fā)應(yīng)用程序。移遠(yuǎn)通信技術(shù)7 / 32GC6
5、5-E OpenCPU 快速開發(fā)指南2OpenCPU 文檔表 1:OpenCPU 文檔GC65-E OpenCPU 快速開發(fā)指南描述了如何快速使用 OpenCPU SDK 來開發(fā)應(yīng)用程序。OpenCPU Cygwin 安裝手冊(cè)Cygwin 編譯環(huán)境的安裝指導(dǎo)。GC65-E OpenCPU User Guide完整的介紹了 OpenCPU的相關(guān)細(xì)節(jié)和用戶 API。描述了如何使用 RIL API 來編程 AT 命令,并在 API 返回時(shí)獲得 AT 命令的響應(yīng)。OpenCPU RIL Application NoteOpenCPU FOTA Application Note描述了如何編程 FOTA
6、相關(guān)應(yīng)用程序。QFlash User Guide描述了如何燒寫程序。移遠(yuǎn)通信技術(shù)8 / 32文檔描述GC65-EOpenCPU快速開發(fā)指南3必需品開發(fā)所需的基本配置需求如下所述。3.1. 主機(jī)系統(tǒng)主要支持以下的操作系統(tǒng):Windows XP(至少安裝 SP1) Windows 20003.2. 編譯器和集成開發(fā)環(huán)境Cygwin 編譯器。具體請(qǐng)參考文檔1.3.3. 編程語言對(duì)基本的 c 語言編程知識(shí)有所了解。3.4. 硬件模塊QuecQuecGSM/GPRS 具有 OpenCPU EVB特性的模塊其他配件(電源適配器, 串口線)3.5. OpenCPU SDKOpenCPU SDK工具包移遠(yuǎn)通信
7、技術(shù)9 / 32GC65-EOpenCPU快速開發(fā)指南4編譯環(huán)境請(qǐng)參考文檔1安裝并配置編譯環(huán)境。移遠(yuǎn)通信技術(shù)10 / 32GC65-E OpenCPU 快速開發(fā)指南5編譯雙擊SDK 下的 build_setup.bat 文件進(jìn)入Cygwin 命令行下。的編譯。執(zhí)行以下命令可以完成默認(rèn)的 App 程序編譯成功后會(huì)在相應(yīng)目錄下生成相應(yīng)文件。圖 1:編譯移遠(yuǎn)通信技術(shù)11 / 32make.sh cleanmake.sh newGC65-E OpenCPU 快速開發(fā)指南66.1. 使用 TE-A使用TE-A 的用戶,可以使用 TE-A 上的 Mini USB 接口來口(PL-2303)驅(qū)動(dòng)程序。程序。
8、使用此接口需要先安裝 USB 轉(zhuǎn)串6.2. 使用模塊直接使用模塊的用戶,需要先確保Debug 口連接到 PC 線上相應(yīng)驅(qū)動(dòng)已經(jīng)正確安裝。6.3.GC65-E 模塊使用調(diào)試串口做端口(模塊的 30 和 31 管腳)。工具使用 Quec的 QFlash 工具。關(guān)于如何/燒寫 App 應(yīng)用程序,請(qǐng)參考文檔3。移遠(yuǎn)通信技術(shù)12 / 32GC65-E OpenCPU 快速開發(fā)指南7調(diào)試在 OpenCPU 中,App 程序的調(diào)試主要采用串口打印的方式進(jìn)行程序調(diào)試。GC65-E OpenCPU 模塊提供三個(gè)物理串口,一個(gè) MAIN UART(UART1),一個(gè) Debug UART,一個(gè)輔助串口(UART2
9、),均可以用來調(diào)試程序。方面 OpenCPU 提供 Ql_Debug_Trace()函數(shù)專門從 Debug 端口打印 log,但需要使用CoolWatcher 工具來捕獲 log。此外,開發(fā)者也可以調(diào)用 Ql_UART_Open()來打開 UART1 或者 UART2,調(diào)用 Ql_UART_Write()函數(shù)來從串口 1/2 輸出信息來調(diào)試程序。移遠(yuǎn)通信技術(shù)13 / 32GC65-EOpenCPU快速開發(fā)指南8了解 SDK解壓 SDK 資源包之后,到的典型的目錄結(jié)構(gòu)如下所示。圖 2:目錄結(jié)構(gòu)表 2:目錄描述SDK用戶工程根目錄。build編譯輸出結(jié)果。此目錄用于存放用戶定制相關(guān)文件。在子目錄“
10、customconfig”下的相關(guān)文件中,開發(fā)可以根custom據(jù)需要重新配置應(yīng)用程序,配置任務(wù)??臻g大小,GPIO 初始狀態(tài)等??臻g大小,添加新任務(wù),所有為開發(fā)提供的配置文件的文件名均以“custom_”開頭。docs該目錄下保存著 OpenCPU 相關(guān)說明文檔。例子代碼目錄。 每個(gè)例程均實(shí)現(xiàn)了一個(gè)獨(dú)立而完整的功能并且可編譯為可執(zhí)行的二進(jìn)制文件。exleinclude所有的 APIs 頭文件保存在該目錄下。libs所需庫文件。make編譯文件和 makefile 文件。存放 OpenCPU RIL 源代碼。用戶根據(jù)該源碼可以通過RIL 提供的基礎(chǔ)功能,來發(fā)送AT 命令,ril移遠(yuǎn)通信技術(shù)14
11、 / 32目錄描述GC65-E OpenCPU 快速開發(fā)指南或者是先自己的 API 函數(shù)。tools相關(guān)開發(fā)工具, 如工具和FOTA 打包工具。請(qǐng)參考文檔2的第 2.4 節(jié)以獲得的關(guān)于 SDK 開發(fā)環(huán)境的相關(guān)知識(shí),例如編譯方法,方法等。請(qǐng)參考文檔2的第 4 節(jié)以獲得的關(guān)于系統(tǒng)配置信息的相關(guān)知識(shí),例如堆空間大小,如何添加新任務(wù),設(shè)置任務(wù)??臻g大小和設(shè)置 GPIO 初始狀態(tài)等。15 / 32移遠(yuǎn)通信技術(shù)GC65-E OpenCPU 快速開發(fā)指南9建立工程默認(rèn)情況下,目錄 SDKcustom被設(shè)計(jì)為用戶工程存放的根目錄.該目錄下, 已提供了一份“main.c” 文檔,其中展示了一個(gè)典型的 OpenC
12、PU應(yīng)用程序框架的寫法。圖 3:“main.c” 文檔在目錄 SDKcustom下,開發(fā)可以添加其他模塊文件和子目錄。具體請(qǐng)參考文件2的第 2.4.5 節(jié)獲取幫助信息。具體編譯方法和 makefile 文件時(shí)用請(qǐng)參考文件文件2的第 2.4.5 節(jié)。到目前為止,開發(fā)文件中添加代碼或直可能已經(jīng)一個(gè)默認(rèn)的用戶工程已經(jīng)準(zhǔn)備好了。開發(fā)只需在 “main.c”換該文件即可。當(dāng)然,也可以添加其他的 .c 文件,并且 “SDKcustom”目錄下新添加的.c 文件會(huì)被自動(dòng)編譯。移遠(yuǎn)通信技術(shù)16 / 32GC65-E OpenCPU 快速開發(fā)指南10 如何開始編程本節(jié)中,設(shè)計(jì)了兩個(gè)例程用以展示如何編寫基于 Op
13、enCPU SDK 的應(yīng)用程序。 在第一個(gè)例子中,通過周期性的改變 GPIO 的高低電平來實(shí)現(xiàn) LED 的閃爍。在另一個(gè)例子中,展示了如何使用 GPRS 網(wǎng)絡(luò)建立 TCP 連接,向 PC 上TCP server 進(jìn)行數(shù)據(jù)傳輸。10.1.如何編程 GPIO包含頭文件如果要確定需要包含哪些頭文件,性改變 GPIO 電平來驅(qū)動(dòng) LED 閃爍。要清楚的應(yīng)用程序的基本需求。在本例中,通過周期首先,需要控制 GPIO,GPIO 相關(guān)定義在“ql_gpio.h”中。然后,“周期性”意味著需要使用 timer 功能,timer 相關(guān)定義在“ql_timer.h“中。最后,每個(gè)應(yīng)用程序都需要一個(gè)消息循環(huán),所以包
14、含“ql_system.h”,并且,需要輸出相關(guān)的日志信息來調(diào)試程序,所以“ql_stdlib.h”和“ql_trace.h”也是需要的。所有的 API 的返回值定義在“ql_error.h”中。最終,需要包含的頭文件如下所示:編程 GPIO在 QuecLED,因此EVB 上,網(wǎng)絡(luò)燈(NETLIGHT)引腳和狀態(tài)指示(S可以通過控制該引腳來控制其 LED 的閃爍。US)引腳被分別連接到了單獨(dú)的移遠(yuǎn)通信技術(shù)17 / 32#include ql_stdlib.h #include ql_trace.h #include ql_error.h #include ql_system.h #includ
15、e ql_gpio.h#include ql_timer.hGC65-EOpenCPU快速開發(fā)指南圖 4:EVB LED指示這里,選擇 NETLIGHT 引腳作為 GPIO 引腳。在程序開始的地方,對(duì) GPIO 做如下配置:方向:輸出初始狀態(tài):低電平上下拉狀態(tài):使能,上拉接下來,需要啟動(dòng)一個(gè)定時(shí)器,周期性的拉高/低 GPIO 來實(shí)現(xiàn) LED 閃爍。定時(shí)器和 LED 閃爍在本例情況下,定義一個(gè)定時(shí)器,其溢出時(shí)間為 500ms。這樣 LED 將亮 500ms 然后滅 500ms。第一步,定義一個(gè)定時(shí)器,和對(duì)應(yīng)的定時(shí)器中斷處理程序。18 / 32移遠(yuǎn)通信技術(shù)/Define a timer and t
16、he handler sic u32 m_myTimerId=2013;sic u32 m_nerval=500;/500mssic void Callback_OnTimer(u32 timerId, void* param);/Initialize GPIOret = Ql_GPIO_Init(m_gpioPin, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);if (QL_RET_OK = ret)Ql_Debug_Trace(rn);elseQl_Debug_Trace(rn, ret);/Define GPIO pinsic E
17、num_PinName m_gpioPin = PINNAME_NETLIGHT;GC65-EOpenCPU快速開發(fā)指南第二步,并啟動(dòng)定時(shí)器。最后,實(shí)現(xiàn)定時(shí)器中斷處理函數(shù)。到目前為止,所有的編碼工作完畢。完整的代碼如下所示:19 / 32移遠(yuǎn)通信技術(shù)#include ql_stdlib.h #include ql_trace.h #include ql_error.h #include ql_system.h #include ql_gpio.h #include ql_timer.h/Define GPIO pinsic Enum_PinName m_gpioPin = PINNAME_NE
18、TLIGHT;/Define a timer and the handler sic u32 m_myTimerId=2013;sic u32 m_nerval=500;/500mssic void Callback_OnTimer(u32 timerId, void* param);/*/* The entrance procedure for this exle application*/*/ void proc_main_task(s32 taskId)sic void Callback_OnTimer(u32 timerId, void* param)s32 gpioLvl=Ql_GP
19、IO_GetLevel(m_gpioPin); if (PINLEVEL_LOW = gpioLvl)/Set GPIO to high level, then LED is light Ql_GPIO_SetLevel(m_gpioPin, PINLEVEL_HIGH); Ql_Debug_Trace(rn);else/Set GPIO to low level, then LED is dark Ql_GPIO_SetLevel(m_gpioPin, PINLEVEL_LOW); Ql_Debug_Trace(rn);/Register and start timerQl_Timer_Re
20、gister(m_myTimerId, Callback_OnTimer, NULL); Ql_Timer_Start(m_myTimerId, m_nerval, TRUE);GC65-E OpenCPU 快速開發(fā)指南s32 ret;ST_MSG msg;Ql_Debug_Trace(OpenCPU: LED Blinking by NETLIGHrn);/Initialize GPIOret=Ql_GPIO_Init(m_gpioPin, PINDIRECTION_OUT, PINLEVEL_LOW, PINPULLSEL_PULLUP);if (QL_RET_OK = ret)Ql_De
21、bug_Trace(rn);Ql_Debug_Trace(rn, ret);/Register and start timerQl_Timer_Register(m_myTimerId, Callback_OnTimer, NULL); Ql_Timer_Start(m_myTimerId, m_nerval, TRUE);/START MESSAGE LOOP OF THIS TASKwhile(TRUE)Ql_OS_GetMessage(&msg); switsg.message)default:break;sic void Callback_OnTimer(u32 timerId, vo
22、id* param)s32 gpioLvl=Ql_GPIO_GetLevel(m_gpioPin); if (PINLEVEL_LOW = gpioLvl)/Set GPIO to high level, then LED is light Ql_GPIO_SetLevel(m_gpioPin, PINLEVEL_HIGH); Ql_Debug_Trace(rn);else/Set GPIO to low level, then LED is dark Ql_GPIO_SetLevel(m_gpioPin, PINLEVEL_LOW); Ql_Debug_Trace(rn);20 / 32移遠(yuǎn)
23、通信技術(shù)GC65-E OpenCPU 快速開發(fā)指南運(yùn)行程序完整的代碼到SDKcustommain.c,以覆蓋已經(jīng)存在的代碼。編譯并可執(zhí)行代碼到模塊中。請(qǐng)參考文檔2的第 2.4.3 和 2.4.4 節(jié)以了解如何編譯和的相關(guān)信息。當(dāng)該程序運(yùn)行時(shí),可以看到 EVB 上的“D502”LED 每 500ms 閃爍一次。同時(shí),也可以觀察到從 DEBUG口輸出的log 信息:10.2.編程 GPRS包含頭文件如果要確定需要包含哪些頭文件,要清楚的應(yīng)用程序的基本需求。首先,要包含。需要使用 OpenCPU RIL 功能,所以“custom_feature_def.h” 和 “ril.h”這兩個(gè)文件需然后,GP
24、RS 相關(guān)的 API 定義在文件“ql_gprs.h”和“and ql_socket.h”中。最后,每個(gè)應(yīng)用程序都需要一個(gè)消息循環(huán),所以包含“ql_system.h”,并且,需要輸出相關(guān)的日志信息來調(diào)試程序,所以“ql_stdlib.h”和“ql_trace.h”也是需要的。所有的 API 的返回值定義在“ql_error.h”中。最終,需要包含的頭文件如下所示:21 / 32移遠(yuǎn)通信技術(shù)#include custom_feature_def.h #include ril.h#include ql_stdlib.h #include ql_trace.h #include ql_error.h
25、 #include ql_system.h#include ql_gprs.hGC65-E OpenCPU 快速開發(fā)指南 #include ql_socket.h定義 PDP 上下文和 GPRS 配置信息這里,設(shè)定 APN 為中國移動(dòng)“CMNET”。用戶可根據(jù)具體情況修改。定義 server 的 IP 地址和端口這里,定義了一個(gè)Quec的公共 server 和 socket 端口。用戶可使用自身的 server。定義接受緩存區(qū)當(dāng) socket 連接建立時(shí),需要一個(gè)緩存區(qū)來接收來自 socket 的數(shù)據(jù)。為 GPRS 和 socket 定義回調(diào)函數(shù)Callback_GPRS_Deactivate
26、d:當(dāng) GPRS 網(wǎng)絡(luò)掉網(wǎng)時(shí),該回調(diào)會(huì)被調(diào)用。 Callback_Socket_Close: 當(dāng) socket 連接斷開時(shí),該回調(diào)被調(diào)用。 Callback_Socket_Read: 當(dāng) socket 上接收到數(shù)據(jù)時(shí)該回調(diào)被調(diào)用。Callback_Socket_Write: 當(dāng)調(diào)用 Ql_SOC_Write 發(fā)送數(shù)據(jù)到 socket 時(shí),但是此時(shí) socket 處于忙碌狀態(tài),之后其空閑時(shí),該回調(diào)函數(shù)會(huì)被調(diào)用去通知應(yīng)用程序 該 socket 可用。22 / 32移遠(yuǎn)通信技術(shù)sic void Callback_GPRS_Deactived(u8 contextId, s32 errCode, vo
27、id* customParam); sic void Callback_Socket_Close(s32 socketId, s32 errCode, void* customParam );sic void Callback_Socket_Read(s32 socketId, s32 errCode, void* customParam );sic void Callback_Socket_Write(s32 socketId, s32 errCode, void* customParam );#defineSOC_RECV_BUFFER_LEN1460sic u8m_SocketRcvBu
28、fSOC_RECV_BUFFER_LEN;sic u8m_SrvADDR20 = 7;sic u32 m_SrvPort = 6003;#define PDP_CONTEXT_ID0sic ST_GprsConfig m_GprsConfig = CMNET,/APN name,/User name for APN,/Password for APN 0,NULL, NULL,;GC65-E OpenCPU 快速開發(fā)指南編程 OpenCPU RIL既然要使用 OpenCPU RIL 功能,那么應(yīng)用程序就需要在時(shí)調(diào)用函數(shù) Ql_RIL_Initialize()去對(duì) RIL 相關(guān)功能進(jìn)行初始化。務(wù)
29、收到 MSG_ID_RIL_READY 消息編程系統(tǒng) URC 消息 Program system URC messages在接入 GPRS 網(wǎng)絡(luò)之前,須要等待模塊成功到 GPRS 網(wǎng)絡(luò)。當(dāng)模塊上 GPRS 網(wǎng)絡(luò)后,應(yīng)用程序會(huì)收到 URC 消息“URC_GPRS_NW_SE_IND”。在此之前,系統(tǒng)啟動(dòng)過程中,應(yīng)用程序會(huì)收到一些其他的指示模塊初始化狀態(tài)的 URC 消息,比如 CFUN 狀態(tài),狀態(tài),GSM 網(wǎng)絡(luò)變化狀態(tài)。開發(fā)在程序中在收到這些消息時(shí),可以根據(jù)需要進(jìn)行相應(yīng)的處理。以下代碼完整的展示了系統(tǒng)消息和 URC 消息相關(guān)的使用方法:23 / 32移遠(yuǎn)通信技術(shù)/*/* The entrance
30、procedure for this exle application*/*/ void proc_main_task(s32 taskId)ST_MSG msg;Ql_Debug_Trace(OpenCPU: Simple GPRS-TCP Exlern);/ START MESSAGE LOOP OF THIS TASKwhile(TRUE)Ql_OS_GetMessage(&msg); switsg.message)case MSG_ID_RIL_READY: Ql_Debug_Trace(rn); Ql_RIL_Initialize();break;/START MESSAGE LOO
31、P OF THIS TASKwhile(TRUE)Ql_OS_GetMessage(&msg); switsg.message)case MSG_ID_RIL_READY: Ql_Debug_Trace(rn); Ql_RIL_Initialize();break;GC65-EOpenCPU快速開發(fā)指南編程 GPRS Program GPRS模塊到 GPRS 網(wǎng)絡(luò)之后,可以開始編寫 GPRS 相關(guān)的程序。GPRS 編程通常主要包括以下步驟。具體請(qǐng)參考文檔。首先,GPRS 相關(guān)的回調(diào)函數(shù)。24 / 32移遠(yuǎn)通信技術(shù)ST_PDPContxt_Callback callback_gprs_func
32、= /Callback_GPRS_Actived, NULL,case MSG_ID_URC_INDICATION:/Ql_Debug_Trace(rn, msg.param1); switch (msg.param1)case URC_SYS_INIT_SE_IND:Ql_Debug_Trace(rn, msg.param2); break;case URC_SIM_CARD_SE_IND:Ql_Debug_Trace(rn, msg.param2); break;case URC_GSM_NW_SE_IND:Ql_Debug_Trace(rn, msg.param2); break;cas
33、e URC_GPRS_NW_SE_IND:Ql_Debug_Trace(rn, msg.param2); if (NW_S_REGISTERED = msg.param2)GPRS_Surf();break;case URC_CFUN_SE_IND:Ql_Debug_Trace(rn, msg.param2); break;default:Ql_Debug_Trace(- Other URC: type=%drn, msg.param1); break;break; default:break;GC65-EOpenCPU快速開發(fā)指南然后,配置 PDP 上下文。接著,激活 PDP。25 / 32
34、移遠(yuǎn)通信技術(shù)ret=Ql_GPRS_Activate(PDP_CONTEXT_ID); if (ret = GPRS_PDP_SUCS)m_GprSe = 1;Ql_Debug_Trace(rnrn);elseQl_Debug_Trace(rnrn, ret); return;ret=Ql_GPRS_Config(PDP_CONTEXT_ID, &m_GprsConfig); if (GPRS_PDP_SUCS = ret)Ql_Debug_Trace(rn);elseQl_Debug_Trace(rn, ret); return;Callback_GPRS_Deactived;ST_SOC_
35、Callback callback_soc_func = /Callback_socket_connect, NULL,Callback_Socket_Close,/Callback_socket_accept, NULL,Callback_Socket_Read, Callback_Socket_Write;/Register GPRS callbackret=Ql_GPRS_RegistDP_CONTEXT_ID, &callback_gprs_func, NULL); if (GPRS_PDP_SUCS = ret)Ql_Debug_Trace(rn);elseQl_Debug_Trac
36、e(rn, ret); return;GC65-E OpenCPU 快速開發(fā)指南最后,反激活 PDP。編程 socketGPRS PDP 激活之后,可以開始編程 TCP/UDP socket。Socket 編程主要包含如下步驟。具體GPRS API 相關(guān)使用情況,請(qǐng)參考文檔。第一步,socket 相關(guān)的回調(diào)函數(shù)。第二步,創(chuàng)建 socket。第三步,連接到 socket server。26 / 32移遠(yuǎn)通信技術(shù)ret=Ql_SOC_Connect (m_SocketId,(u32)m_ipAddress, m_SrvPort); if (SOC_SUCS = ret)m_SocketConnSe
37、=1;Ql_Debug_Trace(rn);elseQl_Debug_Trace(rn, ret); Ql_Debug_Trace(rn); Ql_SOC_Close(m_SocketId);m_SocketId=-1;m_SocketId=Ql_SOC_Create(PDP_CONTEXT_ID, SOC_TYPE_TCP); if (m_SocketId = 0)Ql_Debug_Trace(rn, m_SocketId);elseQl_Debug_Trace(rn, m_SocketId); return;ret=Ql_SOC_Register(callback_soc_func, NU
38、LL); if (SOC_SUCS = ret)Ql_Debug_Trace(rn);elseQl_Debug_Trace(rn, ret); return;ret=Ql_GPRS_Deactivate(PDP_CONTEXT_ID);Ql_Debug_Trace(rnrn, ret);GC65-E OpenCPU快速開發(fā)指南Socket 連接到 server 之后,你可以發(fā)送數(shù)據(jù)到 server 或從 server 接收數(shù)據(jù)。第四步,發(fā)送 socket 數(shù)據(jù)。這里的代碼展示了發(fā)送數(shù)據(jù)“A B C D E F G”到 server。發(fā)送完數(shù)據(jù)之后,可以調(diào)用 Ql_SOC_GetAckNumbe
39、r()來檢測(cè) server 是否收到數(shù)據(jù)。與此同時(shí),也可以調(diào)用 Ql_SOC_Close()來關(guān)閉 socket 連接,或調(diào)用 Ql_GPRS_DeactivateEx()來反激活 GPRS PDP。本例完整的代碼請(qǐng)參考SDK 中的 ex參照該例程。le_simple_tcpip.c,你可以編譯并運(yùn)行該代碼。具體用法也請(qǐng)27 / 32移遠(yuǎn)通信技術(shù)char pchData200; s32dataLen=0; u64 ackNum=0;Ql_memset(pchData, 0 x0, sizeof(pchData);dataLen += Ql_sprf(pchData + dataLen, %s,
40、 A B C D E F G); ret=Ql_SOC_Send(m_SocketId, (u8*)pchData, dataLen);if (ret =dataLen)Ql_Debug_Trace( rn);elseQl_Debug_Trace( rn);return;GC65-E OpenCPU 快速開發(fā)指南11編程注意事項(xiàng)11.1.外部看門狗請(qǐng)用戶在產(chǎn)品設(shè)計(jì)中增加外部看門狗,以防應(yīng)用程序邏輯異常不能恢復(fù)。當(dāng)外部看門狗溢出時(shí),讓外部看門狗復(fù)位模塊的 VBAT 管腳以實(shí)現(xiàn)斷電重啟,以便模塊狀態(tài)得到徹底復(fù)位。11.2.重啟方案為了讓模塊持續(xù)穩(wěn)定運(yùn)行,用戶在設(shè)計(jì)中增加重啟方案。比如在不需要模塊工
41、作或者工作負(fù)荷最小的時(shí)候,讓模塊復(fù)位一下。用戶可以參考 24 小時(shí)重啟一次。另外,當(dāng)模塊發(fā)生網(wǎng)絡(luò)故障,用戶可以采用模塊重啟的方案來嘗試讓模塊自動(dòng)恢復(fù)。API 函數(shù)實(shí)現(xiàn)重啟)和硬重啟(采用上一節(jié)介紹的外部看門狗方案實(shí)使用硬重啟,以便模塊狀態(tài)得到徹底復(fù)位。模塊重啟,有軟重啟(調(diào)用現(xiàn)重啟)。本章節(jié)介紹的重啟方案11.3.重要參數(shù)保護(hù)功能關(guān)于重要參數(shù),為了保證安全和數(shù)據(jù)不會(huì)丟失,使用了一個(gè)兩個(gè)獨(dú)立的 block。該 block 每寫入一次都會(huì)擦除一次,寫入次數(shù)有上限,頻繁寫入會(huì)導(dǎo)致 flash 損壞,設(shè)備無法工作。所以該區(qū)域只能用于存放工廠出廠配置,或者是類似APN 服務(wù)器地址等信息,出廠后的更新頻率
42、要控制在 5000 次以下。該參數(shù)寫入后,需要執(zhí)行一次正常關(guān)機(jī)。直接斷電或者使用 EMGOFF 關(guān)機(jī),會(huì)有概率導(dǎo)致參數(shù)沒有寫入 flash。相關(guān)應(yīng)用編程請(qǐng)參考文檔3。移遠(yuǎn)通信技術(shù)28 / 32GC65-E OpenCPU 快速開發(fā)指南11.4.客戶任務(wù)客 戶任務(wù) 的添加主要在 custom_task_cfg.h 文 件中, 添加一個(gè) TASK_ITEM (proc_name,subtask1_id,4*1024, DEFAULT_VALUE1, DEFAULT_VALUE2),其中第一個(gè)參數(shù)為該任務(wù)的函數(shù)的名稱,任務(wù)添加后必須實(shí)現(xiàn)這個(gè)函數(shù)否則編譯會(huì)報(bào)錯(cuò),第二個(gè)參數(shù)是該任務(wù)的 task id,
43、任務(wù)間發(fā)送消息使用的任務(wù)號(hào)應(yīng)該是這個(gè) task id(subtask1_id)而不是 0,1,2,3 等數(shù)字??蛻舻拿總€(gè)任務(wù)的主循環(huán)中都必須有一個(gè) Ql_OS_GetMessage,在沒有消息的時(shí)候任務(wù)會(huì)被阻塞讓出 CPU 使用權(quán),任務(wù)收到消息的時(shí)候,該函數(shù)會(huì)獲取到并繼續(xù)執(zhí)行。如果任務(wù)的主循環(huán)中沒有該函數(shù),會(huì)導(dǎo)致消息無法處理,長時(shí)間后導(dǎo)致操作系統(tǒng) 死機(jī),同時(shí)連 timer TCP 等函數(shù)的回調(diào)也是在任務(wù)獲取到消息的時(shí)候觸發(fā),沒有調(diào)用 Ql_OS_GetMessage,會(huì)導(dǎo)致這些功能的回調(diào)函數(shù)也無法被執(zhí)行到。11.5.Timer 使用GC65-E OPEN CPU 中提供兩種 timer,一種是
44、普通 timer,一種是 fast timer,普通 timer 一個(gè)任務(wù)中可以最多10 個(gè),fast timer 部分 task 一共 10 個(gè)沒有 task 之分。普通 timer 在的時(shí)候會(huì)綁定調(diào)用函數(shù)所在的 task id,中斷函數(shù)中無法timer,后使用ql_timer_start 和 ql_timer_stop 必須跟該 timer時(shí)的 task 相同,否則將返回調(diào)用失敗。普通timer 運(yùn)行期間,如果該timer 所在程序的Ql_OS_GetMessage 一直沒有執(zhí)行到那么也會(huì)導(dǎo)致timer的消息無法處理引起 timer 超時(shí)回調(diào)不執(zhí)行。Fast timer 不區(qū)分任務(wù),F(xiàn)as
45、t timer 是底層中斷直接上報(bào)上來,實(shí)時(shí)性較好,但是注意不要在超時(shí)函數(shù)中處理太多信息,否則會(huì)引起系統(tǒng)異常。11.6.串口功能GC65-E OpenCPU 中提供三個(gè)物理串口,一個(gè) MAIN UART,一個(gè) Debug UART,一個(gè) UART2。MAIN UART 和UART2 可以用來做應(yīng)用開發(fā),默認(rèn)波特率 115200,8N1,串口數(shù)據(jù)緩沖 buffer 大小為 4096 字節(jié);Debug 口只能用來做系統(tǒng) log,需要使用 CoolWatcher 工具來捕獲 log。如果發(fā)現(xiàn)實(shí)際寫入的字節(jié)數(shù)比要寫入的字節(jié)數(shù)少,說明 buffer 已經(jīng)滿了,此時(shí)需要當(dāng)寫入串等待串口的“EVENT_UA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 魚類購買合同范本
- 鋪面整幢出售合同范本
- SBI-0087702-生命科學(xué)試劑-MCE
- 2025河南新投數(shù)字能源技術(shù)有限公司招聘1人筆試參考題庫附帶答案詳解
- 相框銷售合同范本
- 知識(shí)產(chǎn)權(quán)管理企業(yè)核心競(jìng)爭(zhēng)力之一
- 科技推動(dòng)教育變革創(chuàng)新人才培養(yǎng)模式
- 私人裝飾合同范本
- 社交電商的稅收政策與合規(guī)性探討
- 社交媒體時(shí)代的管理溝通挑戰(zhàn)與機(jī)遇
- 川教版六年級(jí)《生命.生態(tài).安全》下冊(cè)第1課《我們的閑暇時(shí)光》課件
- 2024年建筑業(yè)10項(xiàng)新技術(shù)
- 重大風(fēng)險(xiǎn)管控方案及措施客運(yùn)站
- 新編大學(xué)英語跨文化交際教程 課件 Unit 1-A Chinese Character
- 方案偏離處理措施
- 顱腦損傷的護(hù)理診斷及護(hù)理措施
- 純電動(dòng)乘用車 技術(shù)條件
- 德力西質(zhì)量獎(jiǎng)自評(píng)報(bào)告領(lǐng)導(dǎo)樣本
- IT總監(jiān)年終述職報(bào)告
- 環(huán)境衛(wèi)生整治推進(jìn)行動(dòng)實(shí)施方案
- 經(jīng)顱磁刺激技術(shù)操作指南
評(píng)論
0/150
提交評(píng)論