<bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 首頁 > 空調(diào) >

    C語言開發(fā)單片機(jī)為什么多數(shù)都采用全局變量的形式?

    全局變量簡直就是嵌入式系統(tǒng)的戈蘭高地。

    順帶一提。今年自己還錄制了一套還比較系統(tǒng)的入門單片機(jī)教程,想要私信我就可以或者全網(wǎng)同名:華維單片機(jī)編程。還有線上指導(dǎo)學(xué)生去參加電子設(shè)計(jì)比賽。

    沖突最激烈的雙方是1. 做控制的工程師 2. 做非嵌入式的軟件工程師。

    第一派做控制的工程師。他們普遍的理解就是“變量都寫成全局該有多方便”。我之前面試過一個非常有名的做控制實(shí)驗(yàn)室里出來的PhD/Master,前前后后陸續(xù)有快十個人。面試問題是用C寫PID。到后面的幾位面試的時候我都覺得沒有看的意義了,因?yàn)槿紝懙氖峭粋€風(fēng)格。大概就是這樣的:

    代碼的特點(diǎn)就是所有的變量一定定義在函數(shù)外面。問他們?yōu)槭裁矗卮鹗恰叭肿兞糠奖阏{(diào)試”。

    事實(shí)上在學(xué)校里做搞自動控制的人最重要的根本就是控制的結(jié)果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類的和他們就不在同一個世界。進(jìn)了公司有些人代碼質(zhì)量會變好,但有的還是會延續(xù)之前的習(xí)慣。前公司代碼庫里面凡是看不懂的代碼一律都是那一兩個Control Engineer寫的,寫完了還會用自己的名字給函數(shù)命名的那種。

    另外一派是之前不做嵌入式后來轉(zhuǎn)行的軟件工程師。代碼的特點(diǎn)就是所有的靜態(tài)變量都不可以定義在.h文件里,必須寫在.c文件里以確保別的文件沒法訪問它們。

    別的文件真要訪問怎么辦?那就給每一個變量寫get/set函數(shù)啊!問題是靜態(tài)變量寫在.c文件里編譯器是沒法優(yōu)化get/set的。結(jié)果就大面積的變量訪問要花幾倍的CPU時間去做get/set的函數(shù)調(diào)用。嵌入式項(xiàng)目很多情況下對硬件的壓榨是很極端的,CPU利用率90%都不算什么,頂?shù)?7%都是有的。(注意下這些項(xiàng)目是實(shí)時性要求很高的,晚一個毫秒算不完都不行。不是跑在電腦上鼠標(biāo)卡一卡也無所謂的。)然后為了封裝性,在代碼里面塞這么多get/set嗎?

    總的來說嵌入式軟件里大部分的代碼都是中斷驅(qū)動的,天生就有很多變量是沒法使用參數(shù)傳遞的。全局變量的存在是因?yàn)檎x站在這邊。但是嵌入式軟件遠(yuǎn)遠(yuǎn)沒有特殊到不需要按照正常軟件工程方法去管理的地步。要真有人認(rèn)為“嵌入式軟件只要能工作就成,代碼丑一點(diǎn)無所謂的”純粹是軟件工程水平不行,不是因?yàn)榭刂扑教摺?/span>

    全局變量一定是要用的,管理它們也很重要。一些基本的代碼規(guī)則:

    .如果只是文件內(nèi)調(diào)用,全局變量只能寫在這個.c文件里,不要寫進(jìn).h文件。

    .如果有文件外調(diào)用,全局變量要寫在.h文件里。

    ..h里面的全局變量全局可讀,但是只有本文件組可以寫。別的文件要寫請調(diào)用set函數(shù)。

    .所有的全局變量無論在.h還是.c里面都要包成同名struct。哪怕只有一個變量也要寫進(jìn)struct里面。比如PID.c里面有一個pid_S,PID.h里面有個PID_S。這樣其他人不僅可以立即識別出一個變量是project內(nèi)global/文件內(nèi)static/函數(shù)內(nèi)local,同時還能輕松追溯到這個函數(shù)是屬于哪個文件的。

    .不要寫函數(shù)內(nèi)的static變量。函數(shù)內(nèi)的static變量在實(shí)際的項(xiàng)目中幾乎就是bug生成器,沒法簡單的reset。而且對unit test非常不友好。

    碼字不易,喜歡來個點(diǎn)贊關(guān)注,入門單片機(jī)教程,私信我就可以。

    責(zé)任編輯:Rex_08

    關(guān)鍵詞: static
    推薦閱讀
    欧美国产在线一区,免费看成年视频网页,国产亚洲福利精品一区,亚洲一区二区约美女探花
    <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
  • 
    <pre id="ks4iu"></pre>
  • <bdo id="ks4iu"><del id="ks4iu"></del></bdo>
    <input id="ks4iu"><em id="ks4iu"></em></input>
    
    
  • <center id="ks4iu"><cite id="ks4iu"></cite></center>
  • 主站蜘蛛池模板: 欧美成人片一区二区三区| 又大又硬又爽又粗又快的视频免费| 羞羞网站在线观看| 日本特黄特色aaa大片免费| 国产成人综合亚洲| 久爱免费观看在线网站| 黑色丝袜美腿美女被躁翻了| 色之综合天天综合色天天棕色| 日本黄色片免费观看| 国产成人av在线影院| 久久躁狠狠躁夜夜av| 成人自拍视频网| 日本边添边摸边做边爱边| 国产吃奶摸下激烈视频无遮挡| 久久精品久久精品| 99爱在线视频| 毛片免费视频播放| 国产精品毛片无遮挡高清| 亚洲午夜国产精品| 欧美jizz18欧美| 日韩人妻一区二区三区免费| 国产亚洲精品bt天堂精选| 久久99精品九九九久久婷婷 | 性高朝久久久久久久| 别急慢慢来在线观看| 一个人看的www免费高清| 男男全肉高h视频在线观看| 多人乱p欧美在线观看| 亚洲欧洲综合网| 激情欧美人xxxxx| 日日操夜夜操免费视频| 又粗又长又黄又爽视频| haodiaocao几万部精彩视频| 欧美精品videosex极品| 国产熟女乱子视频正在播放 | 欧美激情第1页| 女人疯狂喷水爽视频| 亚洲精品自拍视频| 亚洲国产老鸭窝一区二区三区 | 国内xxxx乱子另类| 五月开心播播网|