資料介紹
前言
全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是:
1. 做控制的工程師;
2. 做非嵌入式的軟件工程師。
做控制的工程師特點(diǎn)
他們普遍的理解就是“變量都寫(xiě)成全局該有多方便”。我之前面試過(guò)一個(gè)非常有名的做控制實(shí)驗(yàn)室里出來(lái)的PhD/Master,前前后后陸續(xù)有快十個(gè)人。面試問(wèn)題是用C寫(xiě)PID。到后面的幾位面試的時(shí)候我都覺(jué)得沒(méi)有看的意義了,因?yàn)槿紝?xiě)的是同一個(gè)風(fēng)格。大概就是這樣的:
float SetSpeed; float err; float err_last; float Kp,Ki,Kd; float integral; float result; float PID(float speed) { err=SetSpeed-speed; integral+=err; result=Kp*err+Ki*integral+Kd*(err-err_last); err_last=err; return result; }
代碼的特點(diǎn)就是所有的變量一定定義在函數(shù)外面。問(wèn)他們?yōu)槭裁?,回答是“全局變量方便調(diào)試”。
事實(shí)上在學(xué)校里做搞自動(dòng)控制的人最重要的根本就是控制的結(jié)果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類(lèi)的和他們就不在同一個(gè)世界。進(jìn)了公司有些人代碼質(zhì)量會(huì)變好,但有的還是會(huì)延續(xù)之前的習(xí)慣。前公司代碼庫(kù)里面凡是看不懂的代碼一律都是那一兩個(gè)Control Engineer寫(xiě)的,寫(xiě)完了還會(huì)用自己的名字給函數(shù)命名的那種。
要成為一個(gè)資深的嵌入式工程師相當(dāng)難,一方面要有非常扎實(shí)的理論知識(shí),同時(shí)也要有相當(dāng)?shù)哪欠N大型的、高頻CPU、多層PCB板的設(shè)計(jì)經(jīng)驗(yàn)。嵌入式硬件工程師要學(xué)的課程主要有模擬電路設(shè)計(jì)、數(shù)字電路設(shè)計(jì)、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設(shè)計(jì)和分析。
做非嵌入式的軟件工程師特點(diǎn)
代碼的特點(diǎn)就是所有的靜態(tài)變量都不可以定義在.h文件里,必須寫(xiě)在.c文件里以確保別的文件沒(méi)法訪問(wèn)它們。
別的文件真要訪問(wèn)怎么辦?那就給每一個(gè)變量寫(xiě)get/set函數(shù)??!問(wèn)題是靜態(tài)變量寫(xiě)在.c文件里編譯器是沒(méi)法優(yōu)化get/set的。結(jié)果就大面積的變量訪問(wèn)要花幾倍的CPU時(shí)間去做get/set的函數(shù)調(diào)用。嵌入式項(xiàng)目很多情況下對(duì)硬件的壓榨是很極端的,CPU利用率90%都不算什么,頂?shù)?7%都是有的。(注意下這些項(xiàng)目是實(shí)時(shí)性要求很高的,晚一個(gè)毫秒算不完都不行。不是跑在電腦上鼠標(biāo)卡一卡也無(wú)所謂的。)然后為了封裝性,在代碼里面塞這么多get/set嗎?
總結(jié)
總的來(lái)說(shuō)嵌入式軟件里大部分的代碼都是中斷驅(qū)動(dòng)的,天生就有很多變量是沒(méi)法使用參數(shù)傳遞的。全局變量的存在是因?yàn)檎x站在這邊。但是嵌入式軟件遠(yuǎn)遠(yuǎn)沒(méi)有特殊到不需要按照正常軟件工程方法去管理的地步。要真有人認(rèn)為“嵌入式軟件只要能工作就成,代碼丑一點(diǎn)無(wú)所謂的”純粹是軟件工程水平不行,不是因?yàn)榭刂扑教摺?/p>
全局變量一定是要用的,管理它們也很重要。一些基本的代碼規(guī)則:
① 如果只是文件內(nèi)調(diào)用,全局變量只能寫(xiě)在這個(gè).c文件里,不要寫(xiě)進(jìn).h文件。
② 如果有文件外調(diào)用,全局變量要寫(xiě)在.h文件里。
③ .h里面的全局變量全局可讀,但是只有本文件組可以寫(xiě)。別的文件要寫(xiě)請(qǐng)調(diào)用set函數(shù)。
④ 所有的全局變量無(wú)論在.h還是.c里面都要包成同名struct。哪怕只有一個(gè)變量也要寫(xiě)進(jìn)struct里面。比如PID.c里面有一個(gè)pid_S,PID.h里面有個(gè)PID_S。這樣其他人不僅可以立即識(shí)別出一個(gè)變量是project內(nèi)global/文件內(nèi)static/函數(shù)內(nèi)local,同時(shí)還能輕松追溯到這個(gè)函數(shù)是屬于哪個(gè)文件的。
⑤ 不要寫(xiě)函數(shù)內(nèi)的static變量。函數(shù)內(nèi)的static變量在實(shí)際的項(xiàng)目中幾乎就是bug生成器,沒(méi)法簡(jiǎn)單的reset。而且對(duì)unit test非常不友好。
- C語(yǔ)言開(kāi)發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
- C語(yǔ)言開(kāi)發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
- C語(yǔ)言開(kāi)發(fā)單片機(jī)為啥都是全局變量形式?
- C語(yǔ)言開(kāi)發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
- 為啥沒(méi)有好用的開(kāi)發(fā)單片機(jī)的國(guó)產(chǎn)IDE?
- 全局變量被未知原因改變的解決方法
- 《PIC單片機(jī)C語(yǔ)言》pdf 0次下載
- C語(yǔ)言開(kāi)發(fā)單片機(jī)為什么大多數(shù)都采用全局變量的形式?
- 如何使用eclipse開(kāi)發(fā)單片機(jī)程序
- PIC單片機(jī)的C語(yǔ)言編程電子版下載 0次下載
- 詳解LABVIEW中的局部變量和全局變量 26次下載
- 教大家一個(gè)如何在頭文件中定義全局變量的方法 19次下載
- 從匯編代碼訪問(wèn)C全局變量 0次下載
- Labview之全局變量 0次下載
- static作用(修飾函數(shù)、局部變量、全局變量) 4次下載
- 你是不是也沒(méi)躲過(guò)這個(gè)坑?用了太多全局變量...... 376次閱讀
- 嵌入式全局變量的初始化原理詳解 954次閱讀
- 用個(gè)簡(jiǎn)單demo實(shí)現(xiàn)對(duì)全局變量的管理 864次閱讀
- 如何判定全局變量和局部變量 3295次閱讀
- C語(yǔ)言里函數(shù)的定義、子函數(shù)的使用及變量的作用域 6265次閱讀
- 能用C++開(kāi)發(fā)單片機(jī)嗎 6796次閱讀
- 學(xué)習(xí)單片機(jī)一定要先學(xué)好C語(yǔ)言再去學(xué)單片機(jī)嗎 1.3w次閱讀
- Keil C51單片機(jī)變量的使用方法詳細(xì)介紹 4528次閱讀
- C51單片機(jī)中定義一個(gè)全局變量會(huì)有怎樣的影響 7894次閱讀
- 51單片機(jī)復(fù)位的方法有哪些 淺談51單片機(jī)復(fù)位 2.7w次閱讀
- 單片機(jī)ROM,RAM和FLASH的作用 1w次閱讀
- 解析C語(yǔ)言與ARM匯編與的相互調(diào)用以及與 C++ 相互調(diào)用 5838次閱讀
- 關(guān)于單片機(jī)和c語(yǔ)言的10個(gè)問(wèn)題和解答 4633次閱讀
- 單片機(jī)中的ROM,RAM和FLASH的作用 2.6w次閱讀
- 全局變量和局部變量有什么區(qū)別 3.2w次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論
查看更多