字符串指令集
字符串指令的格式

例子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()
这次,我要从**last_value()**开始写! last_value() 众所周知,first_value() 和 last_value() 的作用是返回窗口中某个字段的第一行的值和最后一行的值。 但是在应用的时候,突然发现使用last_value() 返回了不止一条数据&#x…...
习题练习讲解
前言:这又是一个新坑,算上之前的4个坑这是第五个坑(1、C/C的讲解,2、C语言小游戏,3、大学生活,4、假哲家因为某些原因没GS),这个就是发一些自己在刷题的过程中遇到自己感觉还不错的习…...
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双指针:有序数组中的单一元素 题目描述 给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。 请你找出并返回只出现一次的那个数。 你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复…...
熬夜会秃头——Beta冲刺总结随笔
这个作业属于哪个课程2301-计算机学院-软件工程社区-CSDN社区云这个作业要求在哪里团队作业—beta冲刺事后诸葛亮-CSDN社区这个作业的目标总结Beta冲刺团队名称熬夜会秃头团队置顶集合随笔链接熬夜会秃头——Beta冲刺置顶随笔-CSDN社区 目录 一、Beta冲刺开始前设立的任务完成…...
C++函数模板案例
利用函数模板封装一个排序的函数,可以对不同数据类型数组进行排序排序规则从大到小,排序算法为选择排序分别利用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接口,并兼容USB 1.1接口; ● 支持USB总线供电; ● 支持Windows系统驱动,包含WIN10 / WIN11系统32 / 64位; ● 支持Windows RT、Linux、Mac OS X、Windo…...
Vue学习计划-Vue2--Vue核心(六)过滤器和自定义指令
1. 过滤器 定义:对要显示的数据进行特定格式转换再显示(适用于一些简单逻辑的处理)语法: 注册过滤器:Vue.filter(name, callback) 或 new Vue{filters:{}}使用过滤器:{{ xx | 过滤器名 }} 或 v-bind:属性 …...
Codeforces Round 913 (Div. 3) (A-G)
后天就是 I C P C ICPC ICPC杭州站了,今天把之前做的 d i v 3 div3 div3题补一下,打完这场杭州站这赛季除了 E C F i n a l EC\,\,Final ECFinal就结束了,以后应该要多打 c f cf cf比赛练习保持手感,争取下赛季冲一下金牌。 感觉这…...
CSS——sticky定位
1. 大白话解释sticky定位 粘性定位通俗来说,它就是相对定位relative和固定定位fixed的结合体,它的触发过程分为三个阶段 在最近可滚动容器没有触发滑动之前,sticky盒子的表现为相对定位relative【第一阶段】, 但当最近可滚动容…...
Redis hash表源码解析
1、 整体数据结构 链式hash解决hash冲突、采用渐进式hash来完成扩容过程。 /** 哈希表节点*/ typedef struct dictEntry {// 键void *key;// 值union {void *val;uint64_t u64;int64_t s64;} v;// 指向下个哈希表节点,形成链表struct dictEntry *next;} dictEntry;…...
dll动态链接库【C#】
1说明: 在C#中,dll是添加 【类库】生成的。 2添加C#的dll: (1)在VS中新建一个Windows应用程序项目,并命名为TransferDll。 (2)打开Windows窗体设计器,从工具箱中为窗体…...
Linux 系统设置cpu频率
source_code: https://github.com/emagii/cpufrequtils cpufreq-set - A small tool which allows to modify cpufreq settings.(修改内存频率的工具) 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 版本控制软件 概念:版本控制软件是一个用来记录文件发生的变化,以便将来查阅特定版本修订情况的系统,有时也叫“版本控制系统”。通俗的理解就是把手工管理文件版本的方…...
多个HTML属性
在HTML中,属性用于提供有关HTML元素的附加信息。在这篇文章中你将学习多个HTML属性,它们可以增强网站的视觉吸引力。 接下来开始吧!🚀 Accept 属性 您可以将accept属性与<input>元素(仅用于文件类型ÿ…...
基于运算放大器的电压采集电路
一、运算放大器 运放推导的两个重要概念:虚短、虚断。 1、差分放大器 以差分放大器为例进行推导分析。 虚断–运放的"-“端、”“端的引脚电流接近为0; 根据基尔霍夫电流定律可知:iR1iRF,iR2iR3; iR1(Ui1-(V-…...
数字图像处理(实践篇) 十六 基于分水岭算法的图像分割
目录 一 分水岭算法 二 利用OpenCV实现分水岭算法的过程 三 实践 一 分水岭算法 基于任何灰度图像都可以视为地形表面,其中高强度表示山峰和山丘,而低强度表示山谷。首先,开始用不同颜色的水(标签)填充每个孤立的山…...
OpenRocket:开源火箭仿真平台的技术架构与实践指南
OpenRocket:开源火箭仿真平台的技术架构与实践指南 【免费下载链接】openrocket Model-rocketry aerodynamics and trajectory simulation software 项目地址: https://gitcode.com/GitHub_Trending/op/openrocket 价值定位:如何突破传统火箭设计…...
从0到1:Java+AI入门实战,看完直接上手项目
文章目录前言环境准备:别急着装Python,先把JDK升到21第一滴血:让Java程序说出"人话"进阶玩法:给AI装上"记忆"和"工具"让AI记住你们聊过啥让AI能查数据库、调接口实战项目:搭建私有知识库…...
手把手教你windows下如何部署copaw
前言: 本文内容主要讲解通过手工部署python并使用pip安装部署copaw,在官网有一键部署脚本等等教程,都很方便,但为什么作者要通过手工部署python环境,原因很简单,解决环境冲突的问题,通过conda能…...
Wan2.2-I2V-A14B企业落地:汽车4S店车型介绍短视频自动化生产系统
Wan2.2-I2V-A14B企业落地:汽车4S店车型介绍短视频自动化生产系统 1. 项目背景与需求分析 汽车4S店每天需要为不同车型制作大量介绍视频,传统视频制作方式面临三大痛点: 人力成本高:专业视频团队制作单条视频成本约2000-5000元制…...
SEO_2024年最新SEO趋势分析与实战策略解读
<h1 id"2024seo">2024年最新SEO趋势分析与实战策略解读</h1> <p>在数字营销的快速发展中,搜索引擎优化(SEO)作为提升网站流量的重要手段,一直备受关注。2024年,SEO领域再度发生了一些重要…...
[工业级协议]开发指南:从协议兼容性到实时通信的5步解决方案
[工业级协议]开发指南:从协议兼容性到实时通信的5步解决方案 【免费下载链接】libiec61850 Official repository for libIEC61850, the open-source library for the IEC 61850 protocols 项目地址: https://gitcode.com/gh_mirrors/li/libiec61850 副标题&a…...
Pixel Fashion Atelier保姆级教程:修复WebUI中文乱码与像素字体缺失问题
Pixel Fashion Atelier保姆级教程:修复WebUI中文乱码与像素字体缺失问题 1. 问题背景与现象 Pixel Fashion Atelier作为一款融合复古像素风格的AI图像生成工具,其独特的界面设计是其核心亮点之一。然而,部分用户在部署和使用过程中可能会遇…...
SpringBoot 接口全维度性能优化指南
文章目录: 前言 一、背景 1.1 为什么必须做 SpringBoot 接口优化? 1.2 接口优化的核心目标 1.3 本文适用范围 二、核心原理 2.1 接口请求全流程(瓶颈定位核心) 2.2 核心优化原理总览 2.3 优化优先级(生产环境…...
Qwen3-0.6B-FP8代理能力展示:调用计算器、查天气、解析PDF的Chainlit实录
Qwen3-0.6B-FP8代理能力展示:调用计算器、查天气、解析PDF的Chainlit实录 1. 引言:当小模型遇上大智慧 你可能听过很多关于大语言模型的讨论,动辄几十亿、上百亿参数,感觉它们无所不能。但今天我想和你聊聊一个不太一样的模型—…...
s2-pro开源大模型实战:低成本GPU部署语音合成服务完整流程
s2-pro开源大模型实战:低成本GPU部署语音合成服务完整流程 1. 前言:语音合成技术的新选择 语音合成技术正在改变我们与数字世界的交互方式。今天要介绍的s2-pro是Fish Audio开源的一款专业级语音合成模型镜像,它让高质量语音合成服务的部署…...
