蓝桥杯——停车场我存在的错误点

程序设计中遇到程序逻辑问题以及数值不对我们可以通过串口来进行调试,这样可以很明确程序的走向以及我们错在什么地方,但是有时候我们会发现一些很奇怪的问题,调试出来也不知道为什么。

由于停车场考的是串口,串口发送数据时必须要的,在写程序时遇到了以下几个问题:

  1. 一开始程序可以正常执行,但是加上 sprintf 之后,外加 buf 缓存数据,但是我的数组大小是20,在LED上显示数据,但是程序卡死,我当时有注释找问题,找到问题所在,但是不知道是这个buf的大小太小了,我就去设置了全局变量(下一个问题也出现在这个地方),程序正常运行。

  2. 改成全局变量之后运行顺畅,后面问题又来了。在程序中有设置费率以及汽车ID两个功能,都用到串口。这个难度不大,但是我在写完之后发现数据处理之后的数据不对,但是有说不出来哪里不对,当时也在模拟考,也就没又多管。但是在检查的就是发现:第一次发送数据单片机不能正常识别,第二次发送有时正确,有时不能识别,但是我直接在串口中断里面完全返回发送过去的数据,完全正确,这问题就出来了,我就猜,我的处理函数错了

在晚上我再来看这个程序的时候,我发现我改过处理函数也不正确,然后使用串口进行一步一步的调试,然后发现数据处理错误,应该说是不知道哪里跑来的数据。然后我也不知道什么问题,就去随意加大哪些全局数组的数组大小,没想到,成功了,然后一看,**我把 u8 buf[20];改为u8 buf[30],没错就是这样成功了;

反思:

  1. 写程序考虑数组的大小的意义,特别是有sprintf()函数时,有时候我们多打了个空格,少打了个空格就会超过数组的大小:局部变量容易让程序卡死,全局变量就有可能造成溢出,就相当于混进其他内存地址去了,就会让程序出现莫名其妙的错误。但是写单片机程序遵循一个变量的数据类型能小尽量小的原则,毕竟资源有限;

  2. 写程序遇到问题要会用合适方法去找问题

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 一、基础知识:1、JVM、JRE和JDK的区别:JVM(Java Virtual Machine):java虚拟机...
    杀小贼阅读 2,643评论 0 4
  • 有一次做一个东西,为了尽量不占用CPU的处理数据时间,所以就使用DMA接收串口的数据,但是呢问题来了.,,,,,怎...
    杨奉武阅读 3,444评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 35,203评论 18 399
  • (三) 相府书房—— 云落站在书桌前,朝着正在看书的人深深一揖,“主子请恕罪,奴婢不力,跟丢了雪绒姑娘。” 看书的...
    榆木不愚阅读 510评论 0 1
  • 凉夏悄然而止 悲秋潸然而至 而你,轰然的离去 随...
    安小安zzz阅读 702评论 19 6

友情链接更多精彩内容