本帖最后由 阿源玩电子 于 2025-7-5 15:08 编辑
MM32F0121移植RTOS
、
#申请原创#1.进入FreeRTOS官网下载源码
2.搬运Free_RTOS文件
- include: 包含 FreeRTOS 的头文件。
- port: 包含与特定硬件平台相关的代码。(在RVDS文件夹中拷贝ARM_CM0文件夹)
- FreeRTOSConfig.h
3.工程目录
4.添加头文件目录
5.注释掉mm32f0120_it.c中的SVC_Handler、PendSV_Handler、SysTick_Handler中断函数
6.main.c
- #include "main.h"
- /* 任务控制块句柄 */
- TaskHandle_t Task1_Handle; // 任务1的句柄
- TaskHandle_t Task2_Handle; // 任务2的句柄
- /* 任务函数声明 */
- void Task1(void* pvParameters); // 任务1函数原型
- void Task2(void* pvParameters); // 任务2函数原型
- int main(void)
- {
- /* 硬件初始化 */
- GPIO_Configure();
- USART1_InitConsole(115200);
- /* 进入临界区保护任务创建过程 */
- taskENTER_CRITICAL();
-
- /* 创建任务1 */
- xTaskCreate(
- (TaskFunction_t)Task1, // 任务入口函数
- (const char*)"task1", // 任务名称(调试用)
- (uint16_t)128, // 任务堆栈大小(单位:字)
- (void*)NULL, // 任务参数
- (UBaseType_t)2, // 任务优先级(数字越大优先级越高)
- (TaskHandle_t*)&Task1_Handle // 任务句柄指针
- );
-
- /* 创建任务2 */
- xTaskCreate(
- (TaskFunction_t)Task2, // 任务入口函数
- (const char*)"task2", // 任务名称
- (uint16_t)128, // 任务堆栈大小
- (void*)NULL, // 任务参数
- (UBaseType_t)3, // 任务优先级
- (TaskHandle_t*)&Task2_Handle // 任务句柄指针
- );
-
- /* 退出临界区 */
- taskEXIT_CRITICAL();
-
- /* 启动FreeRTOS任务调度器 */
- vTaskStartScheduler();
- }
- /* 任务1: LED闪烁任务 */
- void Task1(void* parameter)
- {
- while (1)
- {
- // /* 翻转GPIOB的14和15引脚状态(控制LED) */
- GPIOB->ODR ^= GPIO_Pin_14 | GPIO_Pin_15;
-
- vTaskDelay(pdMS_TO_TICKS(200));
- }
- }
- /* 任务2: 串口打印任务 */
- void Task2(void* pvParameters)
- {
- while (1)
- {
- vTaskDelay(pdMS_TO_TICKS(250));
-
- /* 通过串口1输出信息 */
- printf("Hello 21ic, HelloMM32F0121 \r\n"); // 打印信息并换行
- }
- }
7.实验现象
|