基于FreeRTOS编写ESP8266的AT命令收发解析器

1. 代码框架

前面文章已经介绍了AT命令的组成,以及通讯过程。《AT命令使用和简单介绍》。

现在写代码实现AT命令的发送,以及响应数据、URC数据的解析。

代码框架主要是有两个线程。一个线程负责命令发送,并阻塞等待命令响应结果和响应数据;还有一个是数据解析线程,主要是解析AT命令的响应数据已经URC数据,解析的结果和数据会传递给命令发送线程,然后唤醒命令发送线程。大致流程如下:
在这里插入图片描述

数据解析线程会调用一个读取一行数据的函数,这个函数会去读取串口的数据,如果读取不到串口数据,那么这个线程就会一直阻塞,直到等到有串口数据的时候,才会发送信号量唤醒这个线程。

然后下面的代码把接收到的数据进行解析。解析完成之后,会发送信号量唤醒AT命令的发送线程。

2. 核心代码介绍

主要核心代码就是这两个线程的代码,以及所调用的函数。

2.1 数据解析线程函数

void at_recv_parser(void *parameter)
{
   
   
	char recv_line_buff[128] = {
   
   0};
	int read_len = 0;
	at_resp_t tmp_resp = {
   
   {
   
   0}, 0, 0};
	const at_urc_t *urc = NULL;
	
	while (1)
	{
   
   
		read_len = at_recv_readln(recv_line_buff, sizeof(recv_line_buff));
		if ( read_len > 0)
		{
   
   									
			if ((urc = at_get_urc(recv_line_buff, read_len)) != NULL)
			{
   
   
				/* URC数据处理 */
				if (urc->func != NULL)
				{
   
   
					urc->func(recv_line_buff, read_len);
				}
			}
			else
			{
   
   
				/* 命令响应数据处理 */
				if (tmp_resp.buf_len < AT_MAX_RESP_LEN)
				{
   
   
					recv_line_buff[++read_len] = '\0';
					memcpy(tm
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值