• <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <span id="wslfv"></span>
    <tbody id="wslfv"><pre id="wslfv"></pre></tbody>
    <th id="wslfv"><track id="wslfv"><rt id="wslfv"></rt></track></th>

    <li id="wslfv"><acronym id="wslfv"></acronym></li>
    更多課程 選擇中心

    嵌入式培訓
    達內IT學院

    400-111-8989

    關于嵌入式(ARM)知識通俗化的理解

    • 發布:嵌入式培訓
    • 來源:嵌入式問答
    • 時間:2017-11-07 10:37

    關于ARM THUMB兩個狀態,我自己的見解就是就像現在的電腦,新買的CPU都是64位的,但是也可以裝成32位的系統xp或win7,這就是CPU工作的32位狀態。而如果裝了64位的win7那CPU就工作在64位了,那么是ARM狀態就對應上邊例子中的64位的,THUMB對應32位的,這應該是一個過度。我問過u-boot Linux都是一直工作在ARM狀態,一直都沒有一點THUMB狀態,對于那種剛開始學這個,沒做過項目的老師們一再講這個就現在想想沒有多大的意義了。對于PC機來說現在是32位到64位的過渡,但是對于已經是后32位的時代的,還要講16的東西,就該往前看看多說說64位的事了。

    關于匯編學習的程序,先說它在哪里用到了吧。在u-boot 或者Linux的起始時用的是匯編,至于為什么這樣,可以想想飛機的原理,飛機就是要擺脫輪子的慢,但是在飛機的起飛階段,飛機還是要用輪子的。這是為什么,因為輪子可以有它的優點。就想上邊兩種情況要用匯編一樣,這樣作用就明了了。真正造車的才會深入了解輪子的各種信息(這種就是指芯片公司的AP工程師)。嵌入式學習者就像說相聲的各個方面都要學習,京劇,二人轉。不過那都叫學唱,同樣道理對于嵌入式學習者來說,匯編的作用也就是這了。

    關于匯編中的標號就是一個內存地址的別名:

    如下圖的START其實就是30000000,但是你在跳轉的時候還是記憶START是更容易的。

    關于DCD和SPACE:

    [html] view plain copy

    1. StackUsr    DCD UsrStackSpace

    2.

    3.                 AREA    MyStacks,DATA,NOINIT,ALIGN = 2

    4. UsrStackSpace   SPACE   USR_STACK_LEGTH*4

    以上代碼等價于C語言中的:

    [html] view plain copy

    1. int *p = malloc(USR_STACK_LEGTH*4)

    我個人認為匯編因為中不能將這樣寫,所以就找了UsrStackSpace來作中間量,它只是打醬油的,沒有在歷史上起到重要作用。

    [html] view plain copy

    1. StackUsr    DCD  SPACE  USR_STACK_LEGTH*4

    也可以這么說,如果代碼僅有上邊的,那么:StackUsr DCD UsrStackSpace會顯得多余了,因為好正力就可以看出直接中UsrStackSpace就可以了。

    但是由于UsrStackSpace代表這一塊內存的首地址了,我要是以后經常訪問尾地址了怎么辦,再來一個玩意來存著尾地址。就用StackUsr了。讓StackUsr干活還要把它伺候好了,它本身也要占個位置,這就用到了DCD了,DCD給StackUsr找個位置,然后就開始給它任務了。如果把UsrStackSpace交給它,那么StackUsr 和UsrStackSpace就一個樣了;如果把UsrStackSpace + (USR_STACK_LEGTH - 1)*4 給它,那么StackUsr指向了這個塊的末地址。至于誰會這要求,那就是堆棧了!

    關于堆棧,就是棧。我有我的看法,這就好比一個好師傅在拆一個錄音機,螺絲大小不一。那么拆的時候一般會將它們按照順序放著,這么做的目的就是為了一會兒修好了之后再裝的時候能一個一個對應著裝上去。慢慢引入解釋就是說這個師傅把拆下的螺絲都放到了棧中,就是一個司空見慣的一個東西起了一個新名。師傅是靠各個螺絲的物理位置不同來安裝的,但是對于計算機來說它是“平面”的,只有先后順序沒有物理位置,只能靠拆下每個螺絲的順序來區別了,相當于畫一個表,有1 2 3..順序,然后將螺絲一一放入對應位置,裝的時候就反序一個裝上去。這樣就不會有錯了。說這么一大堆就是一個怕搞錯了。

    計算機什么時候這樣做呢,就是用C語言編程在調用子函數時候,這個時候就相當于這個師傅要拆錄音機了。子函數調用完后,就要回來繼續運行主函數,這個時候就相當于師傅要裝上錄音機了。這時候就要看看在調用子函數時有沒有做好善后工作了,有沒有把主函數的狀態保存下來,回來的時候好還原出來當初的狀態。放狀態的容器就是“棧”,為也還原時不出錯,要狀態所涉及的所有東西一一按照順序放到這個容器里,到時候還原的時候再按時一定的順序取出來,如果兩個順序都定死了,以后就不會出錯了。關于制定這兩個順序大家想到了,規定一個這個容器只有一個口.....(關于這個順序暫時還沒有想到通俗的例子)

    預約申請免費試聽課

    填寫下面表單即可預約申請免費試聽!怕錢不夠?可就業掙錢后再付學費! 怕學不會?助教全程陪讀,隨時解惑!擔心就業?一地學習,可全國推薦就業!

    上一篇:做嵌入式驅動的你一定要挺住!
    下一篇:在arm-linux上編譯helloworld時候的抓狂經歷

    關于嵌入式C編程的經驗細談

    如何學習嵌入式開發?

    嵌入式系統基礎知識匯總

    嵌入式系統知識介紹

    • 掃碼領取資料

      回復關鍵字:視頻資料

      免費領取 達內課程視頻學習資料

    • 視頻學習QQ群

      添加QQ群:1143617948

      免費領取達內課程視頻學習資料

    Copyright ? 2021 Tedu.cn All Rights Reserved 京ICP備08000853號-56 京公網安備 11010802029508號 達內時代科技集團有限公司 版權所有

    選擇城市和中心
    黑龍江省

    吉林省

    河北省

    湖南省

    貴州省

    云南省

    廣西省

    海南省

    欧美一级高清片,一级欧美免费大片视频,欧美三级在线电影免费 百度 好搜 搜狗
    <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <蜘蛛词>| <文本链> <文本链> <文本链> <文本链> <文本链> <文本链>