RTT作为一个中国的开源实时操作体系,经过国内一些专业人士的充分,现在其现已支撑大部分MCU以及X86
当然现在用的很火的STM32也不破例;RTT最大的特色便是线程数不限,支撑以线程为根本调度单位的多任务体系。调度算法是根据优先级的全抢占式线程调度,支撑256个线程优先级(亦可装备成32个线程优先级),0优先级代表 最高优先级,255优先级留给闲暇线程运用;相同优先级上支撑多个线程,这些相同优先级的线程选用可设置时刻片长度的时刻片轮转调度;调度器寻觅下一个最 高优先级安排妥当线程的时刻是稳定的(O(1))。体系不约束线程数量的多少,只与物理渠道的详细内存相关。
现在2014.2月,RTT现已更新到1.2.0版别,当然现在STM32也出了最新的429/439,可是RTT里只支撑了40X;可是40X与429/439在硬件上差异不是很大这样咱们就能够用40X作为模板进行移植了。
在移植之前咱们要知道,RTT是靠scons来编译和生成keil或许IAR的工程文件的,所以用scons这个东西在移植时比较便利,不必自己去找那些文件。
在此之前保证自己电脑上现已装置了Python和scons:下载的地址 Python:http://www.python.org/download/ (在此我用的是Python2.7)
scons: http://www.scons.org/download.php 挑选合适自己体系版别
先装置Python;再把Python的装置途径增加到体系的PATH中;再装置scons一路next;会主动装置到:XXX\Python27\Scripts目录下,再把这途径增加到体系PATH中;弄好了后别离在cmd下运转一下Python -v,scons -v看装置是否成功。
接下往来不断RTT官网下载源码,一般主页的右上角就会有下载链接:下载下来后解压到一个盘的根目录:改名为RT_Thread,比方D:\RT_Thread;在体系的体系变量中增加一个RTT_ROOT 变量,把自己刚刚那个途径填进去,运转一下set RTT_ROOT,看是否成功。
再把stm32f429的库函数下载下来。
现在回到刚刚放RT_thread文件的中去:

bsp里便是能够支撑芯片的工程模板;里边有一个stm32f40x目录,把它复制出来,为了不损坏本来的文件;之前说了RT_Thread是靠scons来编译或许树立keil工程的,和linux的Makefile有些相似之处,在这个目录下有几个比较重要的文件:

一个是rtconfig.h,便是经过这个文件增加和删减体系组件的;还有一个是template.uvproj这是生成的keil工程的模板,可不要删了。接下来用写字板翻开 rtconfig.py 文件,他便是界说编译器这些的巨像Makefile,咱们用的是keil,修正一下 keil 的装置途径,看看自己keil装到哪了,假如共同就不必改了。实翻开每个文件夹下面都一个SConscript文件,这个便是让文件相关起来的文件,咱们细心看看就知道它是怎样作业的了;
咱们能够看看rtconfig.h文件,看了就知道是怎样注册一个组件,删减一个组件;默许就开了一个finsh,咱们就先移植这个简略的。
翻开命令行cmd ,切换到stm32f40x目录下,履行 scons –target=mdk4 –s ,这下就把keil工程建建好了,keil翻开工程;咱们会发现keil的设置有些问题,咱们手动改一下,便是芯片选型,还有便是外部晶振。这两个改好后;咱们看看工程文件:

// 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
下一个文件夹STM32_Stperiph:这个文件改的多一点,由于和STM32F429的库文件有些不合,先把这个目录下的文件都移除;看看最终的那个startup汇编文件也不对,之前不是下载了stm32f429的库文件嘛,把429要的库文件替换STM32_Stperiph下的文件,把里边的startup_stm32f429_439xx.s替换本来的startup_stm32f4xx.s,别离在在刚刚复制出来的文件里stm32f40x\Libraries\STM32F4xx_StdPeriph_Driver\inc src和
stm32f40x\Libraries\CMSIS\ST\STM32F4xx\Source\Templates\arm目录下。再把这文件的文件增加到STM32_Stperiph下。
那么咱们先编译一下,会发现有过错,为什么呢?由于咱们忘了还有一个文件忘改了,那便是stm32f4xx_conf.h;它在stm32f4xx\drivers目录下,把新下的库文件里边的stm32f4xx_conf.h复制过来。
在编译一次,应该就能够经过了,下载下去就能够看见串口打印出信息了。
再非必须确认自己的晶振是不是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 */