c 多文件全局变量_C语言开发单片机为啥都是全局变量形式?
01
前言
全局變量簡直就是嵌入式系統的戈蘭高地。沖突最激烈的雙方是:1. 做控制的工程師;2. 做非嵌入式的軟件工程師。
C語言、單片機、嵌入式相關資料,可以加我微信“dqjob12345”找我要下,一起學習。
02
做控制的工程師特點
他們普遍的理解就是“變量都寫成全局該有多方便”。我之前面試過一個非常有名的做控制實驗室里出來的PhD/Master,前前后后陸續有快十個人。面試問題是用C寫PID。到后面的幾位面試的時候我都覺得沒有看的意義了,因為全都寫的是同一個風格。大概就是這樣的:
代碼的特點就是所有的變量一定定義在函數外面。問他們為什么,回答是“全局變量方便調試”。
事實上在學校里做搞自動控制的人最重要的根本就是控制的結果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類的和他們就不在同一個世界。進了公司有些人代碼質量會變好,但有的還是會延續之前的習慣。前公司代碼庫里面凡是看不懂的代碼一律都是那一兩個Control Engineer寫的,寫完了還會用自己的名字給函數命名的那種。
要成為一個資深的嵌入式工程師相當難,一方面要有非常扎實的理論知識,同時也要有相當的那種大型的、高頻CPU、多層PCB板的設計經驗。嵌入式硬件工程師要學的課程主要有模擬電路設計、數字電路設計、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設計和分析。
03
做非嵌入式的軟件工程師特點
代碼的特點就是所有的靜態變量都不可以定義在.h文件里,必須寫在.c文件里以確保別的文件沒法訪問它們。
別的文件真要訪問怎么辦?那就給每一個變量寫get/set函數啊!問題是靜態變量寫在.c文件里編譯器是沒法優化get/set的。結果就大面積的變量訪問要花幾倍的CPU時間去做get/set的函數調用。嵌入式項目很多情況下對硬件的壓榨是很極端的,CPU利用率90%都不算什么,頂到97%都是有的。(注意下這些項目是實時性要求很高的,晚一個毫秒算不完都不行。不是跑在電腦上鼠標卡一卡也無所謂的。)然后為了封裝性,在代碼里面塞這么多get/set嗎?
04
總結
總的來說嵌入式軟件里大部分的代碼都是中斷驅動的,天生就有很多變量是沒法使用參數傳遞的。全局變量的存在是因為正義站在這邊。但是嵌入式軟件遠遠沒有特殊到不需要按照正常軟件工程方法去管理的地步。要真有人認為“嵌入式軟件只要能工作就成,代碼丑一點無所謂的”純粹是軟件工程水平不行,不是因為控制水平太高。
全局變量一定是要用的,管理它們也很重要。一些基本的代碼規則:
C語言、單片機、嵌入式相關資料,可以加我微信“dqjob12345”找我要下,一起學習。
總結
以上是生活随笔為你收集整理的c 多文件全局变量_C语言开发单片机为啥都是全局变量形式?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 别克E5远程开启空调怎么操作
- 下一篇: python remove函数_pyth