当前位置: 首页 > news >正文

字符串指令集

字符串指令的格式

在这里插入图片描述
例子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

相关文章:

字符串指令集

字符串指令的格式 例子1就成功发送了指令 例子2就是发送的字符串有误 查询当前位置就会在附加信息中返回当前座位的坐标 第一个指令的参数就是闪灯的两个参数 如第一个示例就是10ms On Time 第二个就是Off Time 使用标准库来接收字符串命令 字符串指令的接收 因为一个指令就是…...

行云海CMS SQL注入漏洞复现

0x01 产品简介 行云海cms是完全开源的一套CMS内容管理系统,简洁,易用,安全,稳定,免费。 0x02 漏洞概述 行云海cms中ThinkPHP在处理order by排序时可利用key构造SQL语句进行注入,LtController.class.php中发现传入了orderby未进行过滤导致sql注入。攻击者除了可以利用 SQL 注入…...

窗口函数之 first_value() 和 last_value()

这次&#xff0c;我要从**last_value()**开始写&#xff01; last_value() 众所周知&#xff0c;first_value() 和 last_value() 的作用是返回窗口中某个字段的第一行的值和最后一行的值。 但是在应用的时候&#xff0c;突然发现使用last_value() 返回了不止一条数据&#x…...

习题练习讲解

前言&#xff1a;这又是一个新坑&#xff0c;算上之前的4个坑这是第五个坑&#xff08;1、C/C的讲解&#xff0c;2、C语言小游戏&#xff0c;3、大学生活&#xff0c;4、假哲家因为某些原因没GS&#xff09;&#xff0c;这个就是发一些自己在刷题的过程中遇到自己感觉还不错的习…...

C++STL的string模拟实现

文章目录 前言string的成员变量成员函数构造函数拷贝构造赋值重载 模拟实现string各种接口print迭代器普通迭代器const迭代器 string比较大小push_backinsert 和 eraseinserterase reserve和resizereserveresize swapfindcout和cincoutcin 前言 今天要讲string的底层实现&…...

基于ZLMediaKit的webrtc实时视频传输demo搭建

环境 ubuntu 20.04 ​ gcc version 9.4.0 ​ cmake version 3.16.3 部署ZLMediaKit流媒体服务器 安装openssl 首先可以检查一下自己的openssl的版本如果是1.1.1以上就可以忽略这一步 wget https://www.openssl.org/source/openssl-1.1.1k.tar.gz tar -xvzf openssl-1.1.1k…...

LeetCode双指针:有序数组中的单一元素

LeetCode双指针&#xff1a;有序数组中的单一元素 题目描述 给你一个仅由整数组成的有序数组&#xff0c;其中每个元素都会出现两次&#xff0c;唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复…...

熬夜会秃头——Beta冲刺总结随笔

这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标总结Beta冲刺团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、Beta冲刺开始前设立的任务完成…...

C++函数模板案例

利用函数模板封装一个排序的函数&#xff0c;可以对不同数据类型数组进行排序排序规则从大到小&#xff0c;排序算法为选择排序分别利用char数组和int数组进行测试 #include<iostream> using namespace std;template<class T> void myswap(T& a, T& b) {T…...

同旺科技 USB TO RS-485 定制款适配器--- 拆解(三)

内附链接 1、USB TO RS-485 定制款适配器 ● 支持USB 2.0/3.0接口&#xff0c;并兼容USB 1.1接口&#xff1b; ● 支持USB总线供电&#xff1b; ● 支持Windows系统驱动&#xff0c;包含WIN10 / WIN11系统32 / 64位&#xff1b; ● 支持Windows RT、Linux、Mac OS X、Windo…...

Vue学习计划-Vue2--Vue核心(六)过滤器和自定义指令

1. 过滤器 定义&#xff1a;对要显示的数据进行特定格式转换再显示&#xff08;适用于一些简单逻辑的处理&#xff09;语法&#xff1a; 注册过滤器&#xff1a;Vue.filter(name, callback) 或 new Vue{filters:{}}使用过滤器&#xff1a;{{ xx | 过滤器名 }} 或 v-bind:属性 …...

