那曲檬骨新材料有限公司

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

資深的嵌入式工程師如何看待全局變量形式

電子設計 ? 來源:mcu中文技術社區 ? 作者:mcu中文技術社區 ? 2021-01-15 14:47 ? 次閱讀

全局變量簡直就是嵌入式系統的戈蘭高地。沖突最激烈的雙方是:

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非常不友好。
編輯:hfy

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 嵌入式系統
    +關注

    關注

    41

    文章

    3625

    瀏覽量

    129756
  • 軟件工程師
    +關注

    關注

    8

    文章

    218

    瀏覽量

    21175
收藏 人收藏

    評論

    相關推薦

    年薪30萬的嵌入式工程師,究竟需要掌握哪些技能?

    隨著智能硬件、物聯網、智能汽車、自動化控制等領域的迅速發展,嵌入式工程師的需求也水漲船高。尤其是在全球化和技術加速的時代,嵌入式開發不僅是一個熱門行業,還是跨學科技術與創新的交匯點。對于那些具備扎實
    的頭像 發表于 01-16 10:59 ?377次閱讀
    年薪30萬的<b class='flag-5'>嵌入式</b><b class='flag-5'>工程師</b>,究竟需要掌握哪些技能?

    為什么嵌入式驅動開發工程師可以拿高薪?

    為什么嵌入式驅動開發工程師可以拿高薪? 嵌入式驅動開發,屬于需求量大、薪資斷崖升高的熱門崗位,在市場的發展驅動下成為“風口”。從市場的整體需求來看,
    發表于 01-07 16:56

    嵌入式工程師常用的開發工具有哪些?

    嵌入式工程師常用的開發工具有哪些? 在嵌入式系統開發的廣闊領域中,嵌入式工程師們憑借著一系列強大的工具,將創意與技術完美融合,打造出高效、可
    發表于 12-20 15:29

    名單公布!【書籍評測活動NO.42】 嵌入式Hypervisor:架構、原理與應用

    ,以及PRTOS社區的愿景等內容。 作者簡介 孫陳偉 某大廠資深編譯器團隊編譯器開發工程師,曾任華為技術軟件公司高級軟件工程師,梅特勒-托利多儀器儀表(中國)有限公司嵌入式軟件
    發表于 08-23 15:17

    嵌入式熱門領域有哪些?

    通過物聯網連接各種物理設備和傳感器,促使它們之間實現信息的交換和數據的共享。從智能家居到智能城市,物聯網的應用不斷擴展,為嵌入式系統工程師帶來了廣泛的就業機會和發展前景。 自動駕駛 自動駕駛技術作為
    發表于 07-16 09:23

    找STM32硬件開發兼職工程師

    上海做傳感器的公司,找STM32硬件開發兼職工程師,會硬件開發,嵌入式軟件開發,可項目外包。有意聯系:15900460170
    發表于 06-22 19:12

    嵌入式軟件工程師如何提升自己?

    嵌入式軟件工程師如何提升自己? 作為一名嵌入式軟件工程師,在這個充滿機遇和挑戰的領域里,如何提升自己顯得非常重要,它決定了你未來的發展方向和成就。接下來,我們一起探討一下。 1.奠定扎
    發表于 06-12 11:20

    嵌入式軟件工程師和硬件工程師的區別?

    嵌入式軟件工程師和硬件工程師的區別? 嵌入式軟件工程師 嵌入式軟件
    發表于 05-16 11:00

    建立更多的全局變量的時候,如何使得PROGRAM SIZE不增大呢?

    今天發現,建立更多的全局變量的時候,PROGRAM SIZE同時也增大了,如何使得PROGRAM SIZE不增大呢?我對全局變量的初始化無要求。
    發表于 05-15 06:30

    請問stm32程序中如何優化大量的編譯開關和全局變量

    剛接手一個程序,發現里面存在大量的編譯開關和定義了大量的全局變量,感覺這些顯得很是臃腫,有什么方法可以優化一下這些編譯開關和全局變量全局變量是一個個的標志位,有時候還會有條件嵌套。
    發表于 05-06 06:35

    你是不是也沒躲過這個坑?用了太多全局變量......

    全局變量太多有哪些弊端?該如何規避,以及如何管理全局變量等。一、全局變量太多有哪些弊端?真正做過項目的同學應該都能明白,項目中全局變量太多,會存在很多問題。這里給大家羅列一些太多
    的頭像 發表于 05-01 08:10 ?599次閱讀
    你是不是也沒躲過這個坑?用了太多<b class='flag-5'>全局變量</b>......

    全局變量太多有哪些弊端?

    隨著全局變量的增多,不同模塊的變量名可能會產生沖突或混淆,導致代碼難以理解和維護。同時,全局變量使得代碼中的依賴關系變得復雜,難以追蹤和理解。這增加了新開發人員的學習成本,也增加了修改和調試的難度。
    發表于 04-24 09:15 ?953次閱讀

    一款適合嵌入式工程師使用的在線工具

    一款適合嵌入式工程師使用的在線工具,工具有如下功能,如下圖所示: 1. 報文校驗功能,如下圖所示 2. UDP服務端測試工具:該UDP服務端工具可以理解為 “UDP服務端” 或者 “服務器
    發表于 04-09 22:20

    嵌入式工程師需要掌握哪些技術?

    嵌入式工程師需要掌握哪些技術? 嵌入式系統是當今科技領域中的重要組成部分,它們存在于我們生活的方方面面,從智能手機到汽車控制系統,從家電到醫療設備。因此,對于那些想要進入嵌入式行業的
    發表于 03-04 16:38

    嵌入式人工智能的就業方向有哪些?

    的發展方向有很多,門檻高低不一樣。下面給大家列舉一些相應崗位所需具備的技能: 一:嵌入式Linux,C語言開發工程師,Linux軟件開發工程師 LinuxC語言開發 LinuxC語言開發進階 Linux
    發表于 02-26 10:17
    长白| 百家乐论坛白菜| 百家乐官网套装| 东京太阳城王子酒店| 大亨百家乐官网娱乐城| 百家乐清零| 百家乐官网筹码订做| 百家乐英皇娱乐城| 百家乐官网信誉平台开户| 百家乐水晶筹码| 卓尼县| 百家乐怎么刷反水| 蓝山县| 百家乐发脾机| 百家乐官网稳一点的押法| 百家乐小九梭哈| 明升百家乐官网娱乐城| 888百家乐的玩法技巧和规则| 百家乐官网网上投注文章| 皇室百家乐的玩法技巧和规则| 百家乐官网网络赌博网址| 百家乐真人现场| 网络百家乐官网路子玩| 亿酷棋牌世界官方下载| 峨边| 自贡百家乐官网娱乐场开户注册| 大发888娱乐城范本| 银河百家乐官网的玩法技巧和规则 | 在线百家乐平台| 百家乐官网庄闲分布概率| 手机百家乐的玩法技巧和规则| 百家乐官网专业豪华版| 大发888大赢家| 百家乐游戏解密| 大发888手机游戏| 网上百家乐官网赌博经历| 九台市| 百家乐真人游戏| 海王星百家乐官网的玩法技巧和规则 | 南雄市| 百家乐发牌靴8|