FreeRTOS_003_让系统在板子上跑起

来源:互联网 发布:linux宝塔拉黑ip 编辑:程序博客网 时间:2024/06/02 07:06

本文原创作者:strongerHuang

版权所有,未经允许,禁止用于其它商业用途!!!

 

Ⅰ、写在前面

为满足大家的好奇心,本文将讲述几个步骤直接让FreeRTOS系统直接可以运行的芯片上,源代码里面的许多细节将在下一篇文章呈现。最后提供可以直接运行的Demo工程给大家,方便大家直接拿来修改测试。

 

为什么不先讲述源代码?

相信很多朋友开始学习的时候都是参看别人写好的,可以直接使用的源代码。在正确代码工程的基础上,我们可以展开很多测试,从而可以知道为什么这样才可以运行。

 

整个FreeRTOS工程源代码里面的内容牵涉到许多东西,而只需要简单几个步骤就能将代码运行起来,看到效果。如果我一一给你们讲述源代码,估计没怎么讲述几条,大家都晕了,不知道为什么这个地方是这样。

 

所以,给你看写好源代码工程,让你们自己测试,并分析才是最好的。

 

Ⅱ、移植几个步骤

源代码里面的内容有很少变动,本篇文章不具体讲述,只讲述移植的几个步骤,最终让代码工程可以运行在板子上。只需要如下简单几步即可:

 

1.提取源码添加到工程

上一篇文章讲述了下载FreeRTOS源码中各个目录及文件的意思,也大概讲述了一下需要提取源码。

主要提取:Source目录 + FreeRTOSConfig.h

(里面有部分内容未使用,为了不让大家感觉文件比较多,或者杂,我删除了)


将这些源码添加到自己的工程(之前讲述并建立好的STM32工程),具体提取的源码和添加到工程中的效果,请下载代码查看。

 

2.添加路径

我们添加源码到工程,有部分头文件include需要添加到工程。因此,我们需要添加相应路径。

.c源代码添加路径的方法见文章:

1.MDK-ARM_新建软件工程详细过程

 

2.EWARM_新建软件工程详细过程

 

这里主要想提醒的是:在IAR工程中有个汇编文件portasm.s包含了<FreeRTOSConfig.h>,需要我们添加<FreeRTOSConfig.h>所在文件下的路径。

 

注意:是在EWARM的Project -> Options -> Assembler ->Preprocessor中添加。

 

3.创建自己任务和添加相应代码

我们创建四个任务,还是使用比较经典的LED灯任务。

void AppTaskCreate(void)

{

 xTaskCreate(vAppTask1, "Task1", TASK1_STACK_SIZE, NULL,TASK1_PRIORITY, NULL);

 xTaskCreate(vAppTask2, "Task2", TASK2_STACK_SIZE, NULL,TASK2_PRIORITY, NULL);

 xTaskCreate(vAppTask3, "Task3", TASK3_STACK_SIZE, NULL,TASK3_PRIORITY, NULL);

 xTaskCreate(vAppTask4, "Task4", TASK4_STACK_SIZE, NULL,TASK4_PRIORITY, NULL);

}

 

void vAppTask1(void *pvParameters)

{

  for(;;)

  {

    LED1_TOGGLE;

   vTaskDelay(50);

  }

}

我新建了app_task.c和app_task.h文件添加任务的源代码,实现了4个任务。第一个任务:LED1间隔0.5S闪烁一次;第二个任务:LED2间隔1S闪烁一次;第三个任务:LED3间隔1.5S闪烁一次;第四个任务:LED4间隔2S闪烁一次;

 

4.修改FreeRTOSConfig.h配置文件

这个文件是必须配置的,而且根据实际情况而定。我们系统的裁剪也与该文件有关,类似于UCOS中的os_cfg.h文件。

 

比如:主频、系统滴答、系统堆栈大小等。

#defineconfigCPU_CLOCK_HZ        ((unsignedlong)72000000)

#defineconfigTICK_RATE_HZ        ((TickType_t)100)

#defineconfigTOTAL_HEAP_SIZE     ((size_t)(4 *1024))

本文不讲述具体内容。后期详细分析FreeRTOSConfig.h中的每一个参数。

 

5.删除stm32fxxx_it.c文件中定义的三个函数

我们在FreeRTOSConfig.h中使用了下面三个宏定义

#define vPortSVCHandler           SVC_Handler

#define xPortPendSVHandler        PendSV_Handler

#define xPortSysTickHandler        SysTick_Handler

【提示:STM32F1提供的Demo例程比较老,修改了STM32的启动文件,所以在FreeRTOSConfig.h中没有这三个宏定义。由于修改别人的库这种方式不好,所以后面提供的例程就使用了宏定义接口】

由于我们在vPortSVCHandlerxPortPendSVHandlerxPortSysTickHandler这三个接口在FreeRTOS下面的port.c文件里面已经实现。【其中vPortSVCHandlerxPortPendSVHandler还是用汇编实现的】

 

所以,我们需要屏蔽或者删除stm32fxxx_it.c文件下的SVC_HandlerPendSV_HandlerSysTick_Handler这三个函数。

 

至此,基本的步骤算是完成了。

 

Ⅲ、代码下载

目前提供了STM32F0 --- F4Demo工程,后期更新更多例程,敬请等待。

 

FreeRTOS_STM32F0_Demo下载地址:

http://pan.baidu.com/s/1qYbmfy0

 

FreeRTOS_STM32F1_Demo下载地址:

http://pan.baidu.com/s/1jHDHRPc

 

FreeRTOS_STM32F2_Demo下载地址:

http://pan.baidu.com/s/1mi3eIdq

 

FreeRTOS_STM32F3_Demo下载地址:

http://pan.baidu.com/s/1kUZu5G7

 

FreeRTOS_STM32F4_Demo下载地址:

http://pan.baidu.com/s/1bplLZ7x

 

提示 如果网盘链接失效, 可以微信公众号“ 底部菜单” 查找更新的链接。

Ⅳ、最后

微信搜索“EmbeddDeveloper” 或者扫描下面二维码、关注,在我的底部菜单查看更多精彩内容!

原创粉丝点击