中文字幕 另类精品,亚洲欧美一区二区蜜桃,日本在线精品视频免费,孩交精品乱子片免费

<sup id="3hn2b"></sup>

    1. <sub id="3hn2b"><ol id="3hn2b"></ol></sub><legend id="3hn2b"></legend>

      1. <xmp id="3hn2b"></xmp>

      2. 新聞中心

        EEPW首頁(yè) > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > STM8單片機(jī)啟動(dòng)流程徹底探究--基于IAR開(kāi)發(fā)環(huán)境

        STM8單片機(jī)啟動(dòng)流程徹底探究--基于IAR開(kāi)發(fā)環(huán)境

        作者: 時(shí)間:2017-01-16 來(lái)源:網(wǎng)絡(luò) 收藏

          初學(xué)會(huì)發(fā)現(xiàn),官方的固件庫(kù)并沒(méi)有提供一個(gè).s文件的啟動(dòng)代碼,那么她是如何啟動(dòng)然后跳轉(zhuǎn)到main函數(shù)執(zhí)行的呢

        本文引用地址:http://www.antipu.com.cn/article/201701/342940.htm

          首先,我們根據(jù)ARM的只是可以推測(cè),也是通過(guò)復(fù)位向量來(lái)啟動(dòng)的,假設(shè)流程在復(fù)位響亮中完成的,應(yīng)該首先去復(fù)位向量表中間去找,看復(fù)位向量又要看存儲(chǔ)器映射,一環(huán)扣一環(huán)

          STM8使用的是統(tǒng)一編址技術(shù),以下是存儲(chǔ)器編址圖


          我們可以看到,最大取指空間是0XFFFFFF,也就是說(shuō),是16M,這是因?yàn)镻C的特性決定的


          在程序內(nèi)部,它是將16M分為了256個(gè)節(jié)(sector),每個(gè)節(jié)的大小為64K,64*256= 16384K=16M,由圖我們可以看到,在SECTOR0區(qū)間里面似乎還有些玄妙,之后的就是普通空間了


          這就是sector的分區(qū),分區(qū)如下

          0-17ff 是RAM空間,而且是最大的ram空間,STM8的ram一般都小于6K由此可見(jiàn),在這個(gè)ram空間里面就包含有我們的堆棧區(qū)域.但是不一定是6K,(3G尋址的win7也沒(méi)見(jiàn)多少人真的裝3G啊,裝2G內(nèi)存條的多的是)

          1800-3fff是保留區(qū)域

          4000-47ff是最大2K的數(shù)據(jù)保存區(qū)(相當(dāng)于EEPROM)

          4800-487f是選項(xiàng)字節(jié)空間,用于設(shè)置一些配置信息

          4900-4fff是保留空間

          5000-57ff IO以及外設(shè)的寄存器空間(統(tǒng)一編址技術(shù))

          5800-5fff 保留區(qū)域

          6000-67ff 2K的啟動(dòng)代碼rom

          6800-7eff 保留區(qū)間

          7f00-7fff 系統(tǒng)寄存器的地址

          8000-8080 中斷向量

          在往下才是flash空間,也就是說(shuō),我們的代碼存放的區(qū)域就是在0x8000開(kāi)始的

          在上面那張圖我們可以看見(jiàn)復(fù)位向量



          那是不是說(shuō)芯片啟動(dòng)立馬就到了復(fù)位向量0x8000的位置了呢?

          其實(shí)不然,查看手冊(cè)我們發(fā)現(xiàn)這一段話



          也就是說(shuō),系統(tǒng)啟動(dòng)的時(shí)候不在復(fù)位向量的地方,那這個(gè)6000區(qū)域存放的是啥



          原來(lái)是啟動(dòng)代碼,還是數(shù)據(jù)手冊(cè)



          鑒于此,我們可以很肯定地說(shuō),系統(tǒng)啟動(dòng)的過(guò)程是

          復(fù)位-->跳轉(zhuǎn)到boot ram--->boot ram進(jìn)行某種初始化-->處理用戶有可能的程序更新-->跳轉(zhuǎn)到0x8000-->復(fù)位向量執(zhí)行

          既然復(fù)位向量在8000,那么代碼中應(yīng)該有指示



          我們?cè)?a class="contentlabel" href="http://www.antipu.com.cn/news/listbylabel/label/IAR">IAR里面看到他對(duì)中斷的處理依靠這個(gè)宏定義,實(shí)際上他就是定義了兩個(gè)重要的宏定義

          INTERRUPT_HANDLER_TRAP(a)和INTERRUPT_HANDLER(a, b )

          我們展開(kāi)第一個(gè)

          得到

          INTERRUPT_HANDLER_TRAP(a) ==

          _Pragma(vector = 1) __interruptvoid (a) (void)

          這里面涉及到兩個(gè)編譯器關(guān)鍵字分別是Pragma和interrupt



          Pragma是一個(gè)預(yù)處理指令,它包含不同的語(yǔ)句的時(shí)候有不同的含義,我們現(xiàn)在包含的是vector,那就和vector有關(guān)系了



          什么意思呢,我們得看具體語(yǔ)法



          也就是說(shuō),相當(dāng)于在中斷向量表標(biāo)號(hào)中寫(xiě)入指定的函數(shù)

          _Pragma(vector = 1) __interruptvoid (a) (void)

          相當(dāng)于在中斷向量1的位置寫(xiě)入a這個(gè)函數(shù)的指針

          INTERRUPT_HANDLER( a, b )展開(kāi)來(lái)

          _Pragma(vector = b+2) __interruptvoid (a) (void)

          就是在中斷向量表B+2的位置寫(xiě)入a這個(gè)函數(shù)的指針,(因?yàn)?和1被reset和trap占用了)

          現(xiàn)在我們來(lái)看it.c中的語(yǔ)句就很清楚了



          第一個(gè)函數(shù)是trap指針,我們需要實(shí)現(xiàn)TRAP_IRQHandler這個(gè)函數(shù)就能關(guān)聯(lián)上對(duì)應(yīng)的中斷向量

          第二個(gè)函數(shù)同樣我們只要實(shí)現(xiàn)TLI_IRQHandler這個(gè)函數(shù)就OK了

          函數(shù)的視線需要遵循

          __interrupt void (a) (void)的模式,否則宏定義報(bào)錯(cuò)

          可是trap有了,reset去哪了呢?這是的一個(gè)手段,他把RESET隱藏了,我們來(lái)看這個(gè)圖片



          相當(dāng)于,在RESET處默認(rèn)存放了一個(gè)中斷向量指針,指針的指向是__iar_program_start函數(shù),這個(gè)函數(shù)我們無(wú)法找到,屬于iar內(nèi)置函數(shù),但是我們可以看到,調(diào)試就可以了

          打開(kāi)仿真



          在reset位置放置了一個(gè)0x80c3地址(0x82屬于固定填充,24位地址,32位高八位不用),80c3位置代碼如下



          由此可見(jiàn)我們的推論是正確的

          先設(shè)置堆棧基地址0x17ff然后經(jīng)歷lowinit和datainit之后跳轉(zhuǎn)到main函數(shù)執(zhí)行

          所以,IAR下編譯STM8啟動(dòng)的過(guò)程總結(jié)如下

          復(fù)位-->跳轉(zhuǎn)到boot ram--->boot ram進(jìn)行某種初始化-->處理用戶有可能的程序更新-->跳轉(zhuǎn)到0x8000-->復(fù)位向量執(zhí)行à跳轉(zhuǎn)到__iar_program_start-->跳轉(zhuǎn)到main函數(shù)地址



        關(guān)鍵詞: STM8 IAR

        評(píng)論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