資料介紹
前言
全局變量簡直就是嵌入式系統的戈蘭高地。沖突最激烈的雙方是:
1. 做控制的工程師;
2. 做非嵌入式的軟件工程師。
做控制的工程師特點
他們普遍的理解就是“變量都寫成全局該有多方便”。我之前面試過一個非常有名的做控制實驗室里出來的PhD/Master,前前后后陸續有快十個人。面試問題是用C寫PID。到后面的幾位面試的時候我都覺得沒有看的意義了,因為全都寫的是同一個風格。大概就是這樣的:
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; }
代碼的特點就是所有的變量一定定義在函數外面。問他們為什么,回答是“全局變量方便調試”。
事實上在學校里做搞自動控制的人最重要的根本就是控制的結果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類的和他們就不在同一個世界。進了公司有些人代碼質量會變好,但有的還是會延續之前的習慣。前公司代碼庫里面凡是看不懂的代碼一律都是那一兩個Control Engineer寫的,寫完了還會用自己的名字給函數命名的那種。
要成為一個資深的嵌入式工程師相當難,一方面要有非常扎實的理論知識,同時也要有相當的那種大型的、高頻CPU、多層PCB板的設計經驗。嵌入式硬件工程師要學的課程主要有模擬電路設計、數字電路設計、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設計和分析。
做非嵌入式的軟件工程師特點
代碼的特點就是所有的靜態變量都不可以定義在.h文件里,必須寫在.c文件里以確保別的文件沒法訪問它們。
別的文件真要訪問怎么辦?那就給每一個變量寫get/set函數啊!問題是靜態變量寫在.c文件里編譯器是沒法優化get/set的。結果就大面積的變量訪問要花幾倍的CPU時間去做get/set的函數調用。嵌入式項目很多情況下對硬件的壓榨是很極端的,CPU利用率90%都不算什么,頂到97%都是有的。(注意下這些項目是實時性要求很高的,晚一個毫秒算不完都不行。不是跑在電腦上鼠標卡一卡也無所謂的。)然后為了封裝性,在代碼里面塞這么多get/set嗎?
總結
總的來說嵌入式軟件里大部分的代碼都是中斷驅動的,天生就有很多變量是沒法使用參數傳遞的。全局變量的存在是因為正義站在這邊。但是嵌入式軟件遠遠沒有特殊到不需要按照正常軟件工程方法去管理的地步。要真有人認為“嵌入式軟件只要能工作就成,代碼丑一點無所謂的”純粹是軟件工程水平不行,不是因為控制水平太高。
全局變量一定是要用的,管理它們也很重要。一些基本的代碼規則:
① 如果只是文件內調用,全局變量只能寫在這個.c文件里,不要寫進.h文件。
② 如果有文件外調用,全局變量要寫在.h文件里。
③ .h里面的全局變量全局可讀,但是只有本文件組可以寫。別的文件要寫請調用set函數。
④ 所有的全局變量無論在.h還是.c里面都要包成同名struct。哪怕只有一個變量也要寫進struct里面。比如PID.c里面有一個pid_S,PID.h里面有個PID_S。這樣其他人不僅可以立即識別出一個變量是project內global/文件內static/函數內local,同時還能輕松追溯到這個函數是屬于哪個文件的。
⑤ 不要寫函數內的static變量。函數內的static變量在實際的項目中幾乎就是bug生成器,沒法簡單的reset。而且對unit test非常不友好。
- C語言開發單片機為什么大多數都采用全局變量的形式?
- C語言開發單片機為什么大多數都采用全局變量的形式?
- C語言開發單片機為啥都是全局變量形式?
- C語言開發單片機為什么大多數都采用全局變量的形式?
- 為啥沒有好用的開發單片機的國產IDE?
- 全局變量被未知原因改變的解決方法
- 《PIC單片機C語言》pdf 0次下載
- C語言開發單片機為什么大多數都采用全局變量的形式?
- 如何使用eclipse開發單片機程序
- PIC單片機的C語言編程電子版下載 0次下載
- 詳解LABVIEW中的局部變量和全局變量 26次下載
- 教大家一個如何在頭文件中定義全局變量的方法 19次下載
- 從匯編代碼訪問C全局變量 0次下載
- Labview之全局變量 0次下載
- static作用(修飾函數、局部變量、全局變量) 4次下載
- 你是不是也沒躲過這個坑?用了太多全局變量...... 376次閱讀
- 嵌入式全局變量的初始化原理詳解 954次閱讀
- 用個簡單demo實現對全局變量的管理 864次閱讀
- 如何判定全局變量和局部變量 3295次閱讀
- C語言里函數的定義、子函數的使用及變量的作用域 6265次閱讀
- 能用C++開發單片機嗎 6796次閱讀
- 學習單片機一定要先學好C語言再去學單片機嗎 1.3w次閱讀
- Keil C51單片機變量的使用方法詳細介紹 4528次閱讀
- C51單片機中定義一個全局變量會有怎樣的影響 7894次閱讀
- 51單片機復位的方法有哪些 淺談51單片機復位 2.7w次閱讀
- 單片機ROM,RAM和FLASH的作用 1w次閱讀
- 解析C語言與ARM匯編與的相互調用以及與 C++ 相互調用 5838次閱讀
- 關于單片機和c語言的10個問題和解答 4633次閱讀
- 單片機中的ROM,RAM和FLASH的作用 2.6w次閱讀
- 全局變量和局部變量有什么區別 3.2w次閱讀
下載排行
本周
- 1XL4015+LM358恒壓恒流電路圖
- 0.38 MB | 137次下載 | 1 積分
- 2PCB布線和布局電路設計規則
- 0.40 MB | 4次下載 | 免費
- 3TPS6287B25降壓轉換器評估模塊
- 3.46MB | 1次下載 | 免費
- 4INA226EVM用戶指南
- 4.7MB | 1次下載 | 免費
- 5INA226EVM修訂版A模型用戶指南和軟件教程
- 2.28MB | 1次下載 | 免費
- 6Altium Designer印刷電路板設計與制作PDF電子書免費下載
- 14.11 MB | 0次下載 | 3 積分
- 7DLPC3470和DLPC3478軟件編程人員指南
- 1.68MB | 次下載 | 免費
- 8TPS1213-Q1智能高側驅動器評估模塊
- 1.63MB | 次下載 | 免費
本月
- 1XL4015+LM358恒壓恒流電路圖
- 0.38 MB | 137次下載 | 1 積分
- 2新概念模擬電路第四冊信號處理電路電子書免費下載
- 10.69 MB | 60次下載 | 免費
- 3800VA純正弦波逆變器的參考設計
- 2.96MB | 34次下載 | 免費
- 4純電動汽?的主要部件及?作原理
- 5.76 MB | 15次下載 | 5 積分
- 5JESD79-5C_v1.30-2024 內存技術規范
- 2.71 MB | 10次下載 | 免費
- 6elmo直線電機驅動調試細則
- 4.76 MB | 9次下載 | 6 積分
- 7明偉電源模塊RSP-3000圖紙
- 0.30 MB | 8次下載 | 免費
- 8使用BQ76PL102系列電量計進行BQ78PL114的快速入門指南
- 4.04MB | 7次下載 | 免費
總榜
- 1matlab軟件下載入口
- 未知 | 935115次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420061次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233084次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191366次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183329次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73805次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65985次下載 | 10 積分
評論
查看更多