蓝桥杯嵌入式之比赛总结

蓝桥杯比赛的项目有软件类和硬件类,软件类又分Java和c/c++,硬件类又分单片机和嵌入式。硬件类主要考客观题和程序设计题。客观题主要涉及对相应开发板的认识、数电、模电知识;程序设计题则是按要求在相应的开发板上实现相应的功能。蓝桥杯比赛分省赛和国赛。省赛一般是12月之前报名,3月底举行;国赛一般是5月前报名,5月份举行。但是如果想进国赛的话,需要在省赛拿一等奖。两次参赛都需报名费300元,由学院统一提交。接下来主要对硬件类的嵌入式进行比赛总结。

省赛总结

对于省赛来说,不管是客观题还是程序设计题都是一般的。今年客观题主要偏向模电的知识,对于嵌入式知识的考察基本上可以在比赛给的文档中查出。这主要得益于快捷键Crtl+F键的设计。程序设计题也相对于往年来说是比较简单的。主要考ADC、按键、LCD、LED的知识点。主要的难点是LED闪烁时间的控制,如果用delay延时的话会造成程序的整体混乱,因为按键和ADC需要实时的扫描。但是如果用SysTick的话,很容易使相应的变量无法自加自减。我当时用的是if语句的判断,和延时函数的方法一样。当相应变量大于零时,进行自减,在主函数中判断该变量是否为零,如果为零则进行相应的处理。但是烧写到开发板中发现变量根本没有进行自减(通过LED灯的状态查看的)。后来一直改,进行自加等方法还是不理想。最后把if语句去掉,发现功能实现了。其它的也没有需要注意的问题,也就是I/O时钟初始化函数容易用错。

国赛总结

对于国赛来说。虽然是在一个陌生的教室进行比赛,但是也并没有一丝的紧张感,不是自己心态好,而是国赛的难度和量度导致我没时间紧张。国赛跟省赛的考试流程差不多,也就是所给的资料包多一点,手中又多了一个小的扩展板。当我把试题下载出来后,发现客观题还可以,无非就是多了几道而已。但是对于程序设计题来说,简直就像在看小说,一直翻不到底。每句话都是要求,感觉代码量肯定很多。我一般是先做客观题的。按照以往的惯例,都是一边打开使用手册,一边看题,找出题中的关键字,Ctrl+C,转页面,Ctrl+F,答案出来了。前几道还行,都能找到答案,其实只有一道题吧,之后的就懵了。甚至还有有关信号、计算机三级嵌入式的知识都有。有关信号的题并不是太难,但是计算机三级嵌入式的知识忘得差不多了,尤其是考了难以分辨的知识点。虽然说不是太跑题,但是一般学嵌入式的,能用熟练的也没几个,更别说里面的结构了。

国赛的客观题总算解决,虽然还有几道不知答案的,但是可以放到最后蒙了。接下来就是看程序设计题了,LCD、按键、LED、数码管、ADC*2、USART、EEPROM、PWM输入捕获、DS18B20,共9个模块。看到DS18B20后,立马找比赛提供的驱动,发现只有IIC的,再找,还是没有。看来谁写出DS18B20的代码,谁就国一了,DS18B20的代码至少200行,谁能背的下来,尤其是其中的参数,参考手册又是英文的,看着都心烦,更别说找了。一会有人说给的驱动不够,于是老师又从新发了一个压缩包,上面特意标了一下是国赛的文档。赶紧打开看看DS18B20的代码,翻到最下面,好像少了一个函数,温度读取函数。感觉还不如不给,少了这个函数,DS18B20只能初始化,有啥意思。说好了的,第八届是全给的,只需调用就行,现在换成调包了。

由于程序设计题的要求实在是太多,所以我在演草纸上写出主副界面内容,要用到的模块及每个模块的使用方法。写了半个小时,发现只写了一半,之前写的还都是挑重点写的。什么也不管了,就开始各个模块的初始化代码的复制粘贴修改等。首先是EEPROM的初始化及使用,因为考虑到会考EEPROM,所以考前特意的记了一下。但是保存变量的最大数为65536,两字节的。EEPROM只能一字节一字节的寸。看来只能存两次了。代码写好,试运行。正如所想的那样,理想很美好,现实很残酷,结果很不理想,改了多次还是不行,就放弃它了,开始ADC*2的代码编写。ADC*2的代码编写已经很两费时间了,又在调试上下了很大的功夫、浪费了很长的时间。PWM输入捕获虽然代码很好修改,但是显示效果很不理想,改了半天,才发现用了一个很容易忽略的知识点,就是LCD显示屏如果不对某一行进行清除的话,很有可能在最后面显示之前的字符。大多数的模块初始化、读取等的代码写好,但是查看效果时发现LCD显示屏不亮。第一反应是某个模块初始化的时钟使能函数用错了,于是一行一行的对,发现没有错,很崩溃。开始实行第二步作战计划,一个一个的模块初始化函数一次一次的烧写到开发板上,反正也没事,就是浪费时间。后来发现USART的初始化代码又问题,立即跳转到USART的初始化代码,对按F12键的跳转速度很满意。开始一行一行的找错,但是也没有发现错误,无非是把接收和发送的初始化放一起了,也省略了一些共同的代码。为了减小损失,使自己没有白干活,所以部分的代码注释,看看哪些代码引发错误的。最终定位到是中断的代码有错误,注释掉它。一看时间,快1点了,除了一脸的惊讶就是一脸的危险感,那么多的功能还没实现呢,我还想看看英文呢。没办法,为了保全成绩,只能做好门面工作了。开始调试主副界面的切换及参数的修改。因为主副界面的切换及参数修改跟省赛的差不多。所以感觉没啥可怕的。但是调式也浪费了不少的时间。调式好,开始把写好的模块进一步完善。延时,又是延时,特定时间点的动作。原本高高兴兴的写,但是发现效果又不理想,这根省赛写的一样,难道国赛换板子了,不可能的。改代码,所有的方法都用过,就是结果不理想,投降。最后只剩20分钟的时间了。简单的再增加几个功能。好了,没剩多少时间了,交东西,走人,结果听天由命吧。

最后的总结是, 准备时间太短了,两周的时间不仅要复习基础板的内容还要学扩展板的内容。扩展板的内容虽然简单,但是参数多,尤其是数码管、ADC按键和ADC*2等。一时间容易记乱。

比赛建议

比赛前由于会提前进考场,坐在自己的座位后就可以写代码了,建议先查看自己的板子是否有问题,查看方法是把比赛给的LCD代码下载到板子上。然后就可以写一些简单且常用或记得不清的模块初始化及使用。节约时间,防止真正的比赛时候没时间调试。其它建议可以在上文总结。客观题不会的先空着,最后随便蒙,别把不会的选成多选的就行。

原文发布于微信公众号 - IT界的小白帽(l1084504793)

原文发表时间:2019-05-31

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

扫码关注云+社区

领取腾讯云代金券