版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領
文檔簡介
1、GC65-E OpenCPU快速開發(fā)指南GSM/GPRS 系列版本:GC65-E_OpenCPU_快速開發(fā)指南_V1.0日期:2014-01-13GC65-E OpenCPU 快速開發(fā)指南移遠公司始終以為客戶提供最及時、最全面的服務為系方式如下:,如需任何幫助,請隨時司總部,聯(lián)移遠通信技術市徐匯區(qū)田州路 99 號 13 幢 501 室郵箱: : +86 21 51086236或司當?shù)剞k事處,登錄:http/support/salesupport.aspx 如需技術支持或反饋技術文檔中,可隨時登陸如下:http/support/techsupport.aspx前言移遠公司提供該文檔內(nèi)容用以支持其
2、客戶的產(chǎn)品設計??蛻繇毎凑瘴臋n中提供的規(guī)范,參數(shù)來設計其產(chǎn)品由于客戶操作不當而造成的人身該文檔規(guī)范進行更新。或損失 本公司不承擔任何責任。在未前,移遠公司對本文檔手冊屬于移遠公司,任何人我公司該文檔將承擔。20 4移遠通信技術保留一切權利。Copyright QuecWireless Solutions C,20141 / 32移遠通信技術GC65-EOpenCPU快速開發(fā)指南適 用 產(chǎn) 品2 / 32移遠通信技術模塊類型GC65-EGC65-EOpenCPU快速開發(fā)指南文檔歷史修訂1.02014-01-13初始版本移遠通信技術3 / 30版本日期作者變更表述GC65-E OpenCPU 快速
3、開發(fā)指南目錄文檔歷史3目錄4表格索引5索引61引言72OpenCPU 文檔83必需品...3.1.5.主機系統(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編程注意事項28....0.外部看門狗28重啟方案28重要參數(shù)保護功
4、能28. 29客戶任務Timer 使用29串口功能29GPRS 和 TCP 功能30動態(tài)內(nèi)存分配30程序調(diào)試30低功耗3112附錄324 / 32移遠通信技術GC65-E OpenCPU 快速開發(fā)指南表格索引表表表1:OPENCPU 文檔82:目錄描述143:參考文檔325 / 32移遠通信技術GC65-E OpenCPU 快速開發(fā)指南索引圖 1:編譯11圖 2:目錄結構14圖 3:“MAIN.C” 文檔16圖 4:EVB LED指示186 / 32移遠通信技術GC65-EOpenCPU快速開發(fā)指南1引言本文檔引導描述了如何快速使用 OpenCPU 開發(fā)應用程序。移遠通信技術7 / 32GC6
5、5-E OpenCPU 快速開發(fā)指南2OpenCPU 文檔表 1:OpenCPU 文檔GC65-E OpenCPU 快速開發(fā)指南描述了如何快速使用 OpenCPU SDK 來開發(fā)應用程序。OpenCPU Cygwin 安裝手冊Cygwin 編譯環(huán)境的安裝指導。GC65-E OpenCPU User Guide完整的介紹了 OpenCPU的相關細節(jié)和用戶 API。描述了如何使用 RIL API 來編程 AT 命令,并在 API 返回時獲得 AT 命令的響應。OpenCPU RIL Application NoteOpenCPU FOTA Application Note描述了如何編程 FOTA
6、相關應用程序。QFlash User Guide描述了如何燒寫程序。移遠通信技術8 / 32文檔描述GC65-EOpenCPU快速開發(fā)指南3必需品開發(fā)所需的基本配置需求如下所述。3.1. 主機系統(tǒng)主要支持以下的操作系統(tǒng):Windows XP(至少安裝 SP1) Windows 20003.2. 編譯器和集成開發(fā)環(huán)境Cygwin 編譯器。具體請參考文檔1.3.3. 編程語言對基本的 c 語言編程知識有所了解。3.4. 硬件模塊QuecQuecGSM/GPRS 具有 OpenCPU EVB特性的模塊其他配件(電源適配器, 串口線)3.5. OpenCPU SDKOpenCPU SDK工具包移遠通信
7、技術9 / 32GC65-EOpenCPU快速開發(fā)指南4編譯環(huán)境請參考文檔1安裝并配置編譯環(huán)境。移遠通信技術10 / 32GC65-E OpenCPU 快速開發(fā)指南5編譯雙擊SDK 下的 build_setup.bat 文件進入Cygwin 命令行下。的編譯。執(zhí)行以下命令可以完成默認的 App 程序編譯成功后會在相應目錄下生成相應文件。圖 1:編譯移遠通信技術11 / 32make.sh cleanmake.sh newGC65-E OpenCPU 快速開發(fā)指南66.1. 使用 TE-A使用TE-A 的用戶,可以使用 TE-A 上的 Mini USB 接口來口(PL-2303)驅動程序。程序。
8、使用此接口需要先安裝 USB 轉串6.2. 使用模塊直接使用模塊的用戶,需要先確保Debug 口連接到 PC 線上相應驅動已經(jīng)正確安裝。6.3.GC65-E 模塊使用調(diào)試串口做端口(模塊的 30 和 31 管腳)。工具使用 Quec的 QFlash 工具。關于如何/燒寫 App 應用程序,請參考文檔3。移遠通信技術12 / 32GC65-E OpenCPU 快速開發(fā)指南7調(diào)試在 OpenCPU 中,App 程序的調(diào)試主要采用串口打印的方式進行程序調(diào)試。GC65-E OpenCPU 模塊提供三個物理串口,一個 MAIN UART(UART1),一個 Debug UART,一個輔助串口(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)試程序。移遠通信技術13 / 32GC65-EOpenCPU快速開發(fā)指南8了解 SDK解壓 SDK 資源包之后,到的典型的目錄結構如下所示。圖 2:目錄結構表 2:目錄描述SDK用戶工程根目錄。build編譯輸出結果。此目錄用于存放用戶定制相關文件。在子目錄“
10、customconfig”下的相關文件中,開發(fā)可以根custom據(jù)需要重新配置應用程序,配置任務??臻g大小,GPIO 初始狀態(tài)等??臻g大小,添加新任務,所有為開發(fā)提供的配置文件的文件名均以“custom_”開頭。docs該目錄下保存著 OpenCPU 相關說明文檔。例子代碼目錄。 每個例程均實現(xiàn)了一個獨立而完整的功能并且可編譯為可執(zhí)行的二進制文件。exleinclude所有的 APIs 頭文件保存在該目錄下。libs所需庫文件。make編譯文件和 makefile 文件。存放 OpenCPU RIL 源代碼。用戶根據(jù)該源碼可以通過RIL 提供的基礎功能,來發(fā)送AT 命令,ril移遠通信技術14
11、 / 32目錄描述GC65-E OpenCPU 快速開發(fā)指南或者是先自己的 API 函數(shù)。tools相關開發(fā)工具, 如工具和FOTA 打包工具。請參考文檔2的第 2.4 節(jié)以獲得的關于 SDK 開發(fā)環(huán)境的相關知識,例如編譯方法,方法等。請參考文檔2的第 4 節(jié)以獲得的關于系統(tǒng)配置信息的相關知識,例如堆空間大小,如何添加新任務,設置任務??臻g大小和設置 GPIO 初始狀態(tài)等。15 / 32移遠通信技術GC65-E OpenCPU 快速開發(fā)指南9建立工程默認情況下,目錄 SDKcustom被設計為用戶工程存放的根目錄.該目錄下, 已提供了一份“main.c” 文檔,其中展示了一個典型的 OpenC
12、PU應用程序框架的寫法。圖 3:“main.c” 文檔在目錄 SDKcustom下,開發(fā)可以添加其他模塊文件和子目錄。具體請參考文件2的第 2.4.5 節(jié)獲取幫助信息。具體編譯方法和 makefile 文件時用請參考文件文件2的第 2.4.5 節(jié)。到目前為止,開發(fā)文件中添加代碼或直可能已經(jīng)一個默認的用戶工程已經(jīng)準備好了。開發(fā)只需在 “main.c”換該文件即可。當然,也可以添加其他的 .c 文件,并且 “SDKcustom”目錄下新添加的.c 文件會被自動編譯。移遠通信技術16 / 32GC65-E OpenCPU 快速開發(fā)指南10 如何開始編程本節(jié)中,設計了兩個例程用以展示如何編寫基于 Op
13、enCPU SDK 的應用程序。 在第一個例子中,通過周期性的改變 GPIO 的高低電平來實現(xiàn) LED 的閃爍。在另一個例子中,展示了如何使用 GPRS 網(wǎng)絡建立 TCP 連接,向 PC 上TCP server 進行數(shù)據(jù)傳輸。10.1.如何編程 GPIO包含頭文件如果要確定需要包含哪些頭文件,性改變 GPIO 電平來驅動 LED 閃爍。要清楚的應用程序的基本需求。在本例中,通過周期首先,需要控制 GPIO,GPIO 相關定義在“ql_gpio.h”中。然后,“周期性”意味著需要使用 timer 功能,timer 相關定義在“ql_timer.h“中。最后,每個應用程序都需要一個消息循環(huán),所以包
14、含“ql_system.h”,并且,需要輸出相關的日志信息來調(diào)試程序,所以“ql_stdlib.h”和“ql_trace.h”也是需要的。所有的 API 的返回值定義在“ql_error.h”中。最終,需要包含的頭文件如下所示:編程 GPIO在 QuecLED,因此EVB 上,網(wǎng)絡燈(NETLIGHT)引腳和狀態(tài)指示(S可以通過控制該引腳來控制其 LED 的閃爍。US)引腳被分別連接到了單獨的移遠通信技術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 引腳。在程序開始的地方,對 GPIO 做如下配置:方向:輸出初始狀態(tài):低電平上下拉狀態(tài):使能,上拉接下來,需要啟動一個定時器,周期性的拉高/低 GPIO 來實現(xiàn) LED 閃爍。定時器和 LED 閃爍在本例情況下,定義一個定時器,其溢出時間為 500ms。這樣 LED 將亮 500ms 然后滅 500ms。第一步,定義一個定時器,和對應的定時器中斷處理程序。18 / 32移遠通信技術/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ā)指南第二步,并啟動定時器。最后,實現(xiàn)定時器中斷處理函數(shù)。到目前為止,所有的編碼工作完畢。完整的代碼如下所示:19 / 32移遠通信技術#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移遠
23、通信技術GC65-E OpenCPU 快速開發(fā)指南運行程序完整的代碼到SDKcustommain.c,以覆蓋已經(jīng)存在的代碼。編譯并可執(zhí)行代碼到模塊中。請參考文檔2的第 2.4.3 和 2.4.4 節(jié)以了解如何編譯和的相關信息。當該程序運行時,可以看到 EVB 上的“D502”LED 每 500ms 閃爍一次。同時,也可以觀察到從 DEBUG口輸出的log 信息:10.2.編程 GPRS包含頭文件如果要確定需要包含哪些頭文件,要清楚的應用程序的基本需求。首先,要包含。需要使用 OpenCPU RIL 功能,所以“custom_feature_def.h” 和 “ril.h”這兩個文件需然后,GP
24、RS 相關的 API 定義在文件“ql_gprs.h”和“and ql_socket.h”中。最后,每個應用程序都需要一個消息循環(huán),所以包含“ql_system.h”,并且,需要輸出相關的日志信息來調(diào)試程序,所以“ql_stdlib.h”和“ql_trace.h”也是需要的。所有的 API 的返回值定義在“ql_error.h”中。最終,需要包含的頭文件如下所示:21 / 32移遠通信技術#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 配置信息這里,設定 APN 為中國移動“CMNET”。用戶可根據(jù)具體情況修改。定義 server 的 IP 地址和端口這里,定義了一個Quec的公共 server 和 socket 端口。用戶可使用自身的 server。定義接受緩存區(qū)當 socket 連接建立時,需要一個緩存區(qū)來接收來自 socket 的數(shù)據(jù)。為 GPRS 和 socket 定義回調(diào)函數(shù)Callback_GPRS_Deactivate
26、d:當 GPRS 網(wǎng)絡掉網(wǎng)時,該回調(diào)會被調(diào)用。 Callback_Socket_Close: 當 socket 連接斷開時,該回調(diào)被調(diào)用。 Callback_Socket_Read: 當 socket 上接收到數(shù)據(jù)時該回調(diào)被調(diào)用。Callback_Socket_Write: 當調(diào)用 Ql_SOC_Write 發(fā)送數(shù)據(jù)到 socket 時,但是此時 socket 處于忙碌狀態(tài),之后其空閑時,該回調(diào)函數(shù)會被調(diào)用去通知應用程序 該 socket 可用。22 / 32移遠通信技術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 功能,那么應用程序就需要在時調(diào)用函數(shù) Ql_RIL_Initialize()去對 RIL 相關功能進行初始化。務
29、收到 MSG_ID_RIL_READY 消息編程系統(tǒng) URC 消息 Program system URC messages在接入 GPRS 網(wǎng)絡之前,須要等待模塊成功到 GPRS 網(wǎng)絡。當模塊上 GPRS 網(wǎng)絡后,應用程序會收到 URC 消息“URC_GPRS_NW_SE_IND”。在此之前,系統(tǒng)啟動過程中,應用程序會收到一些其他的指示模塊初始化狀態(tài)的 URC 消息,比如 CFUN 狀態(tài),狀態(tài),GSM 網(wǎng)絡變化狀態(tài)。開發(fā)在程序中在收到這些消息時,可以根據(jù)需要進行相應的處理。以下代碼完整的展示了系統(tǒng)消息和 URC 消息相關的使用方法:23 / 32移遠通信技術/*/* 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)絡之后,可以開始編寫 GPRS 相關的程序。GPRS 編程通常主要包括以下步驟。具體請參考文檔。首先,GPRS 相關的回調(diào)函數(shù)。24 / 32移遠通信技術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、移遠通信技術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 相關使用情況,請參考文檔。第一步,socket 相關的回調(diào)函數(shù)。第二步,創(chuàng)建 socket。第三步,連接到 socket server。26 / 32移遠通信技術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()來檢測 server 是否收到數(shù)據(jù)。與此同時,也可以調(diào)用 Ql_SOC_Close()來關閉 socket 連接,或調(diào)用 Ql_GPRS_DeactivateEx()來反激活 GPRS PDP。本例完整的代碼請參考SDK 中的 ex參照該例程。le_simple_tcpip.c,你可以編譯并運行該代碼。具體用法也請27 / 32移遠通信技術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編程注意事項11.1.外部看門狗請用戶在產(chǎn)品設計中增加外部看門狗,以防應用程序邏輯異常不能恢復。當外部看門狗溢出時,讓外部看門狗復位模塊的 VBAT 管腳以實現(xiàn)斷電重啟,以便模塊狀態(tài)得到徹底復位。11.2.重啟方案為了讓模塊持續(xù)穩(wěn)定運行,用戶在設計中增加重啟方案。比如在不需要模塊工
41、作或者工作負荷最小的時候,讓模塊復位一下。用戶可以參考 24 小時重啟一次。另外,當模塊發(fā)生網(wǎng)絡故障,用戶可以采用模塊重啟的方案來嘗試讓模塊自動恢復。API 函數(shù)實現(xiàn)重啟)和硬重啟(采用上一節(jié)介紹的外部看門狗方案實使用硬重啟,以便模塊狀態(tài)得到徹底復位。模塊重啟,有軟重啟(調(diào)用現(xiàn)重啟)。本章節(jié)介紹的重啟方案11.3.重要參數(shù)保護功能關于重要參數(shù),為了保證安全和數(shù)據(jù)不會丟失,使用了一個兩個獨立的 block。該 block 每寫入一次都會擦除一次,寫入次數(shù)有上限,頻繁寫入會導致 flash 損壞,設備無法工作。所以該區(qū)域只能用于存放工廠出廠配置,或者是類似APN 服務器地址等信息,出廠后的更新頻率
42、要控制在 5000 次以下。該參數(shù)寫入后,需要執(zhí)行一次正常關機。直接斷電或者使用 EMGOFF 關機,會有概率導致參數(shù)沒有寫入 flash。相關應用編程請參考文檔3。移遠通信技術28 / 32GC65-E OpenCPU 快速開發(fā)指南11.4.客戶任務客 戶任務 的添加主要在 custom_task_cfg.h 文 件中, 添加一個 TASK_ITEM (proc_name,subtask1_id,4*1024, DEFAULT_VALUE1, DEFAULT_VALUE2),其中第一個參數(shù)為該任務的函數(shù)的名稱,任務添加后必須實現(xiàn)這個函數(shù)否則編譯會報錯,第二個參數(shù)是該任務的 task id,
43、任務間發(fā)送消息使用的任務號應該是這個 task id(subtask1_id)而不是 0,1,2,3 等數(shù)字??蛻舻拿總€任務的主循環(huán)中都必須有一個 Ql_OS_GetMessage,在沒有消息的時候任務會被阻塞讓出 CPU 使用權,任務收到消息的時候,該函數(shù)會獲取到并繼續(xù)執(zhí)行。如果任務的主循環(huán)中沒有該函數(shù),會導致消息無法處理,長時間后導致操作系統(tǒng) 死機,同時連 timer TCP 等函數(shù)的回調(diào)也是在任務獲取到消息的時候觸發(fā),沒有調(diào)用 Ql_OS_GetMessage,會導致這些功能的回調(diào)函數(shù)也無法被執(zhí)行到。11.5.Timer 使用GC65-E OPEN CPU 中提供兩種 timer,一種是
44、普通 timer,一種是 fast timer,普通 timer 一個任務中可以最多10 個,fast timer 部分 task 一共 10 個沒有 task 之分。普通 timer 在的時候會綁定調(diào)用函數(shù)所在的 task id,中斷函數(shù)中無法timer,后使用ql_timer_start 和 ql_timer_stop 必須跟該 timer時的 task 相同,否則將返回調(diào)用失敗。普通timer 運行期間,如果該timer 所在程序的Ql_OS_GetMessage 一直沒有執(zhí)行到那么也會導致timer的消息無法處理引起 timer 超時回調(diào)不執(zhí)行。Fast timer 不區(qū)分任務,F(xiàn)as
45、t timer 是底層中斷直接上報上來,實時性較好,但是注意不要在超時函數(shù)中處理太多信息,否則會引起系統(tǒng)異常。11.6.串口功能GC65-E OpenCPU 中提供三個物理串口,一個 MAIN UART,一個 Debug UART,一個 UART2。MAIN UART 和UART2 可以用來做應用開發(fā),默認波特率 115200,8N1,串口數(shù)據(jù)緩沖 buffer 大小為 4096 字節(jié);Debug 口只能用來做系統(tǒng) log,需要使用 CoolWatcher 工具來捕獲 log。如果發(fā)現(xiàn)實際寫入的字節(jié)數(shù)比要寫入的字節(jié)數(shù)少,說明 buffer 已經(jīng)滿了,此時需要當寫入串等待串口的“EVENT_UA
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 《電池配件沖壓工藝及模具設計》教學大綱
- 玉溪師范學院《人文地理學》2021-2022學年第一學期期末試卷
- 光纖、光纜、絕緣制品的賬務處理實例-記賬實操
- 2024年茶葉項目評價分析報告
- 2023年有機肥料及微生物肥料項目成效分析報告
- 2024屆河北省邢臺一中、邢臺二中第二學期高三調(diào)研測試數(shù)學試題試卷
- 草捆離田運輸合同書
- 采藕承包合同范本
- 不再續(xù)簽消防維保合同意見
- 標準離婚協(xié)議書范本打印
- 法律、法規(guī)及標準清單
- 2021年北京市西城區(qū)社區(qū)工作者招聘筆試題及答案解析
- 互聯(lián)網(wǎng)明廚亮灶管理各項制度
- 人教pep五年級下冊英語《When is the art show Part A 》教案
- 人體解剖學教案
- 語文閱讀理解常見答題技巧萬能公式
- 國企招考辦公室崗位筆試真題及答案
- 農(nóng)田退水水質(zhì)水量資料整理
- GB∕T 5001-2018 日用陶瓷分類
- GB∕T 709-2019 熱軋鋼板和鋼帶的尺寸、外形、重量及允許偏差
- GB 40163-2021 海運危險貨物集裝箱裝箱安全技術要求
評論
0/150
提交評論