FreeRTOS静态方法实验两个LED灯闪烁的实验代码
时间: 2024-10-16 15:08:36 浏览: 33
时间片调度实验-keb变频器 f5中文说明书-维修安装调试
FreeRTOS是一个轻量级实时操作系统内核,主要用于嵌入式系统,特别是那些资源受限的设备上。在这里,我们将会展示一个简单的FreeRTOS示例,使用静态方法控制两个LED灯的闪烁,假设你在STM32这样的微控制器上工作,并使用Keil MDK等IDE。
```c
#include "FreeRTOS.h"
#include "task.h"
// 定义LED相关的宏
#define LED0 (GPIO_Pin_0)
#define LED1 (GPIO_Pin_1)
#define LED_GPIO_PORT GPIOA
// 静态函数用于点亮和熄灭LED
static void toggle_LED(uint8_t led_num) {
static uint8_t state = false;
if(state == false) {
__HAL_GPIO_SET_PIN(LED_GPIO_PORT, led_num);
state = true;
} else {
__HAL_GPIO CLEAR_PIN(LED_GPIO_PORT, led_num);
state = false;
}
}
// 定义任务
void vLEDTask(void *pvParameters) {
for(;;) {
toggle_LED(LED0); // 点亮LED0
vTaskDelay(pdMS_TO_TICKS(500)); // 暂停500毫秒
toggle_LED(LED1); // 点亮LED1
vTaskDelay(pdMS_TO_TICKS(500)); // 再暂停500毫秒
}
}
int main(void) {
// 初始化FreeRTOS和GPIO
// ... (这部分通常包含初始化任务调度、GPIO配置等)
// 创建LED任务
xTaskCreate(vLEDTask, "LED Task", configMINIMAL_STACK_SIZE, NULL, tskIDLE_PRIORITY + 1, NULL);
// 启动任务并进入无限循环
vTaskStartScheduler();
// 这里永远不会到达,因为一旦启动了调度器,程序将进入无休止的任务切换
return 0;
}
阅读全文