色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

電子發燒友App

硬聲App

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

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

3天內不再提示
電子發燒友網>電子資料下載>嵌入式開發>C語言開發單片機為啥都是全局變量形式?

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

2021-02-04 | pdf | 98.75KB | 次下載 | 2積分

資料介紹

前言

全局變量簡直就是嵌入式系統的戈蘭高地。沖突最激烈的雙方是:
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非常不友好。

下載該資料的人也在下載 下載該資料的人還在閱讀
更多 >

評論

查看更多

下載排行

本周

  1. 1TC358743XBG評估板參考手冊
  2. 1.36 MB  |  330次下載  |  免費
  3. 2開關電源基礎知識
  4. 5.73 MB  |  6次下載  |  免費
  5. 3100W短波放大電路圖
  6. 0.05 MB  |  4次下載  |  3 積分
  7. 4嵌入式linux-聊天程序設計
  8. 0.60 MB  |  3次下載  |  免費
  9. 5基于FPGA的光纖通信系統的設計與實現
  10. 0.61 MB  |  2次下載  |  免費
  11. 6基于FPGA的C8051F單片機開發板設計
  12. 0.70 MB  |  2次下載  |  免費
  13. 751單片機窗簾控制器仿真程序
  14. 1.93 MB  |  2次下載  |  免費
  15. 8基于51單片機的RGB調色燈程序仿真
  16. 0.86 MB  |  2次下載  |  免費

本月

  1. 1OrCAD10.5下載OrCAD10.5中文版軟件
  2. 0.00 MB  |  234315次下載  |  免費
  3. 2555集成電路應用800例(新編版)
  4. 0.00 MB  |  33564次下載  |  免費
  5. 3接口電路圖大全
  6. 未知  |  30323次下載  |  免費
  7. 4開關電源設計實例指南
  8. 未知  |  21548次下載  |  免費
  9. 5電氣工程師手冊免費下載(新編第二版pdf電子書)
  10. 0.00 MB  |  15349次下載  |  免費
  11. 6數字電路基礎pdf(下載)
  12. 未知  |  13750次下載  |  免費
  13. 7電子制作實例集錦 下載
  14. 未知  |  8113次下載  |  免費
  15. 8《LED驅動電路設計》 溫德爾著
  16. 0.00 MB  |  6653次下載  |  免費

總榜

  1. 1matlab軟件下載入口
  2. 未知  |  935054次下載  |  免費
  3. 2protel99se軟件下載(可英文版轉中文版)
  4. 78.1 MB  |  537796次下載  |  免費
  5. 3MATLAB 7.1 下載 (含軟件介紹)
  6. 未知  |  420026次下載  |  免費
  7. 4OrCAD10.5下載OrCAD10.5中文版軟件
  8. 0.00 MB  |  234315次下載  |  免費
  9. 5Altium DXP2002下載入口
  10. 未知  |  233046次下載  |  免費
  11. 6電路仿真軟件multisim 10.0免費下載
  12. 340992  |  191185次下載  |  免費
  13. 7十天學會AVR單片機與C語言視頻教程 下載
  14. 158M  |  183278次下載  |  免費
  15. 8proe5.0野火版下載(中文版免費下載)
  16. 未知  |  138040次下載  |  免費
主站蜘蛛池模板: 沦为公交两奶头春药高潮迭起| 亚洲精品卡2卡3卡4卡5卡区| 99热久久这里只有精品视频| 久久精品无码一区二区日韩av| 午夜欧洲亚洲AV永久无码精品| 俄罗斯人与动ZOOZ| 欧美性猛交XXXX乱大交极品| 538在线播放| 久久伊人网站| 孕妇泬出白浆18P| 好男人好资源在线观看| 亚洲AV一宅男色影视| 国产91综合| 受被攻做到腿发颤高h文| 第七色 夜夜撸| 三级黄色a| 高H短篇辣肉纯肉| 色欲AV亚洲永久无码精品| 哺乳期妇女挤奶水36d| 热久久2018亚洲欧美| SM双性精跪趴灌憋尿调教H| 欧美日韩亚洲成人| china中国gay偷拍| 破女在线观看视频| 被男按摩师添的好爽在线直播| 欧美四虎精品二区免费| caoporn 超碰免费视频| 青青娱乐网| 国产av久久免费观看| 天天看学生视频| 国语自产一区第二页| 亚洲色视在线观看视频| 久久久97丨国产人妻熟女| 最新国产在线视频| 嫩草国产精品99国产精品| jizz中国女人| 色多多污版app下载网站| 国产精品色午夜视频免费看| 亚洲 天堂 国产在线播放| 寂寞夜晚视频高清观看免费| 在线 国产 欧美 专区|