1、 本文讲解利用cubeMX+ TrueSTUDIO工具来移植ThreadX系统到stm32f407ZGT6芯片上,首先讲讲为什么选择这样的框架来移植?因为cubeMX支持生成的工程代码有如下几种:

threadx guix emwin 哪个好 threadx官网_main函数

  打开ThreadX的官方网站https://rtos.com/solutions/threadx/real-time-operating-system/在Debuggers栏目下可以找到与之匹配有Atollic TrueSTUDIO、IAR,然而IAR需要授权,所以我选择免费版本的Atollic TrueSTUDIO。

2、在计算机的某个盘符下建立文件夹,取名ThreadX_Study,再在该文件夹下建立新的文件夹,取名CubeMX_Project

threadx guix emwin 哪个好 threadx官网_工程文件_02

3、 建立CubeMX工程,工程名称为ThreadX_F407ZGT6,保存路径为G:\ThreadX_Study\CubeMX_Project

threadx guix emwin 哪个好 threadx官网_工程文件_03

4、 时钟配置

threadx guix emwin 哪个好 threadx官网_sed_04

5、 利用cubeMX配置一个输出GPIO用来控制LED

threadx guix emwin 哪个好 threadx官网_工程文件_05

6、 重要配置

threadx guix emwin 哪个好 threadx官网_threadx系统_06

threadx guix emwin 哪个好 threadx官网_工程文件_07

   去掉Pendablerequest for system service项的Generate IRQ handler选项,是因为ThreadX需要用到PendSV_Handler中断服务程序。

7、 利用cubeMX生成AtollicTrueSTUDIO工程文件

threadx guix emwin 哪个好 threadx官网_sed_08

生成完毕,在弹出的对话框中点击close

threadx guix emwin 哪个好 threadx官网_sed_09

8、 打开Atollic TrueSTUDIO软件,选择工作空间G:\ThreadX_Study,然后点击OK

threadx guix emwin 哪个好 threadx官网_threadx系统_10

9、 点击File->Import…弹出如下对话框,选择Existing Projects into Workspace,然后点击Next

threadx guix emwin 哪个好 threadx官网_threadx系统_11

10、按下图操作,然后点击Finish

threadx guix emwin 哪个好 threadx官网_main函数_12

这时在软件的左侧工程栏会出现cubeMX生成的工程文件:

threadx guix emwin 哪个好 threadx官网_工程文件_13

11、打开CubeMX_Project->Src->main.c文件,在main函数中while(1)代码段中添加如下代码用来控制LED秒闪:

/*USER CODE BEGIN WHILE */
while (1) {
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
HAL_Delay(1000);
HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
HAL_Delay(1000);
/*USER CODE END WHILE */
/*USER CODE BEGIN 3 */
}
/* USER CODEEND 3 */

然后编译、烧录、运行。如果此时LED闪烁,说明软件硬件都没问题,下面直接进入移植ThreadX阶段。

12、将threadx-6.0.2_rel目录下的common文件夹及ports文件夹拷贝到ThreadX_Study->CubeMX_Project目录下

threadx guix emwin 哪个好 threadx官网_sed_14

13、  因为Atollic TrueSTUDIO采用的是gcc编译以及F407为M4内核,所以需要对ports目录下的无关目录及文件进行删除,删除后的目录及文件如下

threadx guix emwin 哪个好 threadx官网_threadx系统_15

14、  回到TrueSTUDIO软件,这时左侧工程目录已经自动加载了刚才复制的目录及文件了

threadx guix emwin 哪个好 threadx官网_sed_16

15、  现在对ports\cortex_m4\gnu\example_build目录下的文件进行删除操作,删除以下文件:

build_threadx.bat

build_threadx_sample.bat

cortexm4_crt0.s

sample_threadx.ld

tx_simulator_startup.s

删除后的目录文件如下

threadx guix emwin 哪个好 threadx官网_sed_17

16、修改sample_threadx.c文件,将该文件里的main函数名称改为main_user

int main_user()
{
    /* Enter the ThreadX kernel.  */
    tx_kernel_enter();
}

将该函数在CubeMX_Project->Src->main.c文件中进行声明并在main()函数中调用:

声明:

/*USER CODE BEGIN PTD */
externint main_user();
/* USER CODEEND PTD */
调用:
/*USER CODE BEGIN WHILE */
while (1)
{
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_SET);
    HAL_Delay(1000);
    HAL_GPIO_WritePin(GPIOF, GPIO_PIN_6, GPIO_PIN_RESET);
    HAL_Delay(1000);
    main_user();
/*USER CODE END WHILE */
/*USER CODE BEGIN 3 */
}
/* USER CODEEND 3 */
17、修改tx_initialize_low_level.S文件
SYSTEM_CLOCK      =  120000000

18、修改启动文件

在CubeMX_Project->startup->startup_stm32f407xx.s文件中修改两个地方:

第一,在.global g_pfnVectors前面添加.global _vectors

  .thumb

.global_vectors

.global g_pfnVectors

第二,在g_pfnVectors:后面添加_vectors:

g_pfnVectors:

_vectors:

  .word  _estack

19、修改链接文件

将__RAM_segment_used_end__ = .;添加到CubeMX_Project->STM32F407ZG_FLASH.ld文件中:

._user_heap_stack :
  {
    . = ALIGN(4);
    PROVIDE ( end = . );
    PROVIDE ( _end = . );
    . = . + _Min_Heap_Size;
    . = . + _Min_Stack_Size;
    . = ALIGN(4);
    __RAM_segment_used_end__ = .;
  } >RAM

20、添加头文件及源文件路径

threadx guix emwin 哪个好 threadx官网_main函数_18

threadx guix emwin 哪个好 threadx官网_threadx系统_19

21、添加LED闪烁代码

打开ports\cortex_m4\gnu\example_build\sample_threadx.c文件,

第一,  添加头文件

#include"gpio.h"

第二,在void    thread_0_entry(ULONGthread_input)函数中添加LED闪烁代码,并更改睡眠时间为50个ticks

while(1)
{
/*Increment the thread counter.  */
thread_0_counter++;
/*Sleep for 10 ticks.  */
tx_thread_sleep(50);
HAL_GPIO_TogglePin(GPIOF,GPIO_PIN_6);
/*Set event flag 0 to wakeup thread 5. */
    status = tx_event_flags_set(&event_flags_0, 0x1, TX_OR);
/*Check status.  */
    if (status != TX_SUCCESS)
break;
}

22、编译工程,下载运行,这时可以看到LED闪烁了。

threadx guix emwin 哪个好 threadx官网_threadx系统_20