一:事情起因
事情的起因是这样的:原来的产品已经有比较成熟代码,并且产品已经批量。客户提出了新的功能改动,需要将其中一个端口的功能与另一个端口互换,原来做AI采集的端口用作开关量采集,原来用作开关量采集的端口用作AI采集。
这么小的代码改动,想着让新来的小伙子尝试一下,就放心地让他去改。2天后询问进度,本来以为已经完成的工作,竟然被告知代码测试还有问题。
抽出来时间跟他一起检查了代码。当我看到下面的改动之后,瞬间崩溃了。
原来的代码是这样的:
GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_Init(GPIOA, &GPIO_InitStructure);改动后的代码是这样的:
GPIO_InitTypeDefGPIO_InitStructure; GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(GPIOA, &GPIO_InitStructure); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10; //GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN; GPIO_Init(GPIOA, &GPIO_InitStructure);乍一看好像没有什么问题,将原来PA9的AI模式配置注释掉,修改为上拉输入模式,将原来AI10的上拉输入模式修改为AI模式。
当我将代码用vscode打开后,发现第204行与205行的颜色相同。如下图:

原来是不小心在第204行最后输入了一个“”,这个“”在C语言中是换行标记,使用这个符号时,就导致第205行其实是被注释掉的。相当于PA9的模式一直没有设置成功。
当我问他为什么要在最后增加一个“”的时候,他说:“不知道,不过这个已经被注释了,也不影响啊!”。
我的内心在想,“你是C语言之父啊,你说没影响就没影响了?”。不过作为导师,还是耐着性子给他讲解了“”在C语言中的用法。
二:总结
在C语言程序编写中,我们有时会遇到一行代码太长而影响阅读或者出现与部分公司或组织要求的编码规范不符的情况,此时我们需要将这行代码分成多行来写。
针对一般语句,我们使用结尾作为换行标记。当在编译时,后面的换行符将被忽略,当做一行处理。
所以上面的语句:
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPD;在编译时的实际效果会这样的:
//GPIO_InitStructure.GPIO_Mode=GPIO_Mode_AIN;GPIO_InitStructure.GPIO_Mode=GPIO_Mode_IPD;所以下面一行配置端口为“上拉输入”模式的代码其实是被注释掉,不被编译进去的。
你也遇到过类似的问题吗?
审核编辑:刘清
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。
举报投诉
-
C语言
+关注
关注
183文章
7646浏览量
146134 -
GPIO
+关注
关注
16文章
1333浏览量
56445 -
vscode
+关注
关注
1文章
173浏览量
9268
原文标题:让新来的改一段C代码,结果后差点气死!
文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
热点推荐
pic单片机io口控制教程之c语言编程实现
pic单片机编程之io口控制的c语言编程实例教程。io控制作为单片机最核心基础的东西,能做除了ad、da转换之外绝大多数的事情,那么,当提起对应单片机io口控制c语言
发表于 07-26 11:52
•1.3w次阅读
急!请问C51与ISD4004的单片机C语言程序如何编写!
发表于 12-26 14:10
单片机:请问这种题目如何用c语言程序编写
发表于 03-31 09:28
C语言程序编写问题
如何对一个数组里的元素进行运算,例:u16 a[3]={1,2,3},我想进行这样的运算:(123-50)*2,然后把这个数值输出,现在的问题是,我如何把数组里的123拿出来运算
发表于 10-20 14:05
嵌入式程序员常见的const、static、volatile关键字
嵌入式程序员const、static、volatile三个关键字的朴素认识摘要:在C语言程序编写中,const、static关键字是比较熟悉
发表于 12-21 06:08
pwm调速原理c语言,pwm调速C语言程序编写
脉宽调制技术是通过对逆变电路开关的通断控制来实现对模拟电路的控制的。脉宽调制技术的输出波形是一系列大小相等的脉冲,用于替代所需要的波形,以正弦波为例,也就是使这一系列脉冲的等值电压为正弦波,并且输出脉冲尽量平滑且具有较少的低次谐波。
发表于 10-27 18:02
•8466次阅读
单片机硬件知识介绍 基于单片机点亮LED灯
本章的标题名为“点亮你的第一个 LED”,从功能上讲是一项非常简单的工作。其实本章包含的内容比较多,包括单片机硬件知识的介绍、C 语言程序的编写、程
发表于 07-24 11:48
•2816次阅读
C语言程序编写
评论