Codeforces Round 913 (Div. 3) (A-G)

后天就是 I C P C ICPC ICPC杭州站了&#xff0c;今天把之前做的 d i v 3 div3 div3题补一下&#xff0c;打完这场杭州站这赛季除了 E C F i n a l EC\,\,Final ECFinal就结束了&#xff0c;以后应该要多打 c f cf cf比赛练习保持手感&#xff0c;争取下赛季冲一下金牌。 感觉这…...

CSS——sticky定位

1. 大白话解释sticky定位 粘性定位通俗来说&#xff0c;它就是相对定位relative和固定定位fixed的结合体&#xff0c;它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前&#xff0c;sticky盒子的表现为相对定位relative【第一阶段】&#xff0c; 但当最近可滚动容…...

Redis hash表源码解析

1、 整体数据结构 链式hash解决hash冲突、采用渐进式hash来完成扩容过程。 /** 哈希表节点*/ typedef struct dictEntry {// 键void *key;// 值union {void *val;uint64_t u64;int64_t s64;} v;// 指向下个哈希表节点&#xff0c;形成链表struct dictEntry *next;} dictEntry;…...

dll动态链接库【C#】

1说明&#xff1a; 在C#中&#xff0c;dll是添加 【类库】生成的。 2添加C#的dll&#xff1a; &#xff08;1&#xff09;在VS中新建一个Windows应用程序项目&#xff0c;并命名为TransferDll。 &#xff08;2&#xff09;打开Windows窗体设计器&#xff0c;从工具箱中为窗体…...

Linux 系统设置cpu频率

source_code: https://github.com/emagii/cpufrequtils cpufreq-set - A small tool which allows to modify cpufreq settings.&#xff08;修改内存频率的工具&#xff09; cpufreq-set allows you to modify cpufreq settings without having to type e.g. “/sys/devices…...

git基本概念

一、版本控制概念 1.1 什么是版本控制 1.1.1 手动管理文件版本 1.1.2 版本控制软件 概念&#xff1a;版本控制软件是一个用来记录文件发生的变化&#xff0c;以便将来查阅特定版本修订情况的系统&#xff0c;有时也叫“版本控制系统”。通俗的理解就是把手工管理文件版本的方…...

多个HTML属性

在HTML中&#xff0c;属性用于提供有关HTML元素的附加信息。在这篇文章中你将学习多个HTML属性&#xff0c;它们可以增强网站的视觉吸引力。 接下来开始吧&#xff01;&#x1f680; Accept 属性 您可以将accept属性与<input>元素&#xff08;仅用于文件类型&#xff…...

基于运算放大器的电压采集电路

一、运算放大器 运放推导的两个重要概念&#xff1a;虚短、虚断。 1、差分放大器 以差分放大器为例进行推导分析。 虚断–运放的"-“端、”“端的引脚电流接近为0&#xff1b; 根据基尔霍夫电流定律可知&#xff1a;iR1iRF&#xff0c;iR2iR3&#xff1b; iR1(Ui1-(V-…...

数字图像处理(实践篇) 十六 基于分水岭算法的图像分割

目录 一 分水岭算法 二 利用OpenCV实现分水岭算法的过程 三 实践 一 分水岭算法 基于任何灰度图像都可以视为地形表面&#xff0c;其中高强度表示山峰和山丘&#xff0c;而低强度表示山谷。首先&#xff0c;开始用不同颜色的水&#xff08;标签&#xff09;填充每个孤立的山…...

收藏!2026非科班/转行小白必看:3步切入AI大模型,月薪30w+实战路径

2026年的职场赛道&#xff0c;AI大模型依旧是绝对的“黄金风口”。 最新行业报告显示&#xff0c;AI相关岗位需求逆势增长37%&#xff0c;薪资领跑全行业&#xff0c;大厂校招起薪普遍突破25k。但一个残酷的现实是&#xff1a; 太多非科班、半路转行的程序员&#xff0c;还在门…...

Flutter弹窗层级混乱?手把手教你用Overlay管理多个弹窗的显示顺序

Flutter弹窗层级管理实战&#xff1a;用Overlay解决多弹窗叠加难题 在移动应用开发中&#xff0c;弹窗是用户交互的重要组成部分。但当多个弹窗同时出现时&#xff0c;开发者常会遇到"哪个弹窗应该显示在最上层"的困扰。想象一下这样的场景&#xff1a;用户正在填写…...

2.4 微积分与自动微分1

微积分 导数与微分 操作之前记得检查版本确保 matplotlib 正确安装&#xff1a;在d2l环境下输入pip install matplotlib (windows版) 重启jupyter就可以运行了&#xff08;如果还是不行自行移步ai&#xff09; 1.我们通过简单的微分方式得到我们需要的极限 2.之后我们再试着…...

嵌入式C语言变量初始化技术详解

## 1. 嵌入式C语言变量初始化技术详解### 1.1 初始化的重要性与基本原则在嵌入式系统开发中&#xff0c;变量初始化是防止未定义行为的关键步骤。由于嵌入式编译器特性的差异&#xff0c;未初始化的变量可能包含随机值&#xff0c;导致系统出现不可预测的行为。根据变量类型的不…...

深度解析:Beyond Compare 5授权机制与密钥生成技术

深度解析&#xff1a;Beyond Compare 5授权机制与密钥生成技术 【免费下载链接】BCompare_Keygen Keygen for BCompare 5 项目地址: https://gitcode.com/gh_mirrors/bc/BCompare_Keygen 在软件授权领域&#xff0c;Beyond Compare 5的RSA加密授权系统展现了商业软件保护…...

省token秘籍:OpenClaw+nanobot镜像长文本处理优化方案

省token秘籍&#xff1a;OpenClawnanobot镜像长文本处理优化方案 1. 当长文本遇上大模型&#xff1a;我的token焦虑症 第一次尝试用OpenClaw处理公司三年的技术文档归档时&#xff0c;我看着账单倒吸一口凉气——单次50万token的消耗让我的个人预算瞬间见底。这促使我开始探索…...

OpenClaw沙盒体验:不装本地环境玩转GLM-4.7-Flash

OpenClaw沙盒体验&#xff1a;不装本地环境玩转GLM-4.7-Flash 1. 为什么选择沙盒体验&#xff1f; 作为一个长期关注AI自动化工具的技术爱好者&#xff0c;我一直在寻找一个既能快速验证想法又不会污染本地开发环境的方式。OpenClaw的本地部署虽然强大&#xff0c;但配置过程…...

别再纠结在线辨识了!聊聊永磁同步电机(PMSM)离线参数自学习的完整流程与避坑指南

永磁同步电机离线参数辨识实战&#xff1a;从理论到工程落地的全流程解析 在电机控制领域&#xff0c;参数辨识一直是个让人又爱又恨的话题。尤其是当项目从实验室走向量产时&#xff0c;那些在仿真中运行良好的算法&#xff0c;往往会因为实际电机参数的偏差而表现失常。我曾亲…...

电脑c盘变红了怎么清理?C盘清理工具与方法

电脑c盘变红了怎么清理&#xff1f;问题不难解决&#xff0c;关键是选对方法工具&#xff01;下面介绍实用的清理C盘方法&#xff0c;便于你解决C盘变红的问题哦&#xff01; 关于C盘清理工具&#xff0c;给大家安排一款针对C盘爆满的清理神器---Windows - Cleaner&#xff0c…...

目标检测损失函数进化史:从IoU到EIoU/SIoU/WIoU,YOLOv8性能提升完全指南

引言在目标检测领域&#xff0c;损失函数的设计直接影响着模型的收敛速度和检测精度。作为YOLOv8等先进检测器的核心组件&#xff0c;边界框回归损失函数经历了从简单到复杂的演进过程。传统的IoU&#xff08;Intersection over Union&#xff09;损失虽然直观有效&#xff0c;…...