痞子衡嵌入式:超級下載算法(RT-UFL)開發筆記(1) - 執行在不一樣CM內核下


  你們好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給你們介紹的是超級下載算法開發筆記(1)之執行在不一樣CM內核下html

  文接上篇 《RT-UFL - 一個適用全平臺i.MXRT的超級下載算法設計》,痞子衡開源的這個項目已經正式啓動了。痞子衡說過會記錄 RT-UFL 項目開發過程全部疑難點及其解決方法,和你們分享下載算法設計背後的奧祕。算法

  本篇是開發筆記第一篇,我們重點聊聊這個項目的立身之本,即如何作到一個.FLM(其實就是最終的可執行機器碼)能在全部i.MXRT芯片下均能正常運行。微信

1、從嵌入式程序角度看i.MXRT家族差別

  由於超級下載算法要運行於全部i.MXRT型號下,首先咱們得知道i.MXRT家族一共有哪些型號、這些不一樣型號間差別是什麼,哪些差別是影響超級下載算法的主要因素。架構

  下表是當前i.MXRT家族已面世的所有9款型號(注:部分型號下不止一款芯片,但僅是內部外設數量差異):函數

  雖然從芯片自己角度去細看差別會比較多,但咱們能夠從一個嵌入式程序最根本的三大要素(指令、外設操做、連接空間)來逐必定向分析:工具

  從上表咱們能夠看出i.MXRT都是基於ARM Cortex-M內核的,這實際上是整個項目立項最重要的基礎,它們的指令集一脈相承。不過雖然都是Cortex-M內核,可是涉及到三個內核處理器版本(M四、M七、M33),所以設計超級下載算法時第一要考慮的就是處理器版本差別。.net

  再從外設角度來看,超級下載算法代碼可能涉及操做芯片內部的Clock(時鐘)、IOMUXC(引腳)、FlexSPI(Flash控制器)等外設,這些外設會有差別,但並不重要,咱們能夠爲不一樣i.MXRT型號引入不一樣代碼處理分支。設計

  最後從連接空間來看,超級下載算法是要加載到內部RAM去執行的,這些i.MXRT內部RAM大小不一,而且在系統映射地址空間中的地址也略有不一樣,但也不重要,若是你看過痞子衡以前寫的文章 《串行NOR Flash下載算法(Keil MDK工具篇) 》,你應該知道下載算法代碼都是位置無關連接,其加載地址能夠不固定(由配套xml文件或IDE工程設置中額外指定),所以RAM的差別也不重要。3d

2、解決Cortex-M處理器不一樣版本指令差別

  通過上一節的分析,咱們知道解決超級下載算法在i.MXRT全系列下運行最重要的問題就是處理不一樣Cortex-M內核指令差別。xml

  在解決指令差別問題前,有一個重要問題痞子衡不得不澄清,那就是不一樣Cortex-M芯片其中斷向量表序列定義並不一樣,前16個是系統向量,這是由ARM規定的,但後面的中斷向量均是由廠商自定義的。不一樣芯片型號下,同一類型外設分配的向量號並不必定相同,所以對於一些異構雙核下跑的嵌入式程序,須要處理中斷向量表差別。可是這對於下載算法來講,不是個問題,由於下載算法不是通常的嵌入式程序,其不含中斷向量表,這意味着下載算法中沒有使用中斷響應函數,不能開啓外設中斷(這是位置無關連接致使的)。

  好,咱們如今來解決指令差別問題。查看ARM官方資料得知,Cortex-M家族共有10款處理器(M0、M0+、M一、M三、M2三、M四、M3三、M35P、M七、M55),分屬四個架構規範(ARMv6-M、ARMv7-M、ARMv8-M、ARMv8.1-M),架構主要和指令集息息相關。

  再來看兩張Cortex-M指令集關係圖,從圖裏咱們能夠看出Cortex-M0/M0+/M1處理器基於ARMv6-M架構,這是一個只支持56條指令的小指令集(藍色粗框標出),全部Cortex-M處理器都支持這個56條指令的指令集。

  看到這你是否是有所領悟?ARM公司其實爲了能讓Cortex-M用戶的軟件能重用,特意在設計Cortex-M處理器時爲其賦予了處理器向下兼容、軟件二進制向上兼容特性。通俗地說就是在較低版本Cortex-M處理器上編譯出來的機器碼能夠在較高版本Cortex-M處理器上直接執行。

  所以爲了實現超級下載算法在i.MXRT全系列上(M四、M七、M33)運行,咱們只須要作一件事,那就是編譯生成算法文件的源MDK工程設置裏選擇Cortex-M0處理器就行,是否是超級簡單?若是你下載了CMSIS_5包,裏面的下載算法模板工程默認處理器就是ARMCM0,這並不僅是個偶然!

  至此,超級下載算法開發筆記(1)之執行在不一樣CM內核下痞子衡便介紹完畢了,掌聲在哪裏~~~

歡迎訂閱

文章會同時發佈到個人 博客園主頁CSDN主頁知乎主頁微信公衆號 平臺上。

微信搜索"痞子衡嵌入式"或者掃描下面二維碼,就能夠在手機上第一時間看了哦。

相關文章
相關標籤/搜索