OpenHarmony中AT模块的代码理解之一
1、背景
最早接触AT命令是在使用通信模块的时候,那时的AT命令的打包和解析都是自己写的函数实现,代码逻辑和框架也都不成熟,通用性也不强。现在的RTOS操作系统中也都包含了这部分的内容,比如RTT等,通用性更强,代码的逻辑性也值得我们去分析和学习。接触openharmony,发现系统代码中也包含了AT相关的业务。今天,尝试整理一下这部分代码的思路。
2、提要
(1)代码路径
device\hisilicon\hispark_pegasus\sdk_liteos\components\at\src\
(2)关闭AT服务
有时候自己需要使用串口做一些私有业务,不想使用原生的AT命令,比如,移植micropython,就需要关闭AT服务。关闭的方法如下:
打开device\hisilicon\hispark_pegasus\sdk_liteos\build\config\usr_config.mk。
将其中的#CONFIG_AT_SUPPORT=y删除。或者使用menuconfig操作该文件关闭。
关闭宏之后,config.mk中,会判断该宏的值。
ifeq ($(CONFIG_AT_SUPPORT), y)
DEFINES += -DCONFIG_AT_COMMAND
endif
会使得AT的初始化,注册相关函数无效。
3、框架
简单的描述一下程序框架,核心内容分为接收任务和处理任务,两个任务之间通过Event事件同步。cmd_register函数用来注册我们需要解析的AT命令。
4、代码
(1) 数据的接收
在hi_u32 hi_at_init(hi_void)中创建了数据接收的任务。
attr.stack_size = g_at_uart_task_size;
attr.task_prio = AT_UART_TASK_PRIO;
attr.task_name = (hi_char*)"at_uart";
ret = hi_task_create(&at_uart_task, &attr, at_uart_task_body, 0);
if (ret != HI_ERR_SUCCESS) {
hi_at_printf("AT_UART_TSK init fail\r\n");
return ret;
}
(2) 数据的处理
attr.stack_size = 1024*6;
attr.task_prio = AT_PROC_TASK_PRIO;
attr.task_name = (hi_char*)"at_proc";
ret = hi_task_create(&at_proc_task, &attr, at_proc_task_body, 0);
if (ret != HI_ERR_SUCCESS) {
hi_at_printf("AT_PROC_TSK init fail\r\n");
return ret;
}
两个任务之间通过g_at_event传递数据。buf = at_get_buf();获取数据之后,进行解析和处理。处理函数如下。
hi_void at_cmd_execute(hi_char *buf)
{
hi_u32 ret;
if (memcmp(buf, AT_CMD_HEADER, strlen(AT_CMD_HEADER)) == EOK) {
hi_char *at_buf = buf + strlen(AT_CMD_HEADER);
ret = at_cmd_process(at_buf);
if ((ret != HI_ERR_SUCCESS) && (ret != HI_ERR_RECVING)) {
g_at_ctrl.at_state = AT_IDLE;
}
} else {
AT_ENTER;
AT_RESPONSE_ERROR;
g_at_ctrl.at_state = AT_IDLE;
}
}
处理函数会从注册的AT命令中对比关键词,然后解析,处理,执行。
5、总结
这篇文章先整理到这里,后续会有更详细的对AT命令逻辑的分析。
后续的计划:
(1)继续分析openharmony的AT命令的代码思路和关键函数的使用。
(2)对比RT-Thread等其他RTOS的AT部分实现。
(3)精简openharmony部分代码,移植出一套可以在其他平台使用的AT框架。
相关文章
- 附手册下载 | 看2022AI最佳实践集锦,抢5款限量新年红包封面
- 大数据云原生能力成熟度模型,重磅发布!
- 新春有奖: 2022企程奖获奖名单揭晓!兔年红包封面等你领取
- 一夜爆火的现象级产品ChatGPT,是AI突破还是昙花乍现?
- 多功能动态通讯录实现(C语言)
- 各地技术人年俗大赏,TVP祝您兔年大吉!
- Studio One6编曲软件全新版本新增功能
- TKE跨账号统一监控方案
- 2023最新版CleanMyMac X汉化详细操作教程
- 2022低速无人驾驶领域“十大关键词”
- 原创轻量VIO算法、简单易上手——XRSLAM帮你快速搭建移动平台AR应用
- 如何在精益生产中成功实现5S?
- 生产现场管理如何改善
- 使用Terraform设置cos生命周期,清空存储桶数据
- 知名休闲服饰品牌——慕尚集团借力泛微实现统一办公、业务协同
- 2022 年终总结|致敬即将过去的,匆忙而又虐心的一年...
- FMEA失效模式及效应分析之FMEA何时完成
- 光伏企业如何“玩转”供应商管理?SRM系统全方位绩效评估企业供应商
- 构建家居建材采购系统有何优势?数字化商品管控助力企业销售更轻松
- Kyuubi集成spark场景