
來源:技術讓夢想更偉大
作者:李肖遙
嵌入式開發是一個比較苦、容易背鍋、可能仍然需要996而且拿錢較少,但也有些許樂趣的活,我一直稱之為跳坑里了。如果你在里面深耕,那終究會成為大佬,軟硬結合的高手;如果你剛入坑,我可能勸你轉,但是可能你自己還有點舍不得。
總之,確定了在這一行,靠的就是思維與技巧結合,注重實踐方法,方能在其中有一席之地。
嵌入式系統是一個面向應用高度裁減的專用計算機系統,嵌入式軟硬件也可以這樣定義
軟件:人們借助某種語言,“嘗試”固化下來的,自己的思維
硬件:業已固化下來的邏輯,可以穩定的提供確定的服務和功能
軟件的本質是設計人員的思維,因而程序設計人員最重要的是自己根據任務的需求想通所有的邏輯,并借助一定的語言作為工具,把自己的思維"固化"下來,而硬件,本質上一個固化下來的邏輯
這個是行業內在心底里約定俗成已經默默在做的事情,下面關于嵌入式的思維培養可以參考以下幾個專輯
什么是嵌入式系統?
真刀真槍模塊化—— 層次框架初探
大白話說嵌入式安全
思維的設計有很多輔助工具,如大家熟知的流程圖、UML圖、數據流圖等等。然而,具體代碼往往并不是一個好的輔助工具。
進行思維設計的開發人員,叫做Programmer,也就是所謂的碼農,而要做一個好的碼農,真的需要注意方法,比如狀態機編程,怎么理解狀態?如何才算一個狀態。

我們看到圖中,我們用圓圈來表示一個狀態,圖中最左的箭頭表示從別的什么地方“躍遷”到了當前狀態;下方的箭頭表示從當前狀態離開;右上角從當前狀態“扇出”后又“返回到”當前狀態。這里需要很多轉變,而好的架構很關鍵。
在之前我分享過很多狀態機的知識,可以說萬物皆可狀態機,而嵌入式軟件開發時總繞不開與實時性(Real Time)相關的話題,大部分人對實時性的認知過程通常會分以下幾個階段:。
v1:“實時性” = “越快越好”
Lv2:“實時性” = RTOS,認為選一個好的RTOS,或者會用RTOS就可以保證實時性;
Lv3:“實時性” = 任務拆分;
Lv4:開始思考實時性模型的特點;
Lv5:到了這個階段,不僅腦洞大開、戰斗力驚人
下面的兩個專輯中關于此點可謂詳細明白,深入理解,才能在注重方法的前提下,成為一個高級碼農。
從零開始的狀態機漫談
實時性迷思
為大家庖丁解牛、由淺入深,就要不懼怕優化,不要把編譯器的行為看作是玄學,深入底層,才能把編譯器、內存、寄存器、語言本質理解的透徹。
比如位域和volatile,前者用于將指定類型的整形變量按照我們的意愿切分;后者用于告訴編譯器不允許對被修飾的變量做優化。如果我們對編譯器的優化等級忽略的話,很難定義到bug,或者當我們對內存塊理解的不深入不透徹,關于內存的七七八八就會莫名其妙的找上門來。
volatile在嵌入式系統中的應用范圍非常廣泛,假設某32位外設寄存器的地址為XXXXX_IO_REG_BASE_ADDRESS,則對應的寄存器可以定義為如下的形式:
#defineXXXXX_IO_REG ( *((volatile uint32_t*)XXXX_IO_REG_BASE_ADDRESS) )
而應用中很多針對外設寄存器的連續操作都可以通過優化來大幅度提高效率,在保證程序邏輯正確的情況下,應該盡可能減少volatile的使用,或者是限制其使用的范圍,那么你知道為什么嗎?
這就是編譯器、語言本身、變量的一些特別之處,推薦幾個專輯,編譯器、變量、C語言相關的真知灼見,必定讓我們打開語言的大門。
編譯器玄學
變量的二三事
C語言相關
嵌入式開發所涉及到的思維訓練、C語言以及編譯器相關的關鍵知識、裸機環境下的開發者模型等等,可以幫助我們深入理解底層原理知識,以不變應萬變,如果想在其中有交流、有興趣可以關注下面的公眾號。
與其他嵌入式公眾號不同,『裸機思維』的文章彼此互為補充,知識體系較為完整;通常會圍繞某一專題深入淺出地連載多篇文章——最終對知識點實現完整和全面的覆蓋。
???????????????? END ???????????????? 關注我的微信公眾號,回復“加群”按規則加入技術交流群。

點擊“閱讀原文”查看更多分享,歡迎點分享、收藏、點贊、在看。