自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

OpenHarmony中AT模塊的代碼理解之一

系統(tǒng) OpenHarmony
現(xiàn)在的RTOS操作系統(tǒng)中也都包含了這部分的內(nèi)容,比如RTT等,通用性更強(qiáng),代碼的邏輯性也值得我們?nèi)シ治龊蛯W(xué)習(xí)。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

1、背景

最早接觸AT命令是在使用通信模塊的時(shí)候,那時(shí)的AT命令的打包和解析都是自己寫(xiě)的函數(shù)實(shí)現(xiàn),代碼邏輯和框架也都不成熟,通用性也不強(qiáng)?,F(xiàn)在的RTOS操作系統(tǒng)中也都包含了這部分的內(nèi)容,比如RTT等,通用性更強(qiáng),代碼的邏輯性也值得我們?nèi)シ治龊蛯W(xué)習(xí)。接觸openharmony,發(fā)現(xiàn)系統(tǒng)代碼中也包含了AT相關(guān)的業(yè)務(wù)。今天,嘗試整理一下這部分代碼的思路。

2、提要

(1)代碼路徑

device\hisilicon\hispark_pegasus\sdk_liteos\components\at\src\

(2)關(guān)閉AT服務(wù)

有時(shí)候自己需要使用串口做一些私有業(yè)務(wù),不想使用原生的AT命令,比如,移植micropython,就需要關(guān)閉AT服務(wù)。關(guān)閉的方法如下:

打開(kāi)device\hisilicon\hispark_pegasus\sdk_liteos\build\config\usr_config.mk。

將其中的#CONFIG_AT_SUPPORT=y刪除?;蛘呤褂胢enuconfig操作該文件關(guān)閉。

關(guān)閉宏之后,config.mk中,會(huì)判斷該宏的值。

ifeq ($(CONFIG_AT_SUPPORT), y)
DEFINES += -DCONFIG_AT_COMMAND
endif

會(huì)使得AT的初始化,注冊(cè)相關(guān)函數(shù)無(wú)效。

3、框架

簡(jiǎn)單的描述一下程序框架,核心內(nèi)容分為接收任務(wù)和處理任務(wù),兩個(gè)任務(wù)之間通過(guò)Event事件同步。cmd_register函數(shù)用來(lái)注冊(cè)我們需要解析的AT命令。

4、代碼

(1) 數(shù)據(jù)的接收

在hi_u32 hi_at_init(hi_void)中創(chuàng)建了數(shù)據(jù)接收的任務(wù)。

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) 數(shù)據(jù)的處理

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è)任務(wù)之間通過(guò)g_at_event傳遞數(shù)據(jù)。buf = at_get_buf();獲取數(shù)據(jù)之后,進(jìn)行解析和處理。處理函數(shù)如下。

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;
}
}

處理函數(shù)會(huì)從注冊(cè)的AT命令中對(duì)比關(guān)鍵詞,然后解析,處理,執(zhí)行。

5、總結(jié)

這篇文章先整理到這里,后續(xù)會(huì)有更詳細(xì)的對(duì)AT命令邏輯的分析。

后續(xù)的計(jì)劃:

(1)繼續(xù)分析openharmony的AT命令的代碼思路和關(guān)鍵函數(shù)的使用。

(2)對(duì)比RT-Thread等其他RTOS的AT部分實(shí)現(xiàn)。

(3)精簡(jiǎn)openharmony部分代碼,移植出一套可以在其他平臺(tái)使用的AT框架。

??想了解更多內(nèi)容,請(qǐng)?jiān)L問(wèn):??

??51CTO和華為官方合作共建的鴻蒙技術(shù)社區(qū)??

??https://ost.51cto.com??

責(zé)任編輯:jianghua 來(lái)源: 鴻蒙社區(qū)
相關(guān)推薦

2022-03-22 11:33:13

AT模塊Harmony鴻蒙

2022-02-28 14:54:48

openHarmon鴻蒙操作系統(tǒng)

2022-04-18 10:47:55

UI框架鴻蒙操作系統(tǒng)

2022-05-16 11:50:45

HDF驅(qū)動(dòng)框架

2023-06-27 15:12:46

C++三方庫(kù)移植

2020-05-21 10:24:59

語(yǔ)音技能智能

2021-07-20 08:02:41

Linux進(jìn)程睡眠

2018-12-10 14:59:20

代碼卷積模塊架構(gòu)

2013-05-30 17:43:49

WooYun京東商城代碼執(zhí)行

2021-06-22 14:15:03

人工智能AI

2022-05-26 15:28:03

網(wǎng)絡(luò)管理Socket 模塊

2013-07-19 09:50:10

Java8API

2022-04-01 16:04:33

Harmonytabs容器鴻蒙

2011-04-25 11:18:39

Ajax

2021-02-04 15:08:37

Vue漸進(jìn)式框架

2022-01-12 14:45:26

鴻蒙HarmonyOS應(yīng)用

2023-04-26 15:29:35

NAPI模塊鴻蒙

2014-09-17 10:30:25

代碼

2011-02-28 15:46:22

SQLSQL ServerSQL Server

2024-02-07 01:47:47

atexit模塊程序
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)