stm32移植FreeRTOS

基于stm32f103c6t6移植FreeRTOS

1.下载源码:FreeRTOS下载链接

2.开始移植

1.将FreeRTOS\Source复制到工程目录。

2.Source\portable目录保留RVDS和MemMang目录

3.portable\MemMang保留一个内存管理源码(使用heap_4.c)

4.复制一份FreeRTOSConfig.h到工程

5.修改stm32f1xx_it.c文件

删除PendSV_Handler,SVC_Handler函数,并且修改SysTick_Handler函数如下:

void DebugMon_Handler(void)
{
  /* USER CODE BEGIN DebugMonitor_IRQn 0 */
#endif
#if SUPPORT_FREERTOS ==1
#endif
void DebugMon_Handler(void)
{
  /* USER CODE END DebugMonitor_IRQn 0 */
  /* USER CODE BEGIN DebugMonitor_IRQn 1 */
#if SUPPORT_FREERTOS ==1
}
#endif
#if SUPPORT_FREERTOS ==0

  /* USER CODE END DebugMonitor_IRQn 1 */
}

/**
  * @brief This function handles Pendable request for system service.
  */
void PendSV_Handler(void)
{
  /* USER CODE BEGIN PendSV_IRQn 0 */

  /* USER CODE END PendSV_IRQn 0 */
  /* USER CODE BEGIN PendSV_IRQn 1 */

  /* USER CODE END PendSV_IRQn 1 */
}

/**
  * @brief This function handles System tick timer.
  */
void SysTick_Handler(void)
{
  /* USER CODE BEGIN SysTick_IRQn 0 */
#endif
#if SUPPORT_FREERTOS ==1
void SysTick_Handler(void)
{
#endif
  HAL_IncTick();
  /* USER CODE END SysTick_IRQn 0 */

  /* USER CODE BEGIN SysTick_IRQn 1 */
#if SUPPORT_FREERTOS ==1
#if (INCLUDE_xTaskGetSchedulerState  == 1 )
  if (xTaskGetSchedulerState() != taskSCHEDULER_NOT_STARTED)
  {
  #endif  /* INCLUDE_xTaskGetSchedulerState */  
    xPortSysTickHandler();
  #if (INCLUDE_xTaskGetSchedulerState  == 1 )

   }
  #endif 
#endif
  /* USER CODE END SysTick_IRQn 1 */
}

end