




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、GC65-E OpenCPU快速开发指南GSM/GPRS 系列版本:GC65-E_OpenCPU_快速开发指南_V1.0日期:2014-01-13GC65-E OpenCPU 快速开发指南移远公司始终以为客户提供最及时、最全面的服务为系方式如下:,如需任何帮助,请随时司总部,联移远通信技术市徐汇区田州路 99 号 13 幢 501 室邮箱: : +86 21 51086236或司当地办事处,登录:http/support/salesupport.aspx 如需技术支持或反馈技术文档中,可随时登陆如下:http/support/techsupport.aspx前言移远公司提供该文档内容用以支持其
2、客户的产品设计。客户须按照文档中提供的规范,参数来设计其产品由于客户操作不当而造成的人身该文档规范进行更新。或损失 本公司不承担任何责任。在未前,移远公司对本文档手册属于移远公司,任何人我公司该文档将承担。20 4移远通信技术保留一切权利。Copyright QuecWireless Solutions C,20141 / 32移远通信技术GC65-EOpenCPU快速开发指南适 用 产 品2 / 32移远通信技术模块类型GC65-EGC65-EOpenCPU快速开发指南文档历史修订1.02014-01-13初始版本移远通信技术3 / 30版本日期作者变更表述GC65-E OpenCPU 快速
3、开发指南目录文档历史3目录4表格索引5索引61引言72OpenCPU 文档83必需品...3.1.5.主机系统9编译器和集成开发环境9编程语言9硬件模块9OpenCPU SDK9456编译环境10编译11. .6.3.使用TE-A12使用模块12. 12789调试13了解 SDK14建立工程1610如何开始编程17.如何编程 GPIO17编程 GPRS2111编程注意事项28....0.外部看门狗28重启方案28重要参数保护功
4、能28. 29客户任务Timer 使用29串口功能29GPRS 和 TCP 功能30动态内存分配30程序调试30低功耗3112附录324 / 32移远通信技术GC65-E OpenCPU 快速开发指南表格索引表表表1:OPENCPU 文档82:目录描述143:参考文档325 / 32移远通信技术GC65-E OpenCPU 快速开发指南索引图 1:编译11图 2:目录结构14图 3:“MAIN.C” 文档16图 4:EVB LED指示186 / 32移远通信技术GC65-EOpenCPU快速开发指南1引言本文档引导描述了如何快速使用 OpenCPU 开发应用程序。移远通信技术7 / 32GC6
5、5-E OpenCPU 快速开发指南2OpenCPU 文档表 1:OpenCPU 文档GC65-E OpenCPU 快速开发指南描述了如何快速使用 OpenCPU SDK 来开发应用程序。OpenCPU Cygwin 安装手册Cygwin 编译环境的安装指导。GC65-E OpenCPU User Guide完整的介绍了 OpenCPU的相关细节和用户 API。描述了如何使用 RIL API 来编程 AT 命令,并在 API 返回时获得 AT 命令的响应。OpenCPU RIL Application NoteOpenCPU FOTA Application Note描述了如何编程 FOTA
6、相关应用程序。QFlash User Guide描述了如何烧写程序。移远通信技术8 / 32文档描述GC65-EOpenCPU快速开发指南3必需品开发所需的基本配置需求如下所述。3.1. 主机系统主要支持以下的操作系统:Windows XP(至少安装 SP1) Windows 20003.2. 编译器和集成开发环境Cygwin 编译器。具体请参考文档1.3.3. 编程语言对基本的 c 语言编程知识有所了解。3.4. 硬件模块QuecQuecGSM/GPRS 具有 OpenCPU EVB特性的模块其他配件(电源适配器, 串口线)3.5. OpenCPU SDKOpenCPU SDK工具包移远通信
7、技术9 / 32GC65-EOpenCPU快速开发指南4编译环境请参考文档1安装并配置编译环境。移远通信技术10 / 32GC65-E OpenCPU 快速开发指南5编译双击SDK 下的 build_setup.bat 文件进入Cygwin 命令行下。的编译。执行以下命令可以完成默认的 App 程序编译成功后会在相应目录下生成相应文件。图 1:编译移远通信技术11 / 32make.sh cleanmake.sh newGC65-E OpenCPU 快速开发指南66.1. 使用 TE-A使用TE-A 的用户,可以使用 TE-A 上的 Mini USB 接口来口(PL-2303)驱动程序。程序。
8、使用此接口需要先安装 USB 转串6.2. 使用模块直接使用模块的用户,需要先确保Debug 口连接到 PC 线上相应驱动已经正确安装。6.3.GC65-E 模块使用调试串口做端口(模块的 30 和 31 管脚)。工具使用 Quec的 QFlash 工具。关于如何/烧写 App 应用程序,请参考文档3。移远通信技术12 / 32GC65-E OpenCPU 快速开发指南7调试在 OpenCPU 中,App 程序的调试主要采用串口打印的方式进行程序调试。GC65-E OpenCPU 模块提供三个物理串口,一个 MAIN UART(UART1),一个 Debug UART,一个辅助串口(UART2
9、),均可以用来调试程序。方面 OpenCPU 提供 Ql_Debug_Trace()函数专门从 Debug 端口打印 log,但需要使用CoolWatcher 工具来捕获 log。此外,开发者也可以调用 Ql_UART_Open()来打开 UART1 或者 UART2,调用 Ql_UART_Write()函数来从串口 1/2 输出信息来调试程序。移远通信技术13 / 32GC65-EOpenCPU快速开发指南8了解 SDK解压 SDK 资源包之后,到的典型的目录结构如下所示。图 2:目录结构表 2:目录描述SDK用户工程根目录。build编译输出结果。此目录用于存放用户定制相关文件。在子目录“
10、customconfig”下的相关文件中,开发可以根custom据需要重新配置应用程序,配置任务栈空间大小,GPIO 初始状态等。空间大小,添加新任务,所有为开发提供的配置文件的文件名均以“custom_”开头。docs该目录下保存着 OpenCPU 相关说明文档。例子代码目录。 每个例程均实现了一个独立而完整的功能并且可编译为可执行的二进制文件。exleinclude所有的 APIs 头文件保存在该目录下。libs所需库文件。make编译文件和 makefile 文件。存放 OpenCPU RIL 源代码。用户根据该源码可以通过RIL 提供的基础功能,来发送AT 命令,ril移远通信技术14
11、 / 32目录描述GC65-E OpenCPU 快速开发指南或者是先自己的 API 函数。tools相关开发工具, 如工具和FOTA 打包工具。请参考文档2的第 2.4 节以获得的关于 SDK 开发环境的相关知识,例如编译方法,方法等。请参考文档2的第 4 节以获得的关于系统配置信息的相关知识,例如堆空间大小,如何添加新任务,设置任务栈空间大小和设置 GPIO 初始状态等。15 / 32移远通信技术GC65-E OpenCPU 快速开发指南9建立工程默认情况下,目录 SDKcustom被设计为用户工程存放的根目录.该目录下, 已提供了一份“main.c” 文档,其中展示了一个典型的 OpenC
12、PU应用程序框架的写法。图 3:“main.c” 文档在目录 SDKcustom下,开发可以添加其他模块文件和子目录。具体请参考文件2的第 2.4.5 节获取帮助信息。具体编译方法和 makefile 文件时用请参考文件文件2的第 2.4.5 节。到目前为止,开发文件中添加代码或直可能已经一个默认的用户工程已经准备好了。开发只需在 “main.c”换该文件即可。当然,也可以添加其他的 .c 文件,并且 “SDKcustom”目录下新添加的.c 文件会被自动编译。移远通信技术16 / 32GC65-E OpenCPU 快速开发指南10 如何开始编程本节中,设计了两个例程用以展示如何编写基于 Op
13、enCPU SDK 的应用程序。 在第一个例子中,通过周期性的改变 GPIO 的高低电平来实现 LED 的闪烁。在另一个例子中,展示了如何使用 GPRS 网络建立 TCP 连接,向 PC 上TCP server 进行数据传输。10.1.如何编程 GPIO包含头文件如果要确定需要包含哪些头文件,性改变 GPIO 电平来驱动 LED 闪烁。要清楚的应用程序的基本需求。在本例中,通过周期首先,需要控制 GPIO,GPIO 相关定义在“ql_gpio.h”中。然后,“周期性”意味着需要使用 timer 功能,timer 相关定义在“ql_timer.h“中。最后,每个应用程序都需要一个消息循环,所以包
14、含“ql_system.h”,并且,需要输出相关的日志信息来调试程序,所以“ql_stdlib.h”和“ql_trace.h”也是需要的。所有的 API 的返回值定义在“ql_error.h”中。最终,需要包含的头文件如下所示:编程 GPIO在 QuecLED,因此EVB 上,网络灯(NETLIGHT)引脚和状态指示(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快速开发指南图 4:EVB LED指示这里,选择 NETLIGHT 引脚作为 GPIO 引脚。在程序开始的地方,对 GPIO 做如下配置:方向:输出初始状态:低电平上下拉状态:使能,上拉接下来,需要启动一个定时器,周期性的拉高/低 GPIO 来实现 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快速开发指南第二步,并启动定时器。最后,实现定时器中断处理函数。到目前为止,所有的编码工作完毕。完整的代码如下所示: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 快速开发指南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 快速开发指南运行程序完整的代码到SDKcustommain.c,以覆盖已经存在的代码。编译并可执行代码到模块中。请参考文档2的第 2.4.3 和 2.4.4 节以了解如何编译和的相关信息。当该程序运行时,可以看到 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”中。最后,每个应用程序都需要一个消息循环,所以包含“ql_system.h”,并且,需要输出相关的日志信息来调试程序,所以“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 快速开发指南 #include ql_socket.h定义 PDP 上下文和 GPRS 配置信息这里,设定 APN 为中国移动“CMNET”。用户可根据具体情况修改。定义 server 的 IP 地址和端口这里,定义了一个Quec的公共 server 和 socket 端口。用户可使用自身的 server。定义接受缓存区当 socket 连接建立时,需要一个缓存区来接收来自 socket 的数据。为 GPRS 和 socket 定义回调函数Callback_GPRS_Deactivate
26、d:当 GPRS 网络掉网时,该回调会被调用。 Callback_Socket_Close: 当 socket 连接断开时,该回调被调用。 Callback_Socket_Read: 当 socket 上接收到数据时该回调被调用。Callback_Socket_Write: 当调用 Ql_SOC_Write 发送数据到 socket 时,但是此时 socket 处于忙碌状态,之后其空闲时,该回调函数会被调用去通知应用程序 该 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 快速开发指南编程 OpenCPU RIL既然要使用 OpenCPU RIL 功能,那么应用程序就需要在时调用函数 Ql_RIL_Initialize()去对 RIL 相关功能进行初始化。务
29、收到 MSG_ID_RIL_READY 消息编程系统 URC 消息 Program system URC messages在接入 GPRS 网络之前,须要等待模块成功到 GPRS 网络。当模块上 GPRS 网络后,应用程序会收到 URC 消息“URC_GPRS_NW_SE_IND”。在此之前,系统启动过程中,应用程序会收到一些其他的指示模块初始化状态的 URC 消息,比如 CFUN 状态,状态,GSM 网络变化状态。开发在程序中在收到这些消息时,可以根据需要进行相应的处理。以下代码完整的展示了系统消息和 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快速开发指南编程 GPRS Program GPRS模块到 GPRS 网络之后,可以开始编写 GPRS 相关的程序。GPRS 编程通常主要包括以下步骤。具体请参考文档。首先,GPRS 相关的回调函数。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快速开发指南然后,配置 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 快速开发指南最后,反激活 PDP。编程 socketGPRS PDP 激活之后,可以开始编程 TCP/UDP socket。Socket 编程主要包含如下步骤。具体GPRS API 相关使用情况,请参考文档。第一步,socket 相关的回调函数。第二步,创建 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快速开发指南Socket 连接到 server 之后,你可以发送数据到 server 或从 server 接收数据。第四步,发送 socket 数据。这里的代码展示了发送数据“A B C D E F G”到 server。发送完数据之后,可以调用 Ql_SOC_GetAckNumbe
39、r()来检测 server 是否收到数据。与此同时,也可以调用 Ql_SOC_Close()来关闭 socket 连接,或调用 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 快速开发指南11编程注意事项11.1.外部看门狗请用户在产品设计中增加外部看门狗,以防应用程序逻辑异常不能恢复。当外部看门狗溢出时,让外部看门狗复位模块的 VBAT 管脚以实现断电重启,以便模块状态得到彻底复位。11.2.重启方案为了让模块持续稳定运行,用户在设计中增加重启方案。比如在不需要模块工
41、作或者工作负荷最小的时候,让模块复位一下。用户可以参考 24 小时重启一次。另外,当模块发生网络故障,用户可以采用模块重启的方案来尝试让模块自动恢复。API 函数实现重启)和硬重启(采用上一节介绍的外部看门狗方案实使用硬重启,以便模块状态得到彻底复位。模块重启,有软重启(调用现重启)。本章节介绍的重启方案11.3.重要参数保护功能关于重要参数,为了保证安全和数据不会丢失,使用了一个两个独立的 block。该 block 每写入一次都会擦除一次,写入次数有上限,频繁写入会导致 flash 损坏,设备无法工作。所以该区域只能用于存放工厂出厂配置,或者是类似APN 服务器地址等信息,出厂后的更新频率
42、要控制在 5000 次以下。该参数写入后,需要执行一次正常关机。直接断电或者使用 EMGOFF 关机,会有概率导致参数没有写入 flash。相关应用编程请参考文档3。移远通信技术28 / 32GC65-E OpenCPU 快速开发指南11.4.客户任务客 户任务 的添加主要在 custom_task_cfg.h 文 件中, 添加一个 TASK_ITEM (proc_name,subtask1_id,4*1024, DEFAULT_VALUE1, DEFAULT_VALUE2),其中第一个参数为该任务的函数的名称,任务添加后必须实现这个函数否则编译会报错,第二个参数是该任务的 task id,
43、任务间发送消息使用的任务号应该是这个 task id(subtask1_id)而不是 0,1,2,3 等数字。客户的每个任务的主循环中都必须有一个 Ql_OS_GetMessage,在没有消息的时候任务会被阻塞让出 CPU 使用权,任务收到消息的时候,该函数会获取到并继续执行。如果任务的主循环中没有该函数,会导致消息无法处理,长时间后导致操作系统 死机,同时连 timer TCP 等函数的回调也是在任务获取到消息的时候触发,没有调用 Ql_OS_GetMessage,会导致这些功能的回调函数也无法被执行到。11.5.Timer 使用GC65-E OPEN CPU 中提供两种 timer,一种是
44、普通 timer,一种是 fast timer,普通 timer 一个任务中可以最多10 个,fast timer 部分 task 一共 10 个没有 task 之分。普通 timer 在的时候会绑定调用函数所在的 task id,中断函数中无法timer,后使用ql_timer_start 和 ql_timer_stop 必须跟该 timer时的 task 相同,否则将返回调用失败。普通timer 运行期间,如果该timer 所在程序的Ql_OS_GetMessage 一直没有执行到那么也会导致timer的消息无法处理引起 timer 超时回调不执行。Fast timer 不区分任务,Fas
45、t timer 是底层中断直接上报上来,实时性较好,但是注意不要在超时函数中处理太多信息,否则会引起系统异常。11.6.串口功能GC65-E OpenCPU 中提供三个物理串口,一个 MAIN UART,一个 Debug UART,一个 UART2。MAIN UART 和UART2 可以用来做应用开发,默认波特率 115200,8N1,串口数据缓冲 buffer 大小为 4096 字节;Debug 口只能用来做系统 log,需要使用 CoolWatcher 工具来捕获 log。如果发现实际写入的字节数比要写入的字节数少,说明 buffer 已经满了,此时需要当写入串等待串口的“EVENT_UA
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年PM10自动采样器及测定仪合作协议书
- 2025年综合零售服务合作协议书
- 2025年SUR二次纤维障碍控制剂合作协议书
- 2025年上海2024道路运输危险品从业资格证考试
- 2025年口腔化学品:牙膏项目发展计划
- 农村合作社农户种植合作协议
- 金融科技行业大数据风控模型设计与实现方案
- 2025年休闲健身服务项目合作计划书
- 社区工作会议总结
- 在线平台合作协议及业务整合策略探讨
- 八省联考陕西试题及答案
- 烧烫伤健康宣教
- 医院门诊院感制度
- 腔隙性脑梗塞护理常规
- 《国务院安委会关于加强人员密集场所动火作业安全管理措施》知识培训
- 人工智能在价格预测中的应用-深度研究
- 与高校科研合作合同范本
- 统编历史七年级下册(2024版) 第一单元第4课-安史之乱与唐朝衰亡【课件】d
- 2025年诗词大赛考试指导题库300题(含答案)
- 《新闻传播学》课件
- Unit 3 The world of Science 大单元教学设计-2023-2024学年高中英语外研版(2019)必修第三册
评论
0/150
提交评论