蓝桥杯嵌入式15届国赛,轻松解决——附满分工程链接

张开发
2026/4/10 3:48:13 15 分钟阅读

分享文章

蓝桥杯嵌入式15届国赛,轻松解决——附满分工程链接
蓝桥杯嵌入式15届国赛前言以下内容仅代表个人观点基于有限的经验和认知整理而成。每个人的视角和背景不同观点难免存在差异或局限。若存在疏漏或不足之处欢迎指正与探讨但请多一份包容。希望通过这些思考能激发更多有益的交流。——观点无高下讨论有温度题目两个难点我认为15届国赛的有两个难点1、接收不定长数据判断有无对错并从中提取想要的数据。2、怎么处理运动行经问题。对于第一点首先了解strncpy函数然后定义一个字符串数组用来接收暂时存储串口接收到的数据char input[50]; // 输入缓冲区然后写这样就可以去掉前后的括号后就只剩数字和’’了就只需要处理这个两种情况就好了。对于后续字符串分割有两个方法:第一种方法就是strtok_r分割函数和atoi()–将字符串转换成整数strtok_r()为分割函数atoi()为将字符串转换成整数关于strtok_r函数 功能线程安全的字符串分割函数用于将字符串按指定分隔符拆分成多个子串。 参数char*str要分割的字符串第一次调用时传入后续调用传入NULLconstchar*delim分隔符字符串char**saveptr用于保存分割位置的指针保证线程安全例如第一次调用传入待分割字符串和分隔符*/tokenstrtok_r(input_d,,,clcptr);然后后续继续调用传入的是NULLtokenstrtok_r(NULL,,,clcptr);完整伪代码tokenstrtok_r();while(...){xatoi(token);tokenstrtok_r;yatoi(token);// 继续获取下一组坐标的X坐标tokenstrtok_r;}第二种方法就是sscanf(推荐)Sscanf就当成拆分函数来用和sprintf相反。Sscanf可以有返回值也可以没有。简单来说返回值就是成功分解了多少个然后定义一个变量num用来接收sscanf的返回值判断input的格式是否出现问题有无多个连逗号格式是否%d,%d,%s来排布例**numsscanf(input,%d,%d,%s,xx,yy,input);**举例子(48,92,90,100,200,3,20,60)经过去前后括号得48,92,90,100,200,3,20,60执行sscanf后 num3xx48yy92input90,100,200,3,20,60然后while循环一次提取一组坐标然后用一个数组input存储剩下的字符。如果没有错误的以此循环等到一组组坐标。到现在串口不定长和坐标的处理问题就解决了。对于第二点我个人的想法是用分速度来行进。运用了高中的物理有一点点数学知识。斜边的长度用L表示所以我们可以通过算两个点的坐标来算x轴和y轴方向的速度。Vx VcosVy VsinSinyy/LCosxx/L然后就可以分别X和Y算行进的速度了注意行进方向可以向前也可以向后所以这个xx和yy需要有正负不能用无符号整型。然后可以把更行速度放在定时器中断里面确保实时更行数据。写作思路1、用当前位置加上速度2、算完当前速度后算距离下一个坐标点的距离。3、计算一次运动的距离并判断当前坐标点离下一个坐标点的距离是否小于一次的运动距离若小于则可以判断达到此坐标。4、到达此坐标后删除该坐标点并让后面的坐标向前移动一位。5、记录好当前坐标和下一个坐标后就重复上述步骤就可以轻松完成全部任务啦。希望我的写作思路对你有用。满分工程4t满分工程思路简单代码量少总结把这两个难点解决了其他的就很好解决啦。此文仅代表个人愚见。第15届国赛满分工程链接–两种办法均有对应b站视频其他届的工程及解析第8届省赛工程及解析第12届省赛满分工程

更多文章