www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁(yè) > 嵌入式 > 嵌入式微處理器
[導(dǎo)讀]01前言全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是:1.做控制的工程師;2.做非嵌入式的軟件工程師。02做控制的工程師特點(diǎn)他們普遍的理解就是“變量都寫(xiě)成全局該有多方便”。我之前面試過(guò)一個(gè)非常有名的做控制實(shí)驗(yàn)室里出來(lái)的PhD/Master,前前后后陸續(xù)有快十個(gè)人。面試...



01

前言


全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是:1. 做控制的工程師;2. 做非嵌入式的軟件工程師。
02

做控制的工程師特點(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é)果,而不是代碼本身。代碼只要能工作就行。變量名污染,低耦合之類(lèi)的和他們就不在同一個(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ì)和分析。

03

做非嵌入式的軟件工程師特點(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嗎?

04

總結(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)榭刂扑教摺?/span>
全局變量一定是要用的,管理它們也很重要。一些基本的代碼規(guī)則:
  1. 如果只是文件內(nèi)調(diào)用,全局變量只能寫(xiě)在這個(gè).c文件里,不要寫(xiě)進(jìn).h文件。
  2. 如果有文件外調(diào)用,全局變量要寫(xiě)在.h文件里。
  3. .h里面的全局變量全局可讀,但是只有本文件組可以寫(xiě)。別的文件要寫(xiě)請(qǐng)調(diào)用set函數(shù)。
  4. 所有的全局變量無(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è)文件的。
  5. 不要寫(xiě)函數(shù)內(nèi)的static變量。函數(shù)內(nèi)的static變量在實(shí)際的項(xiàng)目中幾乎就是bug生成器,沒(méi)法簡(jiǎn)單的reset。而且對(duì)unit test非常不友好。

END
來(lái)源:網(wǎng)絡(luò)版權(quán)歸原作者所有,如有侵權(quán),請(qǐng)聯(lián)系刪除。
嵌入式ARM

掃描二維碼,關(guān)注更多精彩內(nèi)容

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

在C/C++多文件編程中,靜態(tài)變量(static)與全局變量的作用域規(guī)則看似簡(jiǎn)單,實(shí)則暗藏諸多陷阱。開(kāi)發(fā)者若未能準(zhǔn)確理解其鏈接屬性與生命周期,極易引發(fā)難以調(diào)試的內(nèi)存錯(cuò)誤、競(jìng)態(tài)條件以及維護(hù)災(zāi)難。本文將深入剖析這兩類(lèi)變量的作...

關(guān)鍵字: 靜態(tài)變量 全局變量 C語(yǔ)言

在實(shí)時(shí)操作系統(tǒng)(RTOS)的設(shè)計(jì)中,任務(wù)間通信是一個(gè)至關(guān)重要的環(huán)節(jié)。它直接關(guān)系到系統(tǒng)的實(shí)時(shí)性、穩(wěn)定性和可維護(hù)性。全局變量作為一種簡(jiǎn)單的數(shù)據(jù)共享方式,在RTOS任務(wù)間通信中確實(shí)可以被使用,但通常并不推薦作為主要的通信手段。...

關(guān)鍵字: RTOS任務(wù) 全局變量

工作也有些年頭了,從一位技術(shù)新人成長(zhǎng)到現(xiàn)在自詡小牛級(jí)別的人物,少不了要自己尋找資料閱讀。論壇上、書(shū)店里、雜志上......要嘛是些菜鳥(niǎo)淺薄的自炫處女貼,要嘛是高屋建瓴云里來(lái)霧里去的概念文,好不容易遇到個(gè)實(shí)踐型高手寫(xiě)的文章...

關(guān)鍵字: 全局變量

關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來(lái)源:SedateFire整理:技術(shù)讓夢(mèng)想更偉大?|?李肖遙工作也有些年頭了,從一位技術(shù)新人成長(zhǎng)到現(xiàn)在自詡小牛級(jí)別的人物,少不了要自己尋找資料閱讀。論壇上、書(shū)店里、雜志上......要嘛是些...

關(guān)鍵字: 全局變量 編程 嵌入式C

SystemVerilog提供四種不同的實(shí)例之間的通信或連接方式:端口、句柄、全局變量、直接層次引用。?端口是靜態(tài)實(shí)例世界的成員之間的連接,如module和interface實(shí)例。因此,它們可能不會(huì)在動(dòng)態(tài)實(shí)例世界類(lèi)中使用...

關(guān)鍵字: 全局變量 端口

隊(duì)列(queue)是一種只能在一端插入元素、在另一端刪除元素的數(shù)據(jù)結(jié)構(gòu),遵循先入先出(FIFO)的規(guī)則。

關(guān)鍵字: RTOS 全局變量 通信

前篇 《由static來(lái)談?wù)勀K封裝》 基本實(shí)現(xiàn)了對(duì)外隱藏屬性,隱藏局部模塊函數(shù),開(kāi)放接口的功能。對(duì)于這個(gè)話(huà)題還有些點(diǎn)沒(méi)有深入探討:為什么要這樣做?以及這樣做的好處是什么?

關(guān)鍵字: 嵌入式 全局變量

01 前言 全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是: 1. 做控制的工程師; 2. 做非嵌入式的軟件工程師。 02 做控制的工程師特點(diǎn) 他們普遍的理解就是“變量都寫(xiě)成全局該有多方便”。我之前面試過(guò)一個(gè)非...

關(guān)鍵字: C語(yǔ)言 全局變量

點(diǎn)擊上方藍(lán)字關(guān)注我哦~ 01 前言 全局變量簡(jiǎn)直就是嵌入式系統(tǒng)的戈蘭高地。沖突最激烈的雙方是1. 做控制的工程師 2. 做非嵌入式的軟件工程師。 02 做控制的工程師特點(diǎn) 他們普遍的理解就是“變量都寫(xiě)成全局該有多方便”。...

關(guān)鍵字: C語(yǔ)言 全局變量
關(guān)閉