一:事情起因
事情的起因是這樣的:原來的產品已經有比較成熟代碼,并且產品已經批量。客戶提出了新的功能改動,需要將其中一個端口的功能與另一個端口互換,原來做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文章
7644瀏覽量
145602 -
GPIO
+關注
關注
16文章
1328瀏覽量
56231 -
vscode
+關注
關注
1文章
172瀏覽量
9156
原文標題:讓新來的改一段C代碼,結果后差點氣死!
文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
熱點推薦
pic單片機io口控制教程之c語言編程實現
pic單片機編程之io口控制的c語言編程實例教程。io控制作為單片機最核心基礎的東西,能做除了ad、da轉換之外絕大多數的事情,那么,當提起對應單片機io口控制c語言
發表于 07-26 11:52
?1.2w次閱讀
急!請問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
?8433次閱讀
單片機硬件知識介紹 基于單片機點亮LED燈
本章的標題名為“點亮你的第一個 LED”,從功能上講是一項非常簡單的工作。其實本章包含的內容比較多,包括單片機硬件知識的介紹、C 語言程序的編寫、程
發表于 07-24 11:48
?2713次閱讀
C語言程序編寫
評論