字符串指令集

字符串指令的格式

在這里插入圖片描述
例子1就成功發送了指令 例子2就是發送的字符串有誤 查詢當前位置就會在附加信息中返回當前座位的坐標
在這里插入圖片描述
第一個·指令的參數就是閃燈的兩個參數 如第一個示例就是10ms On Time 第二個就是Off Time

使用標準庫來接收字符串命令

在這里插入圖片描述

字符串指令的接收

在這里插入圖片描述
因為一個指令就是一行 所以可以調用PAL庫的接口 PAL_USART_ReadLine 讀取這個字符串指令 首先需要聲明一個數組 就把讀到的字符指令放到這個字符數組里面 超時值為0因為在進程函數里
預處理
在這里插入圖片描述
因為接收到的指令是字符串所以有\r\n 要把這些無用的信息去掉 在c語言中字符串的末尾為\0代表字符串的結束 所以只需要在字符串倒數第二個位置添加字符\0就可以去除掉沒用的信息 使用strlen可以得到字符串的長度
數據的解析
在這里插入圖片描述
收到指令后把字符串進行解析 分別是指令的名稱和后邊的兩個參數 首先要分隔開然后把對應的數據存儲在對應的變量里面
解析指令名稱
在這里插入圖片描述
第一個函數接口就是查找字符 char*strchr 第一個參數是要查找的字符串數組 第二個是要查找的字符 如果找到了就返回一個指針指向要查找的字符的位置 如果查找不到就返回0 第二個函數接口就是 strcmp把兩個字符串進行比較 如果相等就返回0
在這里插入圖片描述
首先ptr指向字符串數組的第一個字符 (char * ptr = cmdline) 然后又定義一個指針指向字符串數組的第一個字符 然后ptr = strchr(cmdline,’ ’)就是要查找字符 空格 ‘ ‘ 然后返回一個指針 = ptr 就是ptr指向要查找的字符 空格在這里插入圖片描述
在這里插入圖片描述
然后再ptr指向的位置寫入\0 就得到了指令的名稱 在這里插入圖片描述
然后把這個字符數組(只剩下指令名稱)和兩個指令對比 做對應的動作即可在這里插入圖片描述
解析指令參數
在這里插入圖片描述
第二個函數接口就是 atoi 就是傳入一個字符 就返回這個字符對應的數字 當提取玩指令名稱后 ptr來到了圖中位置 此時ptr指向一個字符 右上角的程序首先聲明了兩個指針變量 用來接收字符串指令的兩個參數 然后第一個指針指向ptr 也就是第一個字符 然后去搜尋剩下字符串的空格 調用函數strchr(ptr,‘ ’ )使得ptr指向剩余的字符串中的空格 ptr位置如圖所示
在這里插入圖片描述
然后在prt指向的位置寫入\0 然后再向后移動
在這里插入圖片描述
arg2指向ptr 此時就把指令字符串分為了三個部分 cmdName字符串數組只有指令名稱 SetBlinkParam 第二個字符串數組arg1 只有10 第三個字符串數組只有1000
app_cmd.c

#include  "app_cmd.h"
#include  "stm32f10x_pal_usart.h"
#include  <string.h>
#include "app_blinky_led.h"
#include <stdlib.h>static PalUSART_HandleTypeDef hUSART;void App_Cmd_Init(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);hUSART.Init.BaudRate = 115200;hUSART.Init.USARTx = USART3;hUSART.Init.USART_WordLength = USART_WordLength_8b;hUSART.Init.USART_Parity = USART_Parity_No;hUSART.Init.USART_StopBits = USART_StopBits_1;hUSART.Init.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;hUSART.Init.USART_IRQ_PreemptionPriority = 0;hUSART.Init.USART_IRQ_SubPriority = 0;hUSART.Init.TxBufferSize = 128;hUSART.Init.RxBufferSize = 128;hUSART.Init.Advanced.LineSeparator = LineSeparator_CRLF;PAL_USART_Init(&hUSART);}
void App_Cmd_Proc(void)
{		char *ptr;const char*cmdName;//用來存儲指令名稱char cmdline [64];if( PAL_USART_ReadLine(&hUSART,cmdline,64,0) > 0)//返回值大于就接收到一行字符串了{cmdline[ strlen(cmdline)-2] = '\0';	//預處理 刪除行尾的\r\nptr = cmdline;cmdName = ptr; //這樣cmdName就是只剩下指令名稱的數組了ptr = strchr(cmdline,' ');if(ptr != 0){*ptr = '\0';//取值改成\0ptr++;}if(strcmp(cmdName,"SetBlinkParam") ==0 ){const char *arg1,*arg2;//解析第一個參數arg1  = ptr;ptr = strchr(ptr,' ');*ptr = '\0';ptr++;//解析第二個參數arg2 = ptr;App_BlinkyLED_SetOnTime(atoi(arg1));App_BlinkyLED_SetOffTime(atoi(arg2));//OK\r\n\r\nPAL_USART_SendString(&hUSART,"OK\r\n\r\n"); //表示指令執行成功了} //修改閃燈參數else if(strcmp(cmdName,"GetBlinkParam") ==0) {//OK\r\nOn=%d,Off=%d\r\n 返回參數PAL_USART_Printf(&hUSART, "OK\r\nOn=%d, Off=%d\r\n", App_BlinkyLED_GetOnTime(),App_BlinkyLED_GetOffTime());App_BlinkyLED_GetOnTime();//獲取亮燈時間App_BlinkyLED_GetOffTime();//獲取滅燈時間}//獲取閃燈參數else	//返回錯誤  ERROR,cmd name not support{PAL_USART_Printf(&hUSART,"ERROR, cmd Name not supported\r\n\r\n");}}}void USART3_IRQHandler(void)
{PAL_USART_IRQHandler(&hUSART);}

app_cmd.h

#ifndef  __APP_CMD_H__
#define  __APP_CMD_H__#include "stm32f10x.h"void App_Cmd_Init(void);
void App_Cmd_Proc(void);#endif

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/208217.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/208217.shtml
英文地址,請注明出處:http://en.pswp.cn/news/208217.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

科技改變旅游,道觀漫游可視化:智能化管理助力道觀游覽

道觀漫游可視化是一種通過技術手段實現道觀游覽的可視化展示方式&#xff0c;讓游客能夠更加直觀地了解道觀的歷史、文化和建筑特色。 隨著旅游業的不斷發展&#xff0c;道觀漫游可視化已經成為了旅游行業中的一個重要方向&#xff0c;吸引了越來越多的游客前來體驗。 道觀漫游…

打死都不要進外包,看看我在阿里外包的2年...

我18年畢業于一個普通二本學校&#xff0c;是一個很不出名的小本科。大學期間專業知識也沒有去認真的學習&#xff0c;所以畢業的時候就隨便找了一份工作&#xff0c;在一個小公司做功能測試。 記得那時候薪資大概是6k左右&#xff0c;因為是在工廠&#xff0c;工作環境很差&a…

《Spring Cloud Alibaba 從入門到實戰》理論知識篇

基礎知識篇 理論篇 俗話說&#xff0c;沒有最好的架構&#xff0c;只有最合適的架構。 微服務架構也是隨著信息產業的發展而出現的最有普遍適用性的一套架構模式。 通常來說&#xff0c;我們認為架構發展歷史經歷了這樣一個過程&#xff1a;單體架構 -> SOA 面向服務架構 …

springboot智慧導診系統源碼:根據患者癥狀匹配掛號科室

一、系統概述 醫院智慧導診系統是在醫療中使用的引導患者自助就診掛號&#xff0c;在就診的過程中有許多患者不知道需要掛什么號&#xff0c;要看什么病&#xff0c;通過智慧導診系統&#xff0c;可輸入自身疾病的癥狀表現&#xff0c;或選擇身體部位&#xff0c;在經由智慧導診…

微型5G智能網關助力打造智能清潔機器人

智能機器人不斷融入我們的生活&#xff0c;提供了越來越多樣化的服務&#xff0c;例如專用于衛生清潔的機器人&#xff0c;就已經廣泛應用于酒店、體育館、大型商場、寫字樓、工地等各種場景&#xff0c;相較于人工&#xff0c;機器人在此類具有高度重復性、勞動量大的工作中具…

C++作業6

以下是一個簡單的比喻&#xff0c;將多態概念與生活中的實際情況相聯系&#xff1a; 比喻&#xff1a;動物園的講解員和動物表演 想象一下你去了一家動物園&#xff0c;看到了許多不同種類的動物&#xff0c;如獅子、大象、猴子等。現在&#xff0c;動物園里有一位講解員&…

用23種設計模式打造一個cocos creator的游戲框架----(五)工廠方法模式

1、模式標準 模式名稱&#xff1a;工廠方法模式 模式分類&#xff1a;創建型 模式意圖&#xff1a;定義一個用于創建對象的接口&#xff0c;讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 結構圖&#xff1a; 適用于&#xff1a; 1、當一個類不知道它…

failed to install plugin grafana 插件安裝失敗

升級時忽略plugins 權限問題&#xff0c;導致安裝插件失敗&#xff01;調整權限即可

042:el-table表格表頭自定義高度(親測好用)

第042個 查看專欄目錄: VUE ------ element UI 專欄目標 在vue和element UI聯合技術棧的操控下&#xff0c;本專欄提供行之有效的源代碼示例和信息點介紹&#xff0c;做到靈活運用。 &#xff08;1&#xff09;提供vue2的一些基本操作&#xff1a;安裝、引用&#xff0c;模板使…

Shrio 安全框架

目錄 前言 1.介紹 2.整合 Shiro 到 Spring Boot 3.Shiro 相關配置 總結 前言 幾乎所有涉及用戶的系統都需要進行權限管理&#xff0c;權限管理涉及到一個系統的安全。Spring Boot 的安全框架整合方案中還有一個璀璨的明珠&#xff1a;Shrio。 1.介紹 Shiro是一款由Java 編…

信道復用技術

目錄 一、頻分復用FDM&#xff08;Frequency Division Multiplexing&#xff09; 二、波分復用 WDM&#xff08;Wavelength Division Multiplexing&#xff09; 三、時分復用TDM&#xff08;Time Division Multiplexing&#xff09; 四、統計時分復用 STDM&#xff08;Statisti…

雙通道5V高細分步進電機驅動芯片應用于搖頭機,X,Y控制,聚焦控制,CAMERA云臺控制等產品上的芯片選型分析

雙通道5V高細分步進電機驅動芯片GC6106&#xff0c;GC6107&#xff0c;GC6119&#xff0c;GC6151&#xff0c;GC6236&#xff0c;GC6225&#xff0c;GC6129&#xff0c;電壓范圍3~5.5V&#xff0c;最大持續電流可達0.6A左右。可應用于搖頭機&#xff0c;X,Y控制&#xff0c;聚焦…

安裝vue環境

1.Hello Vue.js <script src"https://cdn.staticfile.org/vue/2.7.0/vue.min.js"></script>/*引入js文件 */ <script> new Vue({ /* 創建一個對象&#xff0c;兩個屬性。 */ el: #app, data: { message: Hello Vue.js! }, methods: { details: f…

C++使用模板的注意事項

兩點注意事項 自動推導類型&#xff0c;必須推導出一致的數據類型T&#xff0c;才可以使用模板必須要確定出T的數據類型&#xff0c;才可以使用 #include<iostream> using namespace std;//第一點必須一致的數據類型 template <class T> void myswap(T& a, T…

基于AIS數據的船舶密度計算與規律研究

參考文獻&#xff1a;[1]陳曉. 基于AIS數據的船舶密度計算與規律研究[D].大連海事大學,2021.DOI:10.26989/d.cnki.gdlhu.2020.001129. 謝謝姐姐的文章&#xff01; 網格化AIS數據 網格化 AIS 數據是處理和分析船舶軌跡數據的一種有效方法&#xff0c;特別是當涉及到密度計算和…

C++_對C數據類型的擴展

結構體 c中定義結構體變量&#xff0c;可以省略struct關鍵字 c結構提重可以直接定義函數&#xff0c;謂之成員函數&#xff08;方法&#xff09; #include <iostream> using namespace std; struct stu {int num;char name[24];void price(void) {cout << "…

Vue3+Antd實現彈框顯示內容并加入復制按鈕

使用Vue3antd實現點擊彈框出現內容并可復制內容的功能&#xff1a; HTML部分&#xff1a; <a-button type"primary" click"showModel">打開彈框 </a-button><!-- ok 是彈框中確定按鈕的操作&#xff0c;cancel 是彈框中取消按鈕的操作 --…

Redis數據已經刪除了,為什么內存占用還是很高?

Redis數據已經刪除了&#xff0c;為什么內存占用還是很高&#xff1f; Redis做了數據刪除操作&#xff0c;為什么使用top命令時&#xff0c;還是顯示Redis占了很多內存&#xff1f; 沒做相關功課的人覺得這個問題有問題&#xff0c;刪了數據還說占著內存&#xff0c;面試官不…

【學一點兒前端】真機調試本地公眾號網頁項目

前言 微信公眾號網頁開發的真機調試一直是很頭疼的事情。 原因一 微信公眾號配置的JS安全域名只有三個&#xff0c;一個大中型的公眾號這三個JS安全域名都是生產的域名&#xff0c;不可能預留域名用于開發和調試。 原因二 在微信里面只有訪問正確的安全域名才能調用wx.config用…

vuepress-----18、圖片縮放

圖片引入兩種方式 地址 # 圖片縮放插件 # 實戰 md文件引入圖片 <img class"zoom-custom-imgs" :src"$withBase(/favicon.ico)" alt"favicon">安裝配置插件 vuepress/medium-zoom: {selector: img.zoom-custom-imgs,},效果展示