国产精品久久久aaaa,日日干夜夜操天天插,亚洲乱熟女香蕉一区二区三区少妇,99精品国产高清一区二区三区,国产成人精品一区二区色戒,久久久国产精品成人免费,亚洲精品毛片久久久久,99久久婷婷国产综合精品电影,国产一区二区三区任你鲁

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

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

3天內不再提示

全局變量簡直就是嵌入式系統的戈蘭高地

MCU開發加油站 ? 來源:MCU開發加油站 ? 作者:MCU開發加油站 ? 2021-01-18 16:26 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

做控制的工程師

做非嵌入式的軟件工程師。

做控制的工程師特點

他們普遍的理解就是“變量都寫成全局該有多方便”。我之前面試過一個非常有名的做控制實驗室里出來的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非常不友好。

責任編輯:lq

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

    關注

    6076

    文章

    45495

    瀏覽量

    670426
  • C語言
    +關注

    關注

    183

    文章

    7644

    瀏覽量

    145605
  • 代碼
    +關注

    關注

    30

    文章

    4968

    瀏覽量

    73985
  • 變量
    +關注

    關注

    0

    文章

    616

    瀏覽量

    29506
  • 軟件工程師
    +關注

    關注

    8

    文章

    243

    瀏覽量

    21645

原文標題:C語言開發單片機為啥都是全局變量形式?

文章出處:【微信號:mcugeek,微信公眾號:MCU開發加油站】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    嵌入式系統安全設計原則

    隨著物聯網、工業控制和智能設備的普及,嵌入式系統的安全問題越來越突出。一個小小的漏洞,就可能導致設備被入侵、數據泄露,甚至對人身安全產生威脅。因此,從設計階段開始就考慮安全,是每一個嵌入式開發者必須
    的頭像 發表于 01-19 09:06 ?336次閱讀
    <b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>安全設計原則

    什么是嵌入式應用開發?

    概述 所謂的嵌入式應用開發就是嵌入式操作系統下進行開發、軟硬件綜合開發 ?嵌入式應用開發?是指在嵌入
    發表于 01-12 16:13

    嵌入式系統應用熱門的原因主要有幾個方面

    的內核?簡直沒有可比性。2. 專用性強。嵌入式系統的個性化很強,其中的軟件系統和硬件的結合非常緊密,一般要針對硬件進行系統的移植,即使在同
    發表于 01-08 06:37

    嵌入式C語言中各變量存儲位置

    的存儲是放在一塊的,初始化的全局變量和靜態變量在一塊區域, 未初始化的全局變量和未初始化的靜態變量在相鄰的另一塊區域。 4、文字常量區 —常量字符串
    發表于 12-25 07:54

    如何搞定嵌入式 C語言中的全局變量問題?

    大家好,今天分享一篇關于嵌入式C編程中全局變量問題的文章。希望對大家有所啟發。 嵌入式特別是單片機os-less的程序,最易范的錯誤是全局變量滿天飛。 這個現象在早期匯編轉型過來的程
    發表于 12-16 06:54

    C語言全局變量重點使用

    全局變量絕不會位于寄存器中。使用指針或者函數調用,可以直接修改全局變量的值。 因此,編譯器不能將全局變量的值緩存在寄存器中,但這在使用全局變量時便需要額外的 (常常是不必要的)讀取和存
    發表于 12-12 06:58

    什么是嵌入式操作系統

    要理解嵌入式操作系統(Embedded Operating System,簡稱 RTOS/EOS),我們可以從本質定義→核心區別→實際作用→典型特征→嵌入式開發場景適配,五個維度來拆解, 一
    發表于 12-09 10:33

    請問C語言開發單片機為什么大多數都采用全局變量的形式?

    C語言代碼,大多數都是使用全局變量,也就是用很多函數來操作這些變量,比如函數1把一個全局變量經過一系列復雜的算法計算后改變了這個全局變量的值
    發表于 12-04 07:47

    常用變量的介紹

    extern:用在全局變量上表示該變量在其他文件中已經定義;用在函數上作用同全局變量; static:用在全局變量上,和非靜態全局變量相比,
    發表于 11-21 07:05

    嵌入式系統的定義和應用領域

    嵌入式系統,簡而言之,就是一種專為特定設備或裝置設計的計算機系統。它們通常配備一個嵌入式處理器,其控制程序被存儲在ROM中。這些
    發表于 11-17 06:49

    嵌入式實時操作系統的特點

    實時嵌入式操作系統(Real-Time Embedded Operating System)是專門設計用于嵌入式系統的實時操作系統
    發表于 11-13 06:30

    請問Modus Toolbox下針對CYW20719B2編程,能否指定全局變量地址?

    請問Modus Toolbox 下針對CYW20719B2編程,能否指定全局變量地址?
    發表于 07-08 07:20

    運行在嵌入式系統上的emApps

    在當今快節奏的嵌入式系統世界中,靈活性和適應性是嵌入式系統實現的關鍵。SEGGER推出了其最新創新:Embedded apps(emApps)應用,類似于手機上的應用程序,可以運行在
    的頭像 發表于 06-18 09:53 ?874次閱讀
    運行在<b class='flag-5'>嵌入式</b><b class='flag-5'>系統</b>上的emApps

    Python在嵌入式系統中的應用場景

    你想把你的職業生涯提升到一個新的水平?Python在嵌入式系統中正在成為一股不可缺少的新力量。盡管傳統上嵌入式開發更多地依賴于C和C++語言,Python的優勢在于其簡潔的語法、豐富的庫和快速的開發周期,這使得它在某些
    的頭像 發表于 03-19 14:10 ?1499次閱讀

    嵌入式系統開發圣經【干貨】

    內容包括:嵌入式系統的介紹、嵌入式SoC硬件系統概論、嵌入式系統軟件開發。適用于產品主管、
    發表于 03-12 13:58