| 如何创建HC32F460的工程就不介绍了,下面介绍向工程中添加FreeRTOS的方法 首先下载FreeRTOS源码 https://github.com/FreeRTOS/FreeRTOS/releases
 在midwares文件夹中创建FreeRTOS文件夹
 
   打开下载的FreeRTOS源码,将FreeRTOS\Source中的全部文件解压到刚才创建的FreeRTOS文件夹
 
   在Keil中创建FreeRTOS分组,将FreeRTOS文件夹下的.c文件添加到分组中
 
   然后将portable\RVDS\ARM_CM4F中的port.c也添加到分组中
 
   portable文件夹中是FreeRTOS针对不同编译平台和不同内核提供的适配代码,我这里用的是Keil,但是Keil文件夹里只有这么个文件
 
   HC32F460是M4内核的,这里只能选M4F
 
   还需要添加MemMang中的内存管理代码,这里有5个
 
   打开那个readme看看
 
   推荐是heap4.c,将它添加到FreeRTOS分组中
 添加FreeRTOS的头文件路径
 
   在FreeRTOS的例程里复制1个FreeRTOSConfig.h文件到代码文件夹,最后结构是这样
 
   修改一下FreeRTOSConfig.h内容,添加extern uint32_t SystemCoreClock;,下面几个宏定义如果不是0修改为0
 
   接下来修改main.c,我这个工程原来是控制4个LED闪烁的,修改一下,创建2个任务分别以不同的速度控制LED亮灭,原来的LED控制代码就不放了,官方例程中都有
 
 运行效果#include "FreeRTOS.h"
#include "task.h"
static TaskHandle_t frt_test_led12_task_handler = NULL;
static TaskHandle_t frt_test_led34_task_handler = NULL;
static void Led12Task(void* pvParameters)
{        
    while (1)
    {
      LED_R_TOGGLE();
      vTaskDelay(500);
      LED_G_TOGGLE();
      vTaskDelay(500);
    }
}
static void Led34Task(void* pvParameters)
{        
    while (1)
    {
      LED_Y_TOGGLE();
      vTaskDelay(1000);
      LED_B_TOGGLE();
      vTaskDelay(1000);
    }
}
int32_t main(void)
{
    SystemCoreClockUpdate();
    LL_PERIPH_WE(LL_PERIPH_GPIO);
    LED_Init();
    LL_PERIPH_WP(LL_PERIPH_GPIO);
    xTaskCreate(Led12Task, "Led12Task", configMINIMAL_STACK_SIZE,  NULL,1, &frt_test_led12_task_handler);
    xTaskCreate(Led34Task, "Led34Task", configMINIMAL_STACK_SIZE,  NULL,1, &frt_test_led34_task_handler);
    vTaskStartScheduler();
}
   
 
 |