整个STMF407系列的学习汇总链接如下:

https:///GreyZhang/g_stmf407

         我选择的IDE中有一个开箱即用的FreeRTOS,用起来还是很简单的。只要选择相应的功能即可,之前有一点老版本的FreeRTOS的经验,上手也比较容易。

         集成的版本是10.X的版本了,没有查看是否是封装的问题,直接看到的接口与我之前接触到的不是很一样,更简单了。

         配置完之后,创建了一个默认Task,看了下应该是一个1ms的的task。理论上讲,这个应该不是很精准。我自己创建了一个优先级更高的task,周期1s。代码:

    const osThreadAttr_t os_1000ms_task_attributes = {
        .name = "1000ms task",
        .priority = (osPriority_t) 1,
        .stack_size = 128
    };
os_1000ms_task_handler = osThreadNew(os_task_1000ms, NULL, &os_1000ms_task_attributes);

task中只有一个打印字符串的功能,而原来的系统tick中断回调还保留着,用来做一个功能对比。Task代码:

void os_task_1000ms(void *argument)
{
    /* USER CODE BEGIN 5 */
    /* Infinite loop */
    for(;;)
    {
        printf("task 1000ms\n\r");
        osDelay(1000);
    }
    /* USER CODE END 5 */ 
}

         编译成功后,打印效果:

144_STM32F407_FreeRTOS简单运行_RTOS

         看的出来,调度还是很精准的。之前使用这个系统的时候,感觉开始的demo很简单,后期使用还是会遇到很多问题。这个后续继续探究了。