在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地

MCU開(kāi)發(fā)加油站 ? 來(lái)源:MCU開(kāi)發(fā)加油站 ? 作者:MCU開(kāi)發(fā)加油站 ? 2021-01-18 16:26 ? 次閱讀

前言

全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是:

做控制的工程師

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

做控制的工程師特點(diǎn)

他們普遍的理解就是“變量都寫(xiě)成全局該有多方便”。我之前面試過(guò)一個(gè)非常有名的做控制實(shí)驗(yàn)室里出來(lái)的PhD/Master,前前后后陸續(xù)有快十個(gè)人。面試問(wèn)題是用C寫(xiě)PID。到后面的幾位面試的時(shí)候我都覺(jué)得沒(méi)有看的意義了,因?yàn)槿紝?xiě)的是同一個(gè)風(fēng)格。

大概就是這樣的:

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;}

代碼的特點(diǎn)就是所有的變量一定定義在函數(shù)外面。問(wèn)他們?yōu)槭裁矗卮鹗恰叭肿兞糠奖阏{(diào)試”。事實(shí)上在學(xué)校里做搞自動(dòng)控制的人最重要的根本就是控制的結(jié)果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類的和他們就不在同一個(gè)世界。

進(jìn)了公司有些人代碼質(zhì)量會(huì)變好,但有的還是會(huì)延續(xù)之前的習(xí)慣。前公司代碼庫(kù)里面凡是看不懂的代碼一律都是那一兩個(gè)Control Engineer寫(xiě)的,寫(xiě)完了還會(huì)用自己的名字給函數(shù)命名的那種。

要成為一個(gè)資深的嵌入式工程師相當(dāng)難,一方面要有非常扎實(shí)的理論知識(shí),同時(shí)也要有相當(dāng)?shù)哪欠N大型的、高頻CPU、多層PCB板的設(shè)計(jì)經(jīng)驗(yàn)。嵌入式硬件工程師要學(xué)的課程主要有模擬電路設(shè)計(jì)數(shù)字電路設(shè)計(jì)、電磁波理論等。熟悉常用的放大電路、濾波電路、電源電路設(shè)計(jì)和分析。

做非嵌入式的軟件工程師特點(diǎn)

代碼的特點(diǎn)就是所有的靜態(tài)變量都不可以定義在.h文件里,必須寫(xiě)在.c文件里以確保別的文件沒(méi)法訪問(wèn)它們。別的文件真要訪問(wèn)怎么辦?那就給每一個(gè)變量寫(xiě)get/set函數(shù)啊!問(wèn)題是靜態(tài)變量寫(xiě)在.c文件里編譯器是沒(méi)法優(yōu)化get/set的。

結(jié)果就大面積的變量訪問(wèn)要花幾倍的CPU時(shí)間去做get/set的函數(shù)調(diào)用。嵌入式項(xiàng)目很多情況下對(duì)硬件的壓榨是很極端的,CPU利用率90%都不算什么,頂?shù)?7%都是有的。(注意下這些項(xiàng)目是實(shí)時(shí)性要求很高的,晚一個(gè)毫秒算不完都不行。不是跑在電腦上鼠標(biāo)卡一卡也無(wú)所謂的。)然后為了封裝性,在代碼里面塞這么多get/set嗎?

總結(jié)

總的來(lái)說(shuō)嵌入式軟件里大部分的代碼都是中斷驅(qū)動(dòng)的,天生就有很多變量是沒(méi)法使用參數(shù)傳遞的。全局變量的存在是因?yàn)檎x站在這邊。但是嵌入式軟件遠(yuǎn)遠(yuǎn)沒(méi)有特殊到不需要按照正常軟件工程方法去管理的地步。要真有人認(rèn)為“嵌入式軟件只要能工作就成,代碼丑一點(diǎn)無(wú)所謂的”純粹是軟件工程水平不行,不是因?yàn)榭刂扑教摺H肿兞恳欢ㄊ且玫模芾硭鼈円埠苤匾?/p>

一些基本的代碼規(guī)則:

如果只是文件內(nèi)調(diào)用,全局變量只能寫(xiě)在這個(gè).c文件里,不要寫(xiě)進(jìn).h文件。

如果有文件外調(diào)用,全局變量要寫(xiě)在.h文件里。

.h里面的全局變量全局可讀,但是只有本文件組可以寫(xiě)。別的文件要寫(xiě)請(qǐng)調(diào)用set函數(shù)。

所有的全局變量無(wú)論在.h還是.c里面都要包成同名struct。哪怕只有一個(gè)變量也要寫(xiě)進(jìn)struct里面。比如PID.c里面有一個(gè)pid_S,PID.h里面有個(gè)PID_S。這樣其他人不僅可以立即識(shí)別出一個(gè)變量是project內(nèi)global/文件內(nèi)static/函數(shù)內(nèi)local,同時(shí)還能輕松追溯到這個(gè)函數(shù)是屬于哪個(gè)文件的。

不要寫(xiě)函數(shù)內(nèi)的static變量。函數(shù)內(nèi)的static變量在實(shí)際的項(xiàng)目中幾乎就是bug生成器,沒(méi)法簡(jiǎn)單的reset。而且對(duì)unit test非常不友好。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6044

    文章

    44632

    瀏覽量

    639332
  • C語(yǔ)言
    +關(guān)注

    關(guān)注

    180

    文章

    7616

    瀏覽量

    137986
  • 代碼
    +關(guān)注

    關(guān)注

    30

    文章

    4841

    瀏覽量

    69189
  • 變量
    +關(guān)注

    關(guān)注

    0

    文章

    613

    瀏覽量

    28499
  • 軟件工程師
    +關(guān)注

    關(guān)注

    8

    文章

    218

    瀏覽量

    21177

原文標(biāo)題:C語(yǔ)言開(kāi)發(fā)單片機(jī)為啥都是全局變量形式?

文章出處:【微信號(hào):mcugeek,微信公眾號(hào):MCU開(kāi)發(fā)加油站】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    新手怎么學(xué)嵌入式?

    。但面對(duì)這個(gè)復(fù)雜的領(lǐng)域,很多人可能會(huì)感到迷茫,不知從何處入手。別擔(dān)心,本文將為你提供一些入門(mén)學(xué)習(xí)嵌入式技術(shù)的建議。 新手入門(mén)學(xué)習(xí)嵌入式技術(shù)的途徑 1. 了解基礎(chǔ)知識(shí) 首先,要對(duì)嵌入式系統(tǒng)
    發(fā)表于 12-12 10:51

    嵌入式系統(tǒng)開(kāi)發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)開(kāi)發(fā)常見(jiàn)問(wèn)題解決

    嵌入式系統(tǒng)開(kāi)發(fā)與硬件的關(guān)系 嵌入式系統(tǒng)是專為特定應(yīng)用設(shè)計(jì)的計(jì)算機(jī)系統(tǒng),它們通常嵌入在所控制的設(shè)備
    的頭像 發(fā)表于 12-09 09:38 ?469次閱讀

    嵌入式系統(tǒng)的原理和應(yīng)用

    嵌入式系統(tǒng)是一種專用的計(jì)算機(jī)系統(tǒng),其設(shè)計(jì)初衷是執(zhí)行特定任務(wù),而非作為通用計(jì)算機(jī)使用。這類系統(tǒng)通常作為更大系統(tǒng)的一部分,起到控制、監(jiān)控或輔助的
    的頭像 發(fā)表于 10-05 17:03 ?1291次閱讀

    嵌入式系統(tǒng)怎么學(xué)?

    嵌入式系統(tǒng)怎么學(xué)? 隨著物聯(lián)網(wǎng)、智能制造等新技術(shù)的興起,嵌入式系統(tǒng)的應(yīng)用范圍更加廣泛。包括但不限于工業(yè)控制、汽車(chē)電子、醫(yī)療設(shè)備、智能家居、智慧城市、消費(fèi)電子、通信設(shè)備等。學(xué)習(xí)
    發(fā)表于 07-02 10:10

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

    今天發(fā)現(xiàn),建立更多的全局變量的時(shí)候,PROGRAM SIZE同時(shí)也增大了,如何使得PROGRAM SIZE不增大呢?我對(duì)全局變量的初始化無(wú)要求。
    發(fā)表于 05-15 06:30

    使用IAR定義全局變量出現(xiàn)兩個(gè)同名不同地址變量是什么原因?qū)е碌模?/a>

    使用IAR定義全局變量出現(xiàn)兩個(gè)同名不同地址變量 systickCount和systickFlag都在另一個(gè)c文件里定義的,假設(shè)a.c,然后在a.h里聲明為外部變量,main.c
    發(fā)表于 05-10 06:09

    請(qǐng)問(wèn)ucos中全局變量OSTime最終能累加到多少呢?

    在ucos-ii 中全局變量 OSTime 總是++請(qǐng)問(wèn)最終能累加到多少呢? 若加到65530后 會(huì)自動(dòng)歸零嗎?
    發(fā)表于 05-09 06:22

    請(qǐng)問(wèn)stm32程序中如何優(yōu)化大量的編譯開(kāi)關(guān)和全局變量

    剛接手一個(gè)程序,發(fā)現(xiàn)里面存在大量的編譯開(kāi)關(guān)和定義了大量的全局變量,感覺(jué)這些顯得很是臃腫,有什么方法可以優(yōu)化一下這些編譯開(kāi)關(guān)和全局變量全局變量是一個(gè)個(gè)的標(biāo)志位,有時(shí)候還會(huì)有條件嵌套。
    發(fā)表于 05-06 06:35

    你是不是也沒(méi)躲過(guò)這個(gè)坑?用了太多全局變量......

    全局變量太多有哪些弊端?該如何規(guī)避,以及如何管理全局變量等。一、全局變量太多有哪些弊端?真正做過(guò)項(xiàng)目的同學(xué)應(yīng)該都能明白,項(xiàng)目中全局變量太多,會(huì)存在很多問(wèn)題。這里給大家羅列一些太多
    的頭像 發(fā)表于 05-01 08:10 ?626次閱讀
    你是不是也沒(méi)躲過(guò)這個(gè)坑?用了太多<b class='flag-5'>全局變量</b>......

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

    隨著全局變量的增多,不同模塊的變量名可能會(huì)產(chǎn)生沖突或混淆,導(dǎo)致代碼難以理解和維護(hù)。同時(shí),全局變量使得代碼中的依賴關(guān)系變得復(fù)雜,難以追蹤和理解。這增加了新開(kāi)發(fā)人員的學(xué)習(xí)成本,也增加了修改和調(diào)試的難度。
    發(fā)表于 04-24 09:15 ?968次閱讀

    嵌入式fpga是什么意思

    嵌入式FPGA是指將FPGA技術(shù)集成到嵌入式系統(tǒng)中的一種解決方案。嵌入式系統(tǒng)是一種為特定應(yīng)用而設(shè)計(jì)的計(jì)算機(jī)
    的頭像 發(fā)表于 03-15 14:29 ?1448次閱讀

    fpga是嵌入式

    FPGA(現(xiàn)場(chǎng)可編程門(mén)陣列)不是嵌入式系統(tǒng),但FPGA在嵌入式系統(tǒng)中有著重要的應(yīng)用。
    的頭像 發(fā)表于 03-14 17:19 ?2607次閱讀

    請(qǐng)問(wèn)ModusToolbox下針對(duì)CYW20719B2編程,能否指定全局變量地址?

    請(qǐng)問(wèn)ModusToolbox 下針對(duì)CYW20719B2編程,能否指定全局變量地址? 謝謝
    發(fā)表于 03-01 11:13

    嵌入式系統(tǒng)發(fā)展前景?

    嵌入式系統(tǒng)發(fā)展前景? 嵌入式系統(tǒng),從定義上來(lái)說(shuō),是一種專用的計(jì)算機(jī)系統(tǒng),它被設(shè)計(jì)用來(lái)控制、監(jiān)視或者幫助操作一些設(shè)備、裝置或機(jī)器。在過(guò)去的幾年
    發(fā)表于 02-22 14:09

    請(qǐng)問(wèn)core2里的程序可以直接使用core1里的全局變量嗎?

    如題,core2里的程序可以直接使用core1里的全局變量嗎?就是不同核之前可以直接通信嗎?是否還需要配置一些東西才能實(shí)現(xiàn)核間通信?
    發(fā)表于 02-20 08:05
    主站蜘蛛池模板: 日韩美女三级 | 电影一区二区三区 | 欧美 亚洲 一区 | 久久精品视频9 | 天天综合日日噜噜噜 | 女人成午夜大片7777在线 | 美女张开腿让男生桶出水 | 黄色日本视频网站 | 免费黄色福利视频 | 国产在线综合网 | 亚洲视频三区 | 天天夜夜狠狠一区二区三区 | 久久在线精品 | 久久99久久精品免费思思6 | 手机在线电影你懂的 | 精品久久久久久久免费加勒比 | 欧美 亚洲 一区 | 久草毛片 | 激情网址在线观看 | 在线天堂bt种子资源 | 四虎影院在线免费观看视频 | 免费a网 | 国产91久久最新观看地址 | 四虎影院免费网址 | 亚洲成a人片在线观看www | 亚洲光棍天堂 | 色之综合天天综合色天天棕色 | 天天综合网天天做天天受 | 欧美另类bbw | 6080伦理久久亚洲精品 | 老师您的兔子好软水好多动漫视频 | 天堂电影在线观看免费入口 | 午夜免费视频福利集合100 | 夜夜欢视频 | 热re66久久精品国产99热 | 午夜无遮挡怕怕怕免费视频 | 黄 色 免费网 站 成 人 | 久久青 | 色图综合网| 手机亚洲第一页 | 一区二区在线看 |