<meter id="pryje"><nav id="pryje"><delect id="pryje"></delect></nav></meter>
          <label id="pryje"></label>

          新聞中心

          stm32f429 移植RT_Thread

          作者: 時(shí)間:2016-11-11 來源:網(wǎng)絡(luò) 收藏
          RTT作為一個(gè)中國的開源實(shí)時(shí)操作系統(tǒng),經(jīng)過國內(nèi)一些專業(yè)人士的充實(shí),現(xiàn)在其已經(jīng)支持大部分MCU以及X86
          當(dāng)然現(xiàn)在用的很火的STM32也不例外;RTT最大的特點(diǎn)就是線程數(shù)不限,支持以線程為基本調(diào)度單位的多任務(wù)系統(tǒng)。調(diào)度算法是基于優(yōu)先級(jí)的全搶占式線程調(diào)度,支持256個(gè)線程優(yōu)先級(jí)(亦可配置成32個(gè)線程優(yōu)先級(jí)),0優(yōu)先級(jí)代表 最高優(yōu)先級(jí),255優(yōu)先級(jí)留給空閑線程使用;相同優(yōu)先級(jí)上支持多個(gè)線程,這些相同優(yōu)先級(jí)的線程采用可設(shè)置時(shí)間片長度的時(shí)間片輪轉(zhuǎn)調(diào)度;調(diào)度器尋找下一個(gè)最 高優(yōu)先級(jí)就緒線程的時(shí)間是恒定的(O(1))。系統(tǒng)不限制線程數(shù)量的多少,只與物理平臺(tái)的具體內(nèi)存相關(guān)。
          現(xiàn)在2014.2月,RTT已經(jīng)更新到1.2.0版本,當(dāng)然現(xiàn)在STM32也出了最新的429/439,但是RTT里只支持了40X;但是40X與429/439在硬件上區(qū)別不是很大這樣我們就可以用40X作為模板進(jìn)行移植了。
          在移植之前大家要知道,RTT是靠scons來編譯和生成keil或者IAR的工程文件的,所以用scons這個(gè)工具在移植時(shí)比較方便,不必自己去找那些文件。
          在此之前確保自己電腦上已經(jīng)安裝了Python和scons:下載的地址 Python:http://www.python.org/download/ (在此我用的是Python2.7)
          scons: http://www.scons.org/download.php 選擇適合自己系統(tǒng)版本
          先安裝Python;再把Python的安裝路徑添加到系統(tǒng)的PATH中;再安裝scons一路next;會(huì)自動(dòng)安裝到:XXXPython27Scripts目錄下,再把這路徑添加到系統(tǒng)PATH中;弄好了后分別在cmd下運(yùn)行一下Python -v,scons -v看安裝是否成功。
          接下來去RTT官網(wǎng)下載源碼,一般首頁的右上角就會(huì)有下載鏈接:下載下來后解壓到一個(gè)盤的根目錄:改名為RT_Thread,比如D:RT_Thread;在系統(tǒng)的系統(tǒng)變量中添加一個(gè)RTT_ROOT 變量,把自己剛剛那個(gè)路徑填進(jìn)去,運(yùn)行一下set RTT_ROOT,看是否成功。
          再把stm32f429的庫函數(shù)下載下來。
          現(xiàn)在回到剛剛放RT_thread文件的中去:
          bsp里就是可以支持芯片的工程模板;里面有一個(gè)stm32f40x目錄,把它拷貝出來,為了不破壞原來的文件;之前說了RT_Thread是靠scons來編譯或者建立keil工程的,和linux的Makefile有些相似之處,在這個(gè)目錄下有幾個(gè)比較重要的文件:
          一個(gè)是rtconfig.h,就是通過這個(gè)文件添加和刪減系統(tǒng)組件的;還有一個(gè)是template.uvproj這是生成的keil工程的模板,可不要?jiǎng)h了。接下來用寫字板打開 rtconfig.py 文件,他就是定義編譯器這些的巨像Makefile,我們用的是keil,修改一下 keil 的安裝路徑,看看自己keil裝到哪了,如果一致就不用改了。實(shí)打開每個(gè)文件夾下面都一個(gè)SConscript文件,這個(gè)就是讓文件關(guān)聯(lián)起來的文件,大家仔細(xì)看看就知道它是如何工作的了;
          大家可以看看rtconfig.h文件,看了就知道是怎么注冊(cè)一個(gè)組件,刪減一個(gè)組件;默認(rèn)就開了一個(gè)finsh,我們就先移植這個(gè)簡單的。
          打開命令行cmd ,切換到stm32f40x目錄下,執(zhí)行 scons --target=mdk4 –s ,這下就把keil工程建建好了,keil打開工程;大家會(huì)發(fā)現(xiàn)keil的設(shè)置有些問題,我們手動(dòng)改一下,就是芯片選型,還有就是外部晶振。這兩個(gè)改好后;我們看看工程文件:
          比較整潔吧,比自己手動(dòng)移植干凈的多,打開Drivers里面的board.c/ board.h就是初始化板子,看看board.h中會(huì)發(fā)現(xiàn)板子用的是USART2,而且內(nèi)存也不對(duì),下邊紅的就要改的(如果你用的是usart就不用改),如果用的不是默認(rèn)引腳,那再打開usart.c把引腳一改。
          // Internal SRAM memory size[Kbytes] <8-64>
          // Default: 64
          #define STM32_SRAM_SIZE 192 //stm32f429 是 256K 在0x20000000后有192K 在0x10000000還有64k
          #define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024)
          #define RT_USING_UART1
          //#define RT_USING_UART2
          //#define RT_USING_UART3
          // Console on USART: <0=> no console <1=>USART 1 <2=>USART 2 <3=> USART 3
          // Default: 1
          #define STM32_CONSOLE_USART 1
          下一個(gè)文件夾STM32_Stperiph:這個(gè)文件改的多一點(diǎn),因?yàn)楹蚐TM32F429的庫文件有些不合,先把這個(gè)目錄下的文件都移除;看看最后的那個(gè)startup匯編文件也不對(duì),之前不是下載了stm32f429的庫文件嘛,把429要的庫文件替換STM32_Stperiph下的文件,把里面的startup_stm32f429_439xx.s替換原來的startup_stm32f4xx.s,分別在在剛剛拷貝出來的文件里stm32f40xLibrariesSTM32F4xx_StdPeriph_Driverinc src和
          stm32f40xLibrariesCMSISSTSTM32F4xxSourceTemplatesarm目錄下。再把這文件的文件添加到STM32_Stperiph下。
          那么我們先編譯一下,會(huì)發(fā)現(xiàn)有錯(cuò)誤,為什么呢?因?yàn)槲覀兺诉€有一個(gè)文件忘改了,那就是stm32f4xx_conf.h;它在stm32f4xxdrivers目錄下,把新下的庫文件里面的stm32f4xx_conf.h拷貝過來。
          在編譯一次,應(yīng)該就可以通過了,下載下去就可以看見串口打印出信息了。
          再次要確定自己的晶振是不是25MHz,如果是8MHz就必須在stm32f4xx_conf.h中加上:(這是在readme.txt有說)
          #if defined (HSE_VALUE)
          /* Redefine the HSE value; its equal to 8 MHz on the STM32F4-DISCOVERY Kit */
          #undef HSE_VALUE
          #define HSE_VALUE ((uint32_t)8000000)
          #endif /* HSE_VALUE */



          關(guān)鍵詞: stm32f429移植RT_Threa

          評(píng)論


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

          關(guān)閉
          看屁屁www成人影院,亚洲人妻成人图片,亚洲精品成人午夜在线,日韩在线 欧美成人 (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })();