嵌入式開發(fā):構(gòu)建自己的C/C++環(huán)境的5個理由
開發(fā)人員從頭開始創(chuàng)建他們所有的代碼,這是困難的,耗時的,痛苦的?,F(xiàn)在能夠更快地編寫他們的應(yīng)用程序代碼。雖然提供預(yù)配置的構(gòu)建環(huán)境很有幫助,但嵌入式開發(fā)團(tuán)隊(duì)?wèi)?yīng)該考慮構(gòu)建自己的C/C++環(huán)境,而不是使用微控制器供應(yīng)商提供的環(huán)境,這有五個原因。
原因1——了解應(yīng)用程序的基礎(chǔ)
許多微控制器供應(yīng)商在創(chuàng)建客戶可以用來開發(fā)嵌入式產(chǎn)品的開發(fā)平臺方面做得非常出色。畢竟,如果他們做所有產(chǎn)品通常做的工作,如編寫鏈接器腳本、啟動代碼、鏈接標(biāo)準(zhǔn)庫和初始化微控制器,他們的客戶會受益??蛻艨梢院雎赃@些標(biāo)準(zhǔn)代碼,專注于更快地編寫他們的應(yīng)用程序,這將使他們更快地進(jìn)入市場,并在總體上銷售更多的微控制器。
問題是,開發(fā)人員忽略了底層代碼,看不到他們的構(gòu)建環(huán)境是如何工作的,甚至看不到與項(xiàng)目有什么聯(lián)系!也許更糟的是,供應(yīng)商編寫的代碼被開發(fā)為通用代碼,是一種適合所有解決方案的通用代碼。這可能不適用于任何一個特定的應(yīng)用程序。
創(chuàng)建你的構(gòu)建環(huán)境,在其中編寫你的鏈接器、啟動代碼、設(shè)置C/C++運(yùn)行時并創(chuàng)建makefiles,確保你了解你的應(yīng)用程序和環(huán)境的基礎(chǔ)。你知道有哪些部分和為什么。你知道你用什么匯編和C/C++標(biāo)志來構(gòu)建你的應(yīng)用程序,為什么。事實(shí)上,你甚至將了解C/C++運(yùn)行時環(huán)境,以及它如何影響代碼大小和執(zhí)行效率。如果你只是使用提供給你的東西或者回顧那里的東西,你會錯過重要的細(xì)節(jié)。
原因2——代碼優(yōu)化
默認(rèn)情況下,許多提供給開發(fā)人員的構(gòu)建環(huán)境可能是為嵌入式開發(fā)而配置的,但它們通常被配置為通用解決方案。該解決方案旨在滿足普通開發(fā)人員或公司的需求。不幸的是,結(jié)果往往是代碼中充斥著不必要的庫函數(shù),甚至代碼閱讀起來很復(fù)雜。比如看很多廠商提供的代碼。它們將包括來自C庫的標(biāo)準(zhǔn)系統(tǒng)調(diào)用,如printf、_exit、_kill、_read、_write等。使用這些系統(tǒng)調(diào)用的最小實(shí)現(xiàn)可以很容易地增加10千字節(jié)以上的代碼空間。對于許多使用大型32位處理器的尖端團(tuán)隊(duì)來說,這可能不是什么大事,但是對于嵌入式行業(yè)的其他人來說,這可能決定一個應(yīng)用程序的成敗!(從閃爍LED的平臺代碼創(chuàng)建一個基線項(xiàng)目,并發(fā)現(xiàn)它編譯了超過60千字節(jié)的代碼,這并不罕見!)。
原因3——更容易與敏捷和開發(fā)運(yùn)維流程集成
使用敏捷和DevOps是一個必要的過程,在許多嵌入式團(tuán)隊(duì)中越來越流行。在嵌入式社區(qū)中逐漸流行的敏捷方法包括測試驅(qū)動開發(fā)(TDD)。DevOps包含的不僅僅是持續(xù)集成和持續(xù)部署(CI/CD ),但這也是大多數(shù)團(tuán)隊(duì)關(guān)注的焦點(diǎn)。
使用微控制器供應(yīng)商提供的環(huán)境,利用TDD和CI/CD可能會更加麻煩和復(fù)雜。這是因?yàn)樗麄儧]有考慮你交付產(chǎn)品需要遵循的流程,只考慮你需要讓他們的處理器啟動并運(yùn)行。結(jié)果可能是一個與你的其他過程和需求不太協(xié)調(diào)的構(gòu)建環(huán)境。很多嵌入式開發(fā)團(tuán)隊(duì)努力通過變通方法,有時甚至是雙重環(huán)境來使所有這些過程和工具很好地結(jié)合在一起。

原因4——靈活性
有時候,構(gòu)建系統(tǒng)中有太多的小鉤子,以至于定制它要花兩倍于從頭開始的時間。例如,你可能想禁用一個庫,卻發(fā)現(xiàn)這樣做會導(dǎo)致幾十個編譯錯誤,迫使你花費(fèi)數(shù)小時來解決這些錯誤。
一個有用的靈活性方法是IDE靈活性。不同的開發(fā)人員對于他們想要使用的ide和文本編輯器有不同的偏好。例如,人們可能喜歡Sublime文本、另一個Visual Studio代碼或另一個供應(yīng)商提供的IDE。開發(fā)人員經(jīng)常爭論,試圖讓他們喜歡的工具成為團(tuán)隊(duì)的選擇。如果你構(gòu)建你的環(huán)境,每個人都可以使用他們喜歡的工具,這有助于提高嵌入式開發(fā)人員的效率。
原因5——構(gòu)建系統(tǒng)定制
我認(rèn)為構(gòu)建自己的C/C++環(huán)境的最大原因是能夠定制它。沒有兩個項(xiàng)目是相同的。存在一些共性,但是你可以通過定制構(gòu)建系統(tǒng)來極大地提高代碼大小和性能。有時候直到你從零開始,你才明白需要什么樣的定制。有許多定制需要考慮,例如:
使用Docker容器設(shè)置的環(huán)境
程序集級別標(biāo)志
C/C++標(biāo)志
庫集成
如何處理啟動代碼
向量表集成
TDD集成
CI/CD集成
代碼分析
等等
定制C/C++環(huán)境和構(gòu)建系統(tǒng)的能力會極大地影響項(xiàng)目的成功。
結(jié)論
為你的嵌入式應(yīng)用程序創(chuàng)建一個定制的構(gòu)建系統(tǒng)有很多好處。起初,進(jìn)行這樣的努力似乎很復(fù)雜,充滿了潛在的問題。幸運(yùn)的是,這個過程遠(yuǎn)沒有你想象的那么復(fù)雜。幾乎可以在不到一周的時間內(nèi)為任何嵌入式處理器研究和實(shí)現(xiàn)定制構(gòu)建系統(tǒng)。此外,構(gòu)建系統(tǒng)是一個經(jīng)過高度調(diào)整和優(yōu)化系統(tǒng),它可以幫助嵌入式開發(fā)人員為應(yīng)用程序和構(gòu)建過程奠定基礎(chǔ),從而為產(chǎn)品提供多年的支持。