在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設計應用 > ucOS學習筆記(5)——一步一步移植ucOS到STM32

            ucOS學習筆記(5)——一步一步移植ucOS到STM32

            作者: 時間:2016-11-10 來源:網絡 收藏
            這兩天看了下keil的編譯連接相關文檔得到以下一些信息:

            1.關于AREA--AREA是arm匯編中的段標志,它代表一個段的開始。所謂段是指一個獨立的,被命名的,不可分割一組代碼或者數(shù)據,一個單獨的代碼段是一個應用功能的最小單元。原文如下“sectionsare independent, named, indivisible seqnces of code or data. A single code section is the minimum required to prod? an application”。
            2.關于ENTRY--ENDTRY英文原意是入口的意思,在匯編語言中它代表了一個代碼段中被執(zhí)行的第一條指令的位置。如果代碼中有C語言代碼,C的初始化庫就已經包含了entry,一般這個entry就是main函數(shù)的入口,轉換為標識符就是__main所在的位置。在一個文件中如果包含了多個ENTRY連接過程將報錯。這也就解釋了學習筆記4中編譯報錯的問題。知道原因我們可以直接去掉init.s中的ENTRY,再編譯就直接OK了。

            OS學習筆記(4)中已經可以完成編譯了,但這個代碼是無法正常運行的。因為一般的ARM代碼都由四個部分組成,第一部分為初始化代碼,包括堆棧初始化等操作,第二部分是中斷向量表,第三部分是函數(shù)主體,這一部分一般是用C或者C++寫成,最后一部分為中斷代碼。前邊的移植編譯工作基本上把第一部分,第三部分做了,還有中斷向量表和中斷函數(shù)沒有完成。于是接下來的工作就是將這兩部分代碼添加到工程中。

            添加中斷向量表
            按照之前的習慣我們直接找到ST開發(fā)板源碼包中的中斷向量文件vectors.s添加進當前工程,編譯發(fā)生以下錯誤:
            1..OUTPUT OSII.axf: Error: L6218E: Undefined symbol OSPendSV (referred from vectors.o).
            沒有找到OSPendSV,這個函數(shù)是用于任務切換時保存堆棧相關數(shù)據的,該函數(shù)實際上已經在os_cpu_a.asm中被micrium實現(xiàn)了。只是名字變?yōu)榱薕S_CPU_PendSVHandler,因此我們只需要將vectors.s中的這個OS_CPU_PendSV改為OS_CPU_PendSVHandler就可以了。

            2..OUTPUT OSII.axf: Error: L6218E: Undefined symbol Tmr_TickISR_Handler (referred from vectors.o).
            這個錯誤表示沒有找到system tick函數(shù),而這個函數(shù)實際上夜市在os_cpu_c.c中被micrium實現(xiàn)了,名字是OS_CPU_SysTickHandler?,F(xiàn)在只需要將Tmr_TickISR_Handler改為OS_CPU_SysTickHandler即可。

            3..OUTPUT OSII.axf: Error: L6218E: Undefined symbol Image$$ARM_LIB_STACK$$ZI$$Limit (referred from vectors.o).
            這個問題是表明連接器找不到ARM_LIB_STACK這個段造成的,由于micrium在移植 OS到STM32平臺的時候自己寫了分散加載文件,在分散加載文件中增加了一個ARM_LIB_STACK段,而我們沒有使用它的分散加載文件導致找不到該段。micrium的分散加載文件如下:
            LR_IROM1 0x08000000 0x00020000 ;; Load region
            {
            ER_IROM1 0x08000000 0x08020000
            {
            vectors.o (VECT, +First)
            init.o (INIT)
            * (+RO)
            }

            RW_IRAM1 0x20000000 0x00004C00
            {
            * (+RW,+ZI)
            } ;; The following declarations select the "two region model" ;
            ;; A default __user_initial_stackheap() will be used ;
            ARM_LIB_HEAP 0x20004700 EMPTY 0x00000200 {}
            ARM_LIB_STACK 0x20004B00 EMPTY -0x00000200 {}
            }
            解決這個問題的方法是借助ST官方給的例程,參考前端的棧初始化代碼,將以下代碼拷貝到vectors.s的頂部就可以了。
            Stack_Size EQU 0x00000800

            AREA STACK, NOINIT, READWRITE, ALIGN=3
            Stack_Mem SPACE Stack_Size

            __initial_sp
            ; If you need to use external SRAM mounted on STM3210E-EVAL board as data memory
            ; and internal SRAM for Stack, uncomment the following line and comment the line above
            ;__initial_sp EQU 0x20000000 + Stack_Size ; "Use MicroLIB" must be checked in
            ; the Project->Options->Target window

            ; Amount of memory (in bytes) allocated for Heap
            ; Tailor this val to your application needs
            ;// Heap Configuration
            ;// Heap Size (in Bytes) <0x0-0xFFFFFFFF:8>
            ;//


            Heap_Size EQU 0x00000200

            AREA HEAP, NOINIT, READWRITE, ALIGN=3
            __heap_base
            Heap_Mem SPACE Heap_Size
            __heap_limit
            然后去掉原文中的IMPORT l Image$$ARM_LIB_STACK$$ZI$$Limitl I,同時將下邊的l Image$$ARM_LIB_STACK$$ZI$$Limitl I改為__initial_sp即可。

            至此,所有關于STM32的 OS移植基本完成,下一步就是寫板級支持包bsp.c,并完成系統(tǒng)測試代碼編寫。

            本文引用地址:http://www.biyoush.com/article/201611/317385.htm

            http://blog.163.com/tianyake@yeah/blog/static/7493314120114924056775/



            關鍵詞: ucOS移植STM3

            評論


            技術專區(qū)

            關閉