1、官方源码下载
(1)进入FreeRTOS官网:FreeRTOS官网
(2)下载FreeRTOS。(选择带示例的下载)
2、删减目录
(1)下载后解压的FreeRTOS文件如下图所示。
(2)删除下图中红框勾选的文件。
- FreeRTOS-Plus,FreeRTOS的生态文件,非必需的。
- tools,这里面是亚马逊相关的文件,不需要。
(3)删除"FreeRTOSv202212.01\FreeRTOS\Demo"目录下用不到的示例工程。
- 保留Common文件夹
- 保留CORTEX_STM32F103_Keil
(4) "FreeRTOSv202212.01\FreeRTOS\Source\portable"目录下只保留如下两个文件夹,其他全部删掉。
(5)"FreeRTOSv202212.01\FreeRTOS\Source\portable\RVDS"目录下只保留ARM_CM3文件。
3、编译工程
(1)打开工程。
(2)弹出如下对话框,说明该工程是用KeilMDK4创建的。点击“Migrate to Device Pack”更新为KeilMDK5。
(3)编译结果如下。
(4)编译后报错106,明显不正常。该程序原本是Keil4MDK中编写的,更新为KeilMDK5出现的问题。理论上官方提供的例程是0错误,0警告的。
4、编译错误解决
(1)KeilMDK4中使用的编译器是"Missing: Compiler Version 5",而KeilMDK5中该编译器默认是不安装的。解决思路就是安装该编译器在编译试试。(ARM Comliler是ARM编译器的意思)
(2)安装V5编译器。
KeilMDK V5编译器的安装_朱嘉鼎的博客-CSDN博客
(3)安装后编译结果如下。
5、修改程序
5.1、实现目的
(1)示例程序原来因该是和LCD显示内容有关。
(2)创建2个任务,通过串口打印“1”和“2”。
5.2、重写fputc函数。
int fputc( int ch, FILE *f )
{USART_TypeDef *USARTx = USART1;while( (USARTx->SR & (1<<7)) == 0); // 等待上次的数据发送完成USARTx->DR = ch;return ch;
}
5.3、编写任务函数
/*任务1函数*/
void vTask1()
{while(1){printf("1");}
}/*任务2函数*/
void vTask2()
{while(1){printf("2");}
}
5.3、main函数修改
(1)原main函数全部注释,重新编写。
(2)程序。
int main( void )
{/*初始化串口:波特率,接收发送缓冲区长度*/xSerialPortInitMinimal(115200, 20);/*创建任务1*/xTaskCreate(vTask1, "Task 1", 1000, NULL, 1, NULL);/*创建任务2*/xTaskCreate(vTask2, "Task 2", 1000, NULL, 1, NULL);/*开启任务调度器*/vTaskStartScheduler();return 0;
}
5.4、软仿真查看实验现象
6、完整工程下载地址
(1)完整工程存储在码云。
(2)https://gitee.com/zhujiading/free-rtos-csdn