新手入门
- 积分
- 17
- 金钱
- 17
- 注册时间
- 2019-10-22
- 在线时间
- 5 小时
|
本帖最后由 qianxilin 于 2020-12-12 15:14 编辑
这个其实是配合有人的4G模块使用的。因为他们的模块不支持MQTT,只支持串口透传。就参考MDK插件包中的pahomqtt代码做了简单的移植。放了好久了,一直没用上。有谁感兴趣了,测测。
参考插件包的代码移植的,记得值需要修改一个.c文件即可。

我用了一个开源的代码kfifo来做串口的接收和MQTT的读缓冲。
串口的收到的数据用ring_buffer_put入缓冲。MQTT底层的static int network_read(Network* n, unsigned char* buffer, int len, int timeout_ms) 使用ring_buffer_get来读缓冲区的数据。。
代码都是从MDK软件包拷贝出来的,注释掉了原来的接口。

bug可能会有,我只是做了简单测试,跑了2个小时,没有发现什么问题。
(上图超时时,bytes应该等于-1?)
kfifo缓冲区的大小必须是2的次方,比如256,1024,2048
用到的插件:

int rxCnt=0;
void USART1_IRQHandler(void)
{
uint8_t rc;
if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
rc = USART_ReceiveData(USART1);
ring_buffer_put(gRingBuf, (void *)&rc, 1);
}
rxCnt++;
}
|
|