Tasks and Queues用于添加任务和队列。
默认配置了一个名为defaultTask的任务,其优先级为普通,任务堆栈大小为128字,任务函数名为StartDefaultTask。
双击蓝色的地方,弹出对话框,将任务名修改为Task_LED0,将任务函数名修改为Func_LED0。
点击Add按钮,增加一个任务Task_LED1,优先级设置为Normal,函数名为Func_LED1。
需要注意的是,STM32Cube对FreeRTOS进行了一些修改,比如优先级只有7个,如下图。
Timers and Semaphores是添加软件定时器和信号量的选项。
注:该步骤中,除了添加任务,其他的都使用默认参数。 Step7.生成代码。
这时候会弹出一个警告。原因是FreeRTSO使用了Systick作为时钟节拍,而HAL库也使用了Systick作为HAL_Delay()和各种timeout的时钟基准。因此需要将HAL的时钟基准改为其他TIMER。一般使用一个基本定时器。
点击“No”按钮,然后在Pinout设置页面选择时基源为TIM4
再次点击代码生成按钮,等完成后直接打开工程。
工程基本组织结构如下图,其中Application/User组中的文件是用户可以修改的,而其他组中的文件一般不进行修改。
Step8.分析程序结构。 在进入main函数之前,先定义了两个变量,声明了几个函数。
再看main函数。将main函数整理,删除很多注释之后,得到下图所示内容。
其中第①部分,是硬件配置;第②部分,创建两个线程(或称任务);第③部分,启动调度器。这就是程序的基本结构。 启动调度器后,程序就由FreeRTOS的调度器管理了,将会被执行的是两个已经创建的任务函数Func_LED0和Func_LED1,后面的while(1)是不会执行到的。
Step9.添加代码。 在main.c文件中,找到前面配置添加的两个任务函数,Func_LED0和Func_LED1,然后在里面分别添加LED0和LED1的控制代码。