91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

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

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

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

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

電子設(shè)計(jì) ? 來(lái)源:mcu中文技術(shù)社區(qū) ? 作者:mcu中文技術(shù)社區(qū) ? 2021-01-15 14:47 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

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

1. 做控制的工程師;
2. 做非嵌入式的軟件工程師。

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

他們普遍的理解就是“變量都寫成全局該有多方便”。我之前面試過(guò)一個(gè)非常有名的做控制實(shí)驗(yàn)室里出來(lái)的PhD/Master,前前后后陸續(xù)有快十個(gè)人。面試問(wèn)題是用C寫PID。到后面的幾位面試的時(shí)候我都覺(jué)得沒(méi)有看的意義了,因?yàn)槿紝懙氖峭粋€(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寫的,寫完了還會(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文件里,必須寫在.c文件里以確保別的文件沒(méi)法訪問(wèn)它們。

別的文件真要訪問(wèn)怎么辦?那就給每一個(gè)變量寫get/set函數(shù)啊!問(wèn)題是靜態(tài)變量寫在.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)榭刂扑教摺?/p>

全局變量一定是要用的,管理它們也很重要。一些基本的代碼規(guī)則:

① 如果只是文件內(nèi)調(diào)用,全局變量只能寫在這個(gè).c文件里,不要寫進(jìn).h文件。
② 如果有文件外調(diào)用,全局變量要寫在.h文件里。
③ .h里面的全局變量全局可讀,但是只有本文件組可以寫。別的文件要寫請(qǐng)調(diào)用set函數(shù)。
④ 所有的全局變量無(wú)論在.h還是.c里面都要包成同名struct。哪怕只有一個(gè)變量也要寫進(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è)文件的。
⑤ 不要寫函數(shù)內(nèi)的static變量。函數(shù)內(nèi)的static變量在實(shí)際的項(xiàng)目中幾乎就是bug生成器,沒(méi)法簡(jiǎn)單的reset。而且對(duì)unit test非常不友好。
編輯:hfy

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(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)投訴
  • 嵌入式系統(tǒng)
    +關(guān)注

    關(guān)注

    41

    文章

    3747

    瀏覽量

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

    關(guān)注

    8

    文章

    243

    瀏覽量

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

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    什么是BSP工程師

    一、嵌入式系統(tǒng) 要明白什么是嵌入式軟件工程師,我們先從嵌入式系統(tǒng)(嵌入式設(shè)備)說(shuō)起。維基百科上對(duì)嵌入式
    發(fā)表于 01-13 06:54

    系統(tǒng)嵌入式的學(xué)習(xí)路線

    比較簡(jiǎn)單,硬件工程師工作的含金量主要體現(xiàn)在產(chǎn)品的可靠性和穩(wěn)定性設(shè)計(jì)、以及電磁兼容設(shè)計(jì),這才是硬件設(shè)計(jì)工程師的含金量所在。 一個(gè)資深嵌入式硬件工程師
    發(fā)表于 12-16 07:49

    如何搞定嵌入式 C語(yǔ)言中的全局變量問(wèn)題?

    大家好,今天分享一篇關(guān)于嵌入式C編程中全局變量問(wèn)題的文章。希望對(duì)大家有所啟發(fā)。 嵌入式特別是單片機(jī)os-less的程序,最易范的錯(cuò)誤是全局變量滿天飛。 這個(gè)現(xiàn)象在早期匯編轉(zhuǎn)型過(guò)來(lái)的程
    發(fā)表于 12-16 06:54

    C語(yǔ)言全局變量重點(diǎn)使用

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

    請(qǐng)問(wèn)C語(yǔ)言開發(fā)單片機(jī)為什么大多數(shù)都采用全局變量形式?

    C語(yǔ)言代碼,大多數(shù)都是使用全局變量,也就是用很多函數(shù)來(lái)操作這些變量,比如函數(shù)1把一個(gè)全局變量經(jīng)過(guò)一系列復(fù)雜的算法計(jì)算后改變了這個(gè)全局變量的值,然后函數(shù)2再拿著函數(shù)1處理過(guò)的這個(gè)
    發(fā)表于 12-04 07:47

    嵌入式就業(yè)形勢(shì)好不好?

    投身該領(lǐng)域的工程師提供參考。 一、行業(yè)熱鬧背后的就業(yè)現(xiàn)實(shí) 近年來(lái),隨著物聯(lián)網(wǎng)、人工智能等技術(shù)的興起,嵌入式行業(yè)迎來(lái)了前所未有的發(fā)展機(jī)遇。崗位需求看似繁多,但企業(yè)對(duì)于人才的要求卻日益嚴(yán)苛。 過(guò)去,掌握
    發(fā)表于 11-10 11:48

    為什么嵌入式驅(qū)動(dòng)開發(fā)工程師可以拿高薪

    嵌入式驅(qū)動(dòng)開發(fā)工程師能拿到高薪,核心在于這個(gè)崗位剛好踩中了行業(yè)剛需、技術(shù)壁壘高、人才缺口大這三個(gè)關(guān)鍵節(jié)點(diǎn),而且這種需求還在隨著智能硬件的普及持續(xù)擴(kuò)大。首先得明確,嵌入式驅(qū)動(dòng)是硬件和軟件之間
    的頭像 發(fā)表于 10-30 16:37 ?764次閱讀
    為什么<b class='flag-5'>嵌入式</b>驅(qū)動(dòng)開發(fā)<b class='flag-5'>工程師</b>可以拿高薪

    硬件工程師嵌入式軟件哪個(gè)更有前途?

    不少人琢磨硬件工程師嵌入式軟件到底哪個(gè)更有前途,其實(shí)從實(shí)際職場(chǎng)情況和成長(zhǎng)路子看,差別還挺清楚的。先說(shuō)說(shuō)天花板這事,一般來(lái)講,硬件工程師的職業(yè)天花板還真比嵌入式軟件低 —— 硬件崗位大
    的頭像 發(fā)表于 09-10 10:43 ?1122次閱讀

    招鑲?cè)?b class='flag-5'>式工程師1個(gè),硬件工程師一個(gè),

    東莞市研生科技有限公司是一家藍(lán)牙方案公司,主營(yíng)藍(lán)牙方案的設(shè)計(jì)開發(fā),產(chǎn)品包括藍(lán)牙BLE/4G透?jìng)?AI智能體方案開發(fā),因公司發(fā)展需要需對(duì)外招聘嵌入式軟件開發(fā)工程師,對(duì)藍(lán)牙音頻/BLE以及智能IC讀卡器有三年實(shí)操經(jīng)驗(yàn),能單獨(dú)完成項(xiàng)目的軟件開發(fā),男女不限,投簡(jiǎn)歷郵箱:65905
    發(fā)表于 08-29 02:14

    電子發(fā)燒友工程師看!電子領(lǐng)域評(píng)職稱,技術(shù)之路更扎實(shí)

    電子發(fā)燒友的各位工程師、硬件開發(fā)者們,咱們每天在平臺(tái)查芯片手冊(cè)、討論電路設(shè)計(jì)難題、分享嵌入式項(xiàng)目經(jīng)驗(yàn),從調(diào)試 PCB 板到開發(fā) AIoT 系統(tǒng),靠的都是過(guò)硬的技術(shù)實(shí)力 —— 而電子領(lǐng)域的職稱評(píng)審
    發(fā)表于 08-20 13:53

    嵌入式工程師為什么要學(xué)QT?

    Qt對(duì)嵌入式工程師來(lái)說(shuō),真的很重要嗎? Qt是一個(gè)跨平臺(tái)的C++應(yīng)用程序開發(fā)框架,非常適合嵌入式系統(tǒng)的開發(fā),Qt在嵌入式開發(fā)中具有很重要的作用。 在項(xiàng)目實(shí)踐中可以看出,Qt在工業(yè)自動(dòng)化
    發(fā)表于 08-14 15:15

    嵌入式工程師的進(jìn)階之路

    嵌入式工程師的進(jìn)階之路 (一)初級(jí)工程師(0-3 年)核心技能: 單片機(jī)開發(fā):STM32F103系列 GPIO/USART/SPI 外設(shè)驅(qū)動(dòng),能完成 LED 呼吸燈、按鍵檢測(cè)、串口通信等基礎(chǔ)項(xiàng)目
    發(fā)表于 08-13 11:08

    盤點(diǎn)嵌入式就業(yè)所需要的技能有哪些?

    基礎(chǔ),能夠進(jìn)行高性能計(jì)算和數(shù)據(jù)處理。 - 了解自動(dòng)駕駛技術(shù)的基本原理,如傳感器融合、路徑規(guī)劃等。 - 具備良好的溝通能力和團(tuán)隊(duì)合作精神,能夠與不同領(lǐng)域的工程師協(xié)作。 2.智能手機(jī)行業(yè): - 熟悉嵌入式編程
    發(fā)表于 08-11 15:43

    如何成為一名嵌入式軟件工程師

    如何成為一名嵌入式軟件工程師? 01明確崗位的角色與定位 嵌入式軟件工程師主要負(fù)責(zé)開發(fā)運(yùn)行在特定硬件平臺(tái)上的軟件,這些軟件通常與硬件緊密集成,以實(shí)現(xiàn)特定的功能。 不僅需要精通編程語(yǔ)言
    發(fā)表于 04-15 14:37

    嵌入式系統(tǒng)開發(fā)圣經(jīng)【干貨】

    內(nèi)容包括:嵌入式系統(tǒng)的介紹、嵌入式SoC硬件系統(tǒng)概論、嵌入式系統(tǒng)軟件開發(fā)。適用于產(chǎn)品主管、系統(tǒng)設(shè)計(jì)分析人員及欲進(jìn)入該領(lǐng)域的工程師。本資料詳細(xì)的理論講解,廣泛深入地分析相關(guān)的
    發(fā)表于 03-12 13:58