淺談嵌入式系統(tǒng)開發(fā)的相關(guān)思維、方法、技巧
時(shí)間:2021-08-19 15:27:38
手機(jī)看文章
掃描二維碼
隨時(shí)隨地手機(jī)看文章
[導(dǎo)讀]關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:技術(shù)讓夢(mèng)想更偉大作者:李肖遙開頭的話嵌入式開發(fā)是一個(gè)比較苦、容易背鍋、可能仍然需要996而且拿錢較少,但也有些許樂趣的活,我一直稱之為跳坑里了。如果你在里面深耕,那終究會(huì)成為大佬,軟硬結(jié)合的高手;如果你剛?cè)肟?,我可能勸你轉(zhuǎn),但是可能你自己還有點(diǎn)...
關(guān)注、星標(biāo)公眾號(hào),直達(dá)精彩內(nèi)容來源:技術(shù)讓夢(mèng)想更偉大作者:李肖遙
大白話說嵌入式安全
我們看到圖中,我們用圓圈來表示一個(gè)狀態(tài),圖中最左的箭頭表示從別的什么地方“躍遷”到了當(dāng)前狀態(tài);下方的箭頭表示從當(dāng)前狀態(tài)離開;右上角從當(dāng)前狀態(tài)“扇出”后又“返回到”當(dāng)前狀態(tài)。這里需要很多轉(zhuǎn)變,而好的架構(gòu)很關(guān)鍵。在之前我分享過很多狀態(tài)機(jī)的知識(shí),可以說萬物皆可狀態(tài)機(jī),而嵌入式軟件開發(fā)時(shí)總繞不開與實(shí)時(shí)性(Real Time)相關(guān)的話題,大部分人對(duì)實(shí)時(shí)性的認(rèn)知過程通常會(huì)分以下幾個(gè)階段:。
實(shí)時(shí)性迷思
變量的二三事C語言相關(guān)
與其他嵌入式公眾號(hào)不同,『裸機(jī)思維』的文章彼此互為補(bǔ)充,知識(shí)體系較為完整;通常會(huì)圍繞某一專題深入淺出地連載多篇文章——最終對(duì)知識(shí)點(diǎn)實(shí)現(xiàn)完整和全面的覆蓋。???????????????? ?END ?????????????????關(guān)注我的微信公眾號(hào),回復(fù)“加群”按規(guī)則加入技術(shù)交流群。 歡迎關(guān)注我的視頻號(hào):點(diǎn)擊“閱讀原文”查看更多分享,歡迎點(diǎn)分享、收藏、點(diǎn)贊、在看。
開頭的話
嵌入式開發(fā)是一個(gè)比較苦、容易背鍋、可能仍然需要996而且拿錢較少,但也有些許樂趣的活,我一直稱之為跳坑里了。如果你在里面深耕,那終究會(huì)成為大佬,軟硬結(jié)合的高手;如果你剛?cè)肟樱铱赡軇衲戕D(zhuǎn),但是可能你自己還有點(diǎn)舍不得。總之,確定了在這一行,靠的就是思維與技巧結(jié)合,注重實(shí)踐方法,方能在其中有一席之地。從裸機(jī)思維開始
嵌入式系統(tǒng)是一個(gè)面向應(yīng)用高度裁減的專用計(jì)算機(jī)系統(tǒng),嵌入式軟硬件也可以這樣定義- 軟件:人們借助某種語言,“嘗試”固化下來的,自己的思維
- 硬件:業(yè)已固化下來的邏輯,可以穩(wěn)定的提供確定的服務(wù)和功能
大白話說嵌入式安全
注重方法
思維的設(shè)計(jì)有很多輔助工具,如大家熟知的流程圖、UML圖、數(shù)據(jù)流圖等等。然而,具體代碼往往并不是一個(gè)好的輔助工具。進(jìn)行思維設(shè)計(jì)的開發(fā)人員,叫做Programmer,也就是所謂的碼農(nóng),而要做一個(gè)好的碼農(nóng),真的需要注意方法,比如狀態(tài)機(jī)編程,怎么理解狀態(tài)?如何才算一個(gè)狀態(tài)。- v1:“實(shí)時(shí)性” = “越快越好”
- Lv2:“實(shí)時(shí)性” = RTOS,認(rèn)為選一個(gè)好的RTOS,或者會(huì)用RTOS就可以保證實(shí)時(shí)性;
- Lv3:“實(shí)時(shí)性” = 任務(wù)拆分;
- Lv4:開始思考實(shí)時(shí)性模型的特點(diǎn);
- Lv5:到了這個(gè)階段,不僅腦洞大開、戰(zhàn)斗力驚人
實(shí)時(shí)性迷思
注重技巧
為大家庖丁解牛、由淺入深,就要不懼怕優(yōu)化,不要把編譯器的行為看作是玄學(xué),深入底層,才能把編譯器、內(nèi)存、寄存器、語言本質(zhì)理解的透徹。比如位域和volatile,前者用于將指定類型的整形變量按照我們的意愿切分;后者用于告訴編譯器不允許對(duì)被修飾的變量做優(yōu)化。如果我們對(duì)編譯器的優(yōu)化等級(jí)忽略的話,很難定義到bug,或者當(dāng)我們對(duì)內(nèi)存塊理解的不深入不透徹,關(guān)于內(nèi)存的七七八八就會(huì)莫名其妙的找上門來。volatile在嵌入式系統(tǒng)中的應(yīng)用范圍非常廣泛,假設(shè)某32位外設(shè)寄存器的地址為XXXXX_IO_REG_BASE_ADDRESS
,則對(duì)應(yīng)的寄存器可以定義為如下的形式:#defineXXXXX_IO_REG???(?*((volatile?uint32_t*)XXXX_IO_REG_BASE_ADDRESS)?)
而應(yīng)用中很多針對(duì)外設(shè)寄存器的連續(xù)操作都可以通過優(yōu)化來大幅度提高效率,在保證程序邏輯正確的情況下,應(yīng)該盡可能減少volatile的使用,或者是限制其使用的范圍,那么你知道為什么嗎?這就是編譯器、語言本身、變量的一些特別之處,推薦幾個(gè)專輯,編譯器、變量、C語言相關(guān)的真知灼見,必定讓我們打開語言的大門。編譯器玄學(xué)變量的二三事C語言相關(guān)