【无标题】如何配置 FreeRTOS 系统的 tick 时间和任务优先级?

配置系统的Tick时间

  1. 修改configTICK_RATE_HZ

    • 在FreeRTOS配置文件(通常是FreeRTOSConfig.h)中,找到configTICK_RATE_HZ宏定义。这个宏定义了每秒tick的次数。
    • 根据应用需求设置合适的值。例如,如果希望每个tick代表1毫秒,那么将configTICK_RATE_HZ设置为1000。
  2. 配置系统时钟

    • 根据具体的硬件平台和使用的时钟源,配置系统时钟以满足tick频率的要求。这通常需要在启动代码或硬件初始化代码中完成。
  3. 启动FreeRTOS内核

    • 在应用程序的入口函数中调用FreeRTOS内核的启动函数(如vTaskStartScheduler()),开始任务调度。

配置任务优先级

  1. 理解任务优先级范围

    • FreeRTOS中任务优先级的范围通常是从0到configMAX_PRIORITIES - 1,其中configMAX_PRIORITIES是一个配置常量,表示系统中支持的最大任务优先级数量。
    • 数值越大优先级越高。空闲任务的优先级通常被设置为最低(即0)。
  2. 创建任务时指定优先级

    • 使用xTaskCreate() API函数创建任务时,可以指定任务的初始优先级。
  3. 修改任务优先级

    • 使用vTaskPrioritySet() API函数可以修改任务的优先级。
      • 参数xTask是传递进某个任务的句柄,可以是NULL,表示修改自己的优先级。
      • 参数uxNewPriority表示新设置的优先级,取值范围为0到configMAX_PRIORITIES - 1
  4. 获取任务优先级

    • 使用uxTaskPriorityGet() API函数可以获取任务的当前优先级。
      • 参数xTask是某个任务句柄,可以是NULL,表示获取自己的优先级。
      • 返回值就是该任务的优先级。

示例代码

以下是一个创建两个任务并设置不同优先级的示例代码:

 

#include <stdio.h> #include "FreeRTOS.h" #include "task.h" TaskHandle_t Task1Handle; TaskHandle_t Task2Handle; void Task1(void* pvParameters) { while (1) { vTaskDelay(1000); // 延时1个tick周期 printf("Task1 is running "); } } void Task2(void* pvParameters) { while (1) { vTaskDelay(1000); // 延时1个tick周期 printf("Task2 is running "); } } int main(void) { // 创建两个任务,并指定不同的优先级 xTaskCreate(Task1, "Task1", configMINIMAL_STACK_SIZE, NULL, 1, &Task1Handle); xTaskCreate(Task2, "Task2", configMINIMAL_STACK_SIZE, NULL, 2, &Task2Handle); // 启动调度器 vTaskStartScheduler(); // 如果一切正常,main函数不应该执行到这里 for (;;); }

在这个示例中,Task2的优先级比Task1高,因此Task2会先运行。当Task2进入延时状态后,Task1才会获得CPU控制权并运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值