下面以Xplain STM32(使用STM32F103ZET6 CPU)开发板为例,将RTX移植到该板上运行.为了能让刚接触这个系统的人了解整个移植过程,会重新建立一个工程,将所有的源码(包括RTX内核)添加到工程中,而不使用RTX库的形式.
1. 新建一文件夹(rtx-stm32),内容如下:
-- keil包含keil的工程文件
-- misc包含连接脚本文件
-- si是source insight工程文件
--src包含源代码:
--- cm3 CPU相关文件
--- stm32 针对stm32 CPU的文件
--- rtx 操作系统内核
--- user 应用程序
新建一个工程,将工程文件保存到keil文件夹下.
2. 给工程添加源代码
将cmsis的两个文件core_cm3.c, core_cm3.h copy到cm3下(可在其他工程找).
把STM32的启动代码,库源码copy到stm32文件夹下.
将RTX源码Keil\ARM\RL\RTX\SRC\CM copy到rtx文件夹下,可以新建个cm文件夹,表明内核源码是针对cm3的.
从Keil\ARM\RV31\INC, Keil\ARM\RL\RTX\Config下分别copy RTL.h,RTX_lib.c和RTX_Conf_CM.c文件到rtx文件夹下.RTL_lib.c是一操作系统底层相关文件,RTX_Conf_CM.c是操作系统配置文件.
user下新建一个main.c文件,包含应用程序.具体内容可参考\Keil\ARM\RL\RTX\Examples文件夹下的例子.
工程中文件夹结构和添加的文件如下:
注意不要将RTX_lib.c添加到工程中,否则编译有错,该文件被包含在其他文件中.
3. 工程属性设置
Targe页面如下: operating system要先为None, 勾选Use MicroLib选项
C/C++页面如下:
定义宏USE_STDPERIPH_DRIVER=1, STM32F10X_HD=1, 这两个宏是与STM32源码相关的,表示 1. 要使用STM32提供的外设驱动, 2. CPU类型.
要勾选上No Auto Includes, 如果不勾的话,自动将:
Keil\ARM\RV31\INC
Keil\ARM\CMSIS\Include
Keil\ARM\Inc\ST\STM32F10x
添加到头文件的搜索路径中,这几个路径下包含的头文件与我们工程中的有些头文件一样,有些混乱,所以不要自动添加头文件的搜索路径,需要的时候自己添加.
Includes Paths中包含的路径有:
D:\Keil\ARM\ARMCC\include;..\src\rtx;..\src\cm3;..\src\user;..\src\cm3\stm32\Libraries\Inc;..\src\cm3\stm32\Starup
Asm页面如下:
将No Auto Includes选项勾上就行了
4. 将stm32f10x_it.c文件中的SVC_Handler, SysTick_Handler函数屏蔽,这两个函数在HAL_CM3.c中已定义好.
经过这4步,rtx可以在Xplain STM32板上跑起来了.