女人自慰AV免费观看内涵网,日韩国产剧情在线观看网址,神马电影网特片网,最新一级电影欧美,在线观看亚洲欧美日韩,黄色视频在线播放免费观看,ABO涨奶期羡澄,第一导航fulione,美女主播操b

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

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

3天內不再提示

C語言開發單片機為啥都是全局變量形式?

GReq_mcu168 ? 來源:玩轉單片機 ? 2020-08-05 10:35 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

前言

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

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非常不友好。

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

    關注

    5149

    文章

    19655

    瀏覽量

    317295
  • C語言
    +關注

    關注

    180

    文章

    7632

    瀏覽量

    141585
  • 代碼
    +關注

    關注

    30

    文章

    4900

    瀏覽量

    70669

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

文章出處:【微信號:mcu168,微信公眾號:硬件攻城獅】歡迎添加關注!文章轉載請注明出處。

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

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

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

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

    單片機C語言實例(350+例)

    350+單片機C語言實例! 純分享帖,需要者可點擊附件免費獲取完整資料~~~【免責聲明】本文系網絡轉載,版權歸原作者所有。本文所用視頻、圖片、文字如涉及作品版權問題,請第一時間告知,刪除內容!
    發表于 05-22 21:47

    單片機c語言編程實例大全

    單片機c語言編程實例大全_18
    發表于 04-30 16:11 ?3次下載

    新概念51單片機C語言教程入門、提高、開發、拓展全攻略

    1.6 單片機C51基礎知識介紹 1.6.1 利用C語言開發單片機的優點 1.6.2 C51
    發表于 04-15 13:57

    static在單片機中的妙用

    了呢?一起來看下吧一、修飾變量第一個作用修飾變量,變量又分為局部變量全局變量,但它們都存在內存的靜態區。 對于靜態區,堆棧等等這些區域的概
    發表于 04-02 13:50 ?1次下載

    單片機C語言編程寶典大全,初學必備【強推下載!】

    資料介紹:包含 1. 51單片機入門教程 2. 初學者適用:單片機C語言實例100例(代碼及釋義) 3. 51單片機
    發表于 03-14 11:03

    Deepseek上單片機?RT-Thread上跑通大語言模型

    前言單片機也能聊天?RT-Thread上跑通大語言模型在RT-Thread論壇上忽然看到了單片機和大模型對話的文章,想著春節期間看到大語言模型的熱度持續攀升,恰巧手頭有塊RA8D1Vi
    的頭像 發表于 02-07 18:59 ?1430次閱讀
    Deepseek上<b class='flag-5'>單片機</b>?RT-Thread上跑通大<b class='flag-5'>語言</b>模型

    單片機Debug工具性能對比 單片機調試常用命令

    。以下是對單片機調試工具性能的簡要對比以及一些常用的調試命令。 單片機Debug工具性能對比 Keil uVision 性能 :Keil uVision 是一款功能強大的集成開發環境(IDE),支持多種
    的頭像 發表于 12-19 09:56 ?1409次閱讀

    51單片機中為什么很少出現printf的身影

    流,他能跟外部交互的,只有串口。 51單片機用的開發語言C語言,雖然跟標準C有點區別,但是 p
    的頭像 發表于 12-03 10:46 ?1373次閱讀
    51<b class='flag-5'>單片機</b>中為什么很少出現printf的身影

    單片機編程語言有哪些選擇

    常用的單片機編程語言,以及它們的特點和應用場景: 1. C語言 特點 :C語言是一種通用的編程
    的頭像 發表于 11-01 14:13 ?2406次閱讀

    單片機STM32可以用Python寫嗎?可以的開發板有哪些?

    可以使用Python進行開發,并分析市面上支持Python開發單片機開發板。首先,傳統的STM32單片機主要使用
    的頭像 發表于 09-05 08:00 ?7557次閱讀
    <b class='flag-5'>單片機</b>STM32可以用Python寫嗎?可以的<b class='flag-5'>開發</b>板有哪些?

    單片機hex文件反編譯成C語言的過程

    使用C語言編寫,然后編譯成機器碼并燒錄到單片機的存儲器中。 Hex文件是一種用于存儲單片機程序的文件格式,它包含了程序的機器碼和一些附加信息,如起始地址、結束地址等。Hex文件通常用于
    的頭像 發表于 09-02 10:49 ?6078次閱讀

    keil可以讀出單片機的程序嗎

    表述存在一定的誤解,因為Keil主要是用于編寫、編譯和調試單片機程序的工具,而不是直接從單片機中讀取已編程代碼的工具。 一、Keil的主要功能 編程開發 :Keil允許用戶使用C
    的頭像 發表于 09-02 10:32 ?2123次閱讀

    linux開發板和單片機開發的區別

    、PIC等,處理能力和內存容量相對較低。 操作系統 Linux開發板通常使用Linux操作系統,具有豐富的軟件資源和開發工具。單片機開發則通常使用嵌入式操作系統或無操作系統,軟件資源和
    的頭像 發表于 08-30 15:30 ?2143次閱讀

    新手如何學單片機

    學習電子基礎知識:了解電壓、電流、電阻等基本概念,以及它們在電路中的作用。 學習計算機體系結構:理解計算機的基本組成和工作原理,包括CPU、內存、輸入輸出設備等。 學習編程語言單片機編程通常使用C
    的頭像 發表于 08-28 09:18 ?1151次閱讀
    新手如何學<b class='flag-5'>單片機</b>