[其他ST产品] FreeRTOS移植到STM32

[复制链接]
 楼主| lvuu 发表于 2022-12-31 20:47 | 显示全部楼层
F4系列就拷贝port\RVDS\ARM_CM4,然后我们将工程文件中 FreeRTOS 的内容添加到工程中去,按照已经新建的分组添加 我们的 FreeRTOS 工程源码。 在 FreeRTOS/port 分组中添加 MemMang 文件夹中的文件只需选择其中一个即可,我 们选择“heap_4.c”,这是 FreeRTOS 的一个内存管理源码文件。同时,需要根据自己的开 发板型号在 FreeRTOS\port\RVDS\ARM_CM?中选择,“?”表示 3、4 或者 7,具体选择 哪个得看你使用的是哪个型号的 STM32 开发板。
 楼主| lvuu 发表于 2022-12-31 20:51 | 显示全部楼层
 楼主| lvuu 发表于 2022-12-31 20:51 | 显示全部楼层
3256863b03044ca035.png
然后在 user 分组中添加我们 FreeRTOS 的配置文件“FreeRTOSConfig.h”,因为这是 头文件(.h),所以需要在添加时选择文件类型为“All files (*.*)”,至此我们的 FreeRTOS 添加到工程中就已经完成,效果图如下
767463b0305694537.png
 楼主| lvuu 发表于 2022-12-31 20:53 | 显示全部楼层
指定 FreeRTOS 头文件的路径
9896663b030d6a5597.png
这一步不过多解释,用过STM32的人都知道
 楼主| lvuu 发表于 2022-12-31 20:54 | 显示全部楼层
FreeRTOSConfig.h 文件修改

       FreeRTOSConfig.h 头文件的内容修改的不多,具体是:修改与对应开发板的头文件 , 如果是使用野火 STM32F1 的开发板,则包含 F1 的头文件#include "stm32f10x.h",同理是 使用了其它系列的开发板,则包含与开发板对应的头文件即可,当然还需要包含我们的串 口的头文件“bsp_usart.h”,因为在我们 FreeRTOSConfig.h 中实现了断言操作,需要打印 一些信息。其他根据需求修改即可, 3357563b0310854af1.png
 楼主| lvuu 发表于 2022-12-31 20:55 | 显示全部楼层
修改 stm32f10x_it.

SysTick 中断服务函数是一个非常重要的函数,FreeRTOS 所有跟时间相关的事情都在 里面处理,SysTick 就是 FreeRTOS 的一个心跳时钟,驱动着 FreeRTOS 的运行,就像人的 心跳一样,假如没有心跳,我们就相当于“死了”,同样的,FreeRTOS 没有了心跳,那么 它就会卡死在某个地方,不能进行任务调度,不能运行任何的东西,因此我们需要实现一 个 FreeRTOS 的心跳时钟,FreeRTOS 帮我们实现了 SysTick 的启动的配置:在 port.c 文件 中已经实现 vPortSetupTimerInterrupt()函数,并且 FreeRTOS 通用的 SysTick 中断服务函数 也实现了:在 port.c 文件中已经实现
 楼主| lvuu 发表于 2022-12-31 20:56 | 显示全部楼层
xPortSysTickHandler()函数,所以移植的时候只需要我 们在 stm32f10x_it.c 文件中实现我们对应(STM32)平台上的 SysTick_Handler()函数即可。 FreeRTOS 为开发者考虑得特别多,PendSV_Handler()与 SVC_Handler()这两个很重要的函 数都帮我们实现了,在 port.c 文件中已经实现 xPortPendSVHandler()与 vPortSVCHandler() 函数,防止我们自己实现不了,那么在 stm32f10x_it.c 中就需要我们注释掉 PendSV_Handler()与 SVC_Handler()这两个函数了,具体看一下代码
 楼主| lvuu 发表于 2022-12-31 21:02 | 显示全部楼层
  1. /* Includes ------------------------------------------------------------------*/
  2. #include "stm32f10x_it.h"
  3. #include "FreeRTOS.h"                                        //FreeRTOS使用                  
  4. #include "task.h"
  5. /** @addtogroup STM32F10x_StdPeriph_Template
  6.   * @{
  7.   */
  8. /* Private typedef -----------------------------------------------------------*/
  9. /* Private define ------------------------------------------------------------*/
  10. /* Private macro -------------------------------------------------------------*/
  11. /* Private variables ---------------------------------------------------------*/
  12. /* Private function prototypes -----------------------------------------------*/
  13. /* Private functions ---------------------------------------------------------*/
  14. /******************************************************************************/
  15. /*            Cortex-M3 Processor Exceptions Handlers                         */
  16. /******************************************************************************/
  17. /**
  18.   * [url=home.php?mod=space&uid=247401]@brief[/url]  This function handles NMI exception.
  19.   * @param  None
  20.   * @retval None
  21.   */
  22. void NMI_Handler(void)
  23. {
  24. }

  25. /**
  26.   * @brief  This function handles Hard Fault exception.
  27.   * @param  None
  28.   * @retval None
  29.   */
  30. void HardFault_Handler(void)
  31. {
  32.   /* Go to infinite loop when Hard Fault exception occurs */
  33.   while (1)
  34.   {
  35.   }
  36. }
  37. /**
  38.   * @brief  This function handles Memory Manage exception.
  39.   * @param  None
  40.   * @retval None
  41.   */
  42. void MemManage_Handler(void)
  43. {
  44.   /* Go to infinite loop when Memory Manage exception occurs */
  45.   while (1)
  46.   {
  47.   }
  48. }
  49. /**
  50.   * @brief  This function handles Bus Fault exception.
  51.   * @param  None
  52.   * @retval None
  53.   */
  54. void BusFault_Handler(void)
  55. {
  56.   /* Go to infinite loop when Bus Fault exception occurs */
  57.   while (1)
  58.   {
  59.   }
  60. }
  61. /**
  62.   * @brief  This function handles Usage Fault exception.
  63.   * @param  None
  64.   * @retval None
  65.   */
  66. void UsageFault_Handler(void)
  67. {
  68.   /* Go to infinite loop when Usage Fault exception occurs */
  69.   while (1)
  70.   {
  71.   }
  72. }
  73. /**
  74.   * @brief  This function handles SVCall exception.
  75.   * @param  None
  76.   * @retval None
  77.   */
  78. //void SVC_Handler(void)
  79. //{
  80. //}
  81. /**
  82.   * @brief  This function handles Debug Monitor exception.
  83.   * @param  None
  84.   * @retval None
  85.   */
  86. void DebugMon_Handler(void)
  87. {
  88. }
  89. extern void xPortSysTickHandler(void);
  90. //systick中断服务函数
  91. void SysTick_Handler(void)
  92. {       
  93.     #if (INCLUDE_xTaskGetSchedulerState  == 1 )
  94.       if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  95.       {
  96.     #endif  /* INCLUDE_xTaskGetSchedulerState */  
  97.         xPortSysTickHandler();
  98.     #if (INCLUDE_xTaskGetSchedulerState  == 1 )
  99.       }
  100.     #endif  /* INCLUDE_xTaskGetSchedulerState */
  101. }
  102. /******************************************************************************/
  103. /*                 STM32F10x Peripherals Interrupt Handlers                   */
  104. /*  Add here the Interrupt Handler for the used peripheral(s) (PPP), for the  */
  105. /*  available peripheral interrupt handler's name please refer to the startup */
  106. /*  file (startup_stm32f10x_xx.s).                                            */
  107. /******************************************************************************/
  108. /**
  109.   * @brief  This function handles PPP interrupt request.
  110.   * @param  None
  111.   * @retval None
  112.   */
  113. /*void PPP_IRQHandler(void)
  114. {
  115. }*/

 楼主| lvuu 发表于 2022-12-31 21:04 | 显示全部楼层
修改main.c里面的代码
  1. #include "FreeRTOS.h"
  2. #include "task.h"
  3. /* 开发板硬件bsp头文件 */
  4. #include "bsp_led.h"
  5. #include "bsp_usart.h"


  6. int main(void)
  7. {       
  8.   //里面什么都不做
  9. }
 楼主| lvuu 发表于 2022-12-31 21:04 | 显示全部楼层
修改好后编译看看有没有错误
 楼主| lvuu 发表于 2022-12-31 21:59 | 显示全部楼层
Bowclad 发表于 2023-1-1 16:13 | 显示全部楼层
参考一下移植过程
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 在线客服 返回列表 返回顶部