资讯动态

FreeRTOS跑马灯实验和优先级任务执行揭秘

发布时间:2026/10/18 7:06:44 来源:尧图企业网站定制
1.实现操作系统版的跑马灯实验高/低速始终调成外部晶振模式默认任务的定义1.复制工程模板出FreeRTOS_LED_TEST2.新建任务任务级编程中断级编程个数-- 一个外设一个任务3.如何新建cubmx配置或者写代码。4.编写两个任务函数基于裸机实现效果两个灯每隔500ms闪一次2 测试优先级高的任务先运行调试用printf去调试2.1 闪烁的同时打印led0/led1将串口进行重定向//串口重定向放到main.c #ifdef __GNUC__ #define PUTCHAR_PROTOTYPE int __io_putchar(int ch) PUTCHAR_PROTOTYPE { HAL_UART_Transmit(huart1,(uint8_t *)ch,1,HAL_MAX_DELAY); return ch; } #endif哪里使用哪里引入即加上头文件在BEGIN 到 END Includes内部然后再task1和task2里加入printf来观察任务执行顺序void led0Task_Function(void *argument) { /* USER CODE BEGIN led0Task_Function */ //该任务实现LED0闪烁依照裸机思路 /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); printf(led0\r\n); osDelay(250); } /* USER CODE END led0Task_Function */ }void led1Task_Function(void *argument) { /* USER CODE BEGIN led1Task_Function */ /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); printf(led1\r\n); osDelay(250); } /* USER CODE END led1Task_Function */ }观察xcom结果因为前边设置的led1的优先级比led0高所以led1的任务会先运行。2.2 具象化优先级任务顺序展示只打印一次111或者222void led0Task_Function(void *argument) { /* USER CODE BEGIN led0Task_Function */ //该任务实现LED0闪烁依照裸机思路 /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(LED0_GPIO_Port, LED0_Pin); for(;flag10;flag1){ printf(111\r\n); } osDelay(250); } /* USER CODE END led0Task_Function */ }void led1Task_Function(void *argument) { /* USER CODE BEGIN led1Task_Function */ /* Infinite loop */ for(;;) { HAL_GPIO_TogglePin(LED1_GPIO_Port, LED1_Pin); for(;flag20;flag2){ printf(222\r\n); } osDelay(250); } /* USER CODE END led1Task_Function */ }打印结果是

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价 →
↑