0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

C语言程序编写

硬件攻城狮 来源:玩转单片机与嵌入式 2022-12-30 14:55 次阅读

一:事情起因

事情的起因是这样的:原来的产品已经有比较成熟代码,并且产品已经批量。客户提出了新的功能改动,需要将其中一个端口的功能与另一个端口互换,原来做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行的颜色相同。如下图:

7e0e8a32-788b-11ed-8abf-dac502259ad0.png

原来是不小心在第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语言
    +关注

    关注

    180

    文章

    7596

    浏览量

    135957
  • GPIO
    +关注

    关注

    16

    文章

    1189

    浏览量

    51852
  • vscode
    +关注

    关注

    1

    文章

    154

    浏览量

    7657

原文标题:让新来的改一段C代码,结果后差点气死!

文章出处:【微信号:mcu168,微信公众号:硬件攻城狮】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    pic单片机io口控制教程之c语言编程实现

    pic单片机编程之io口控制的c语言编程实例教程。io控制作为单片机最核心基础的东西,能做除了ad、da转换之外绝大多数的事情,那么,当提起对应单片机io口控制c语言
    发表于 07-26 11:52 1.2w次阅读
    pic单片机io口控制教程之<b class='flag-5'>c</b><b class='flag-5'>语言</b>编程实现

    单机片技术:Keil环境下C语言程序编写及仿真#单片机

    单片机仿真技术
    学习硬声知识
    发布于 :2022年11月09日 14:06:29

    用最简单的C语言程序编写万年历!!!求助

    用最简单的C语言程序编写万年历!!好难啊...
    发表于 09-25 18:53

    急!请问C51与ISD4004的单片机C语言程序如何编写!

    发表于 12-26 14:10

    1602显示的程序怎么写?

    请教高手1602显示C语言程序编写,简单明了那种。
    发表于 05-09 11:44

    12864显示屏程序编写

    请教高手编写12864显示屏C语言程序编写,谢谢!
    发表于 05-09 11:47

    家用室内湿度传感器装置

    HS1101的湿度传感器与AVR单片机如何;连接,求C语言程序编写和电路图
    发表于 05-15 21:48

    C语言学习核心教程

    开天辟地,重新认识C语言。一书在手,精通高质量C语言程序编写
    发表于 01-23 12:43

    如何用C51驱动航模直流无刷电机?用C语言程序如何编写

    如何用C51驱动航模直流无刷电机?用C语言程序如何编写
    发表于 05-11 15:37

    单片机:请问这种题目如何用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调速的理论基础。。。。。。。。。。。。。。。。。。。。。。。。。
    发表于 11-12 11:36 29次下载

    pwm调速原理c语言,pwm调速C语言程序编写

    脉宽调制技术是通过对逆变电路开关的通断控制来实现对模拟电路的控制的。脉宽调制技术的输出波形是一系列大小相等的脉冲,用于替代所需要的波形,以正弦波为例,也就是使这一系列脉冲的等值电压为正弦波,并且输出脉冲尽量平滑且具有较少的低次谐波。
    发表于 10-27 18:02 7762次阅读

    单片机硬件知识介绍 基于单片机点亮LED灯

    本章的标题名为“点亮你的第一个 LED”,从功能上讲是一项非常简单的工作。其实本章包含的内容比较多,包括单片机硬件知识的介绍、C 语言程序编写
    发表于 07-24 11:48 1614次阅读
    单片机硬件知识介绍 基于单片机点亮LED灯