了解协议栈的相关概念

3.2.1 AT Client 初始化

创建AT客户端对象,初始化客户端对象参数。

1int at_client_init(const char *dev_name, rt_size_t recv_bufsz);

at_client_init() 函数完成对 AT Client 设备初始化、AT Client 移植函数的初始化、AT Client 使用的信号量、互斥锁等资源初始化,并创建 at_client 线程用于 AT Client 中数据的接收的解析以及对 URC 数据的处理。

3.2.2 AT Client 数据收发方式

创建响应结构体:

1at_response_t at_create_resp(rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout);

删除响应结构体:

1void at_delete_resp(at_response_t resp);

设置响应结构体参数:

1at_response_t at_resp_set_info(at_response_t resp, rt_size_t buf_size, rt_size_t line_num, rt_int32_t timeout);

发送命令并接收响应:

1 rt_err_t at_exec_cmd(at_response_t resp, const char *cmd_expr, 。..);

3.2.3 AT Client 数据解析方式

获取指定行号的响应数据:

该函数用于在 AT Server 响应数据中获取指定行号的一行数据。

1const char *at_resp_get_line(at_response_t resp, rt_size_t resp_line);

获取指定关键字的响应数据:

该函数用于在 AT Server 响应数据中通过关键字获取对应的一行数据。

1const char *at_resp_get_line_by_kw(at_response_t resp, const char *keyword);

解析指定行号的响应数据:

该函数用于在 AT Server 响应数据中获取指定行号的一行数据, 并解析该行数据中的参数。

1int at_resp_parse_line_args(at_response_t resp, rt_size_t resp_line, const char *resp_expr, 。..);

发送命令并解析接收响应例程:

1/*

2 * 程序清单:AT Client 发送命令并解析接收响应例程

3 */

4

5int user_at_client_send(int argc, char**argv)

6{

7 at_response_t resp = RT_NULL;

8 char ip[20];

9 char mac[20];

10 char uartdata[20];

11 if (argc != 2)

12 {

13 LOG_E(“at_cli_send [command] - AT client send commands to AT server.”);

14 return -RT_ERROR;

15 }

16

17 /* 创建响应结构体,设置最大支持响应数据长度为 512 字节,响应数据行数无限制,超时时间为 5 秒 */

18 resp = at_create_resp(512, 0, rt_tick_from_millisecond(5000));

19 if (!resp)

20 {

21 LOG_E(“No memory for response structure!”);

22 return -RT_ENOMEM;

23 }

24

25 /* 发送 AT 命令并接收 AT Server 响应数据,数据及信息存放在 resp 结构体中 */

26 if (at_exec_cmd(resp, argv[1]) != RT_EOK)

  • UC3846控制芯片工作原理控制图 逆变焊机原理与用途
  • 数字万用表电阻档测试二极管正反向没有阻值(使用万用表测量二极管的正向电阻,为什么各档)
  • 学单片机需要学数电模电吗(学单片机要先学数电模电吗)
  • 电工怎么选择适合自己用的万用表(电工初学者买什么样的万用表好)
  • 单片机需要同时运行多个任务怎么办(单片机怎么同时执行多个任务)
  • 电机保护的方案取决于负载的机械特性
  • 绝缘电阻表正负搭接不复零位是怎么回事
  • 短路怎么用万用表查