当前位置: 首页 > news >正文

网站建设百度资源域名网站建设教程

网站建设百度资源,域名网站建设教程,公司制作网站多少钱,网站后台生成静态页面文章目录 前言一、什么是任务优先级二、FreeRTOS如何分辨出优先级最高可运行的任务三、FreeRTOS中的时钟节拍Tick四、什么是时间片五、相同优先级任务怎么进行切换六、任务优先级实验七、修改任务优先级总结 前言 本篇文章将带大家学习FreeRTOS中的任务优先级#xff0c;并且… 文章目录 前言一、什么是任务优先级二、FreeRTOS如何分辨出优先级最高可运行的任务三、FreeRTOS中的时钟节拍Tick四、什么是时间片五、相同优先级任务怎么进行切换六、任务优先级实验七、修改任务优先级总结 前言 本篇文章将带大家学习FreeRTOS中的任务优先级并且了解什么是任务优先级 一、什么是任务优先级 在FreeRTOS中任务优先级用于确定任务的执行顺序和调度顺序。任务优先级越高任务被调度执行的频率越高。FreeRTOS支持使用整数值来表示任务优先级整数值越高优先级越高。 FreeRTOS中任务优先级的范围通常是从0到configMAX_PRIORITIES-1其中configMAX_PRIORITIES是一个配置常量表示系统中支持的最大任务优先级数量。 在FreeRTOSconfig.h中可以查看到任务优先级的配置宏 二、FreeRTOS如何分辨出优先级最高可运行的任务 1.通用方法 使用C函数实现对所有的架构都是同样的代码。对configMAX_PRIORITIES的取值没有限制。但 是configMAX_PRIORITIES的取值还是尽量小因为取值越大越浪费内存也浪费时间。 configUSE_PORT_OPTIMISED_TASK_SELECTION被定义为0、或者未定义时使用此方法。 2.架构相关的优化的方法 架构相关的汇编指令可以从一个32位的数里快速地找出为1的最高位。使用这些指令可以快速 找出优先级最高的、可以运行的任务。 使用这种方法时configMAX_PRIORITIES的取值不能超过32。 configUSE_PORT_OPTIMISED_TASK_SELECTION被定义为1时使用此方法 三、FreeRTOS中的时钟节拍Tick FreeRTOS中的时钟节拍Tick是一个基本的时间单位用于管理任务调度和时间相关功能。时钟节拍的概念在实时操作系统中非常重要因为它提供了时间的基本度量单位允许任务和定时器按照预定的时间间隔执行。 以下是有关FreeRTOS中时钟节拍的重要信息 1.时钟节拍的单位时钟节拍是一个抽象的时间单位通常表示为一个整数值。它可以映射到实际时间但时钟节拍的精度和长度是可配置的。在大多数情况下时钟节拍是以毫秒为单位的但它可以配置为更短或更长的时间间隔具体取决于应用程序的需求。 2.时钟节拍计数器FreeRTOS维护一个时钟节拍计数器用于跟踪已经过去的时钟节拍数。这个计数器通常是一个32位的值可以支持大范围的时间跟踪。 3.任务调度任务的调度和切换通常发生在时钟节拍的倍数上。当时钟节拍计数器达到任务的时间间隔通常称为任务的延迟或周期时任务可能会被置于就绪状态以便在下一个任务切换点执行。 4.定时器时钟节拍也用于定时器功能。通过设置定时器的周期为时钟节拍的倍数可以实现定时任务和事件的触发。 5.配置和定制FreeRTOS允许用户配置时钟节拍的频率和精度以适应特定应用的需求。这可以通过修改FreeRTOS配置文件中的参数来完成。例如可以配置时钟节拍为1毫秒10毫秒甚至更短的时间间隔以满足实时性要求。 6.时钟节拍在FreeRTOS中扮演了关键的角色它不仅用于任务调度还用于实现定时等待、超时操作和时间相关的功能。 FreeRTOS中的Tick值通常被配置为1ms 四、什么是时间片 时间片Time slice是操作系统调度算法中的概念用于分配处理器时间给多个可运行的任务。它是指操作系统将处理器的执行时间划分为固定长度的小段每个任务在一个时间片内获得处理器的执行时间。 五、相同优先级任务怎么进行切换 在FreeRTOS默认采用了时间片轮转调度的策略给每一个任务都分配一个固定的时间片这个时间片的大小也就是1ms可以通过修改configTICK_RATE_HZ这个宏来修改时间片的大小。 时间片大小毫秒 1秒 / configTICK_RATE_HZ Task1执行完一个时间片后会发生一次tick中断然后进入tick中断处理函数中在tick中断中选择要执行的下一个中断当执行完tick中断后就切换Task2执行。 六、任务优先级实验 // 任务句柄 TaskHandle_t Task1Handle; TaskHandle_t Task2Handle;// 任务函数 void Task1(void* pvParameters) {while (1) {vTaskDelay(1000);printf(Task1 is running\n);} }void Task2(void* pvParameters) {while (1) {vTaskDelay(1000);printf(Task2 is running\n);} }int main(void) {// 创建两个任务xTaskCreate(Task1, Task1, configMINIMAL_STACK_SIZE, NULL, 1, Task1Handle);xTaskCreate(Task2, Task2, configMINIMAL_STACK_SIZE, NULL, 2, Task2Handle);// 启动调度器vTaskStartScheduler();while (1) {// 主循环为空所有的任务由 FreeRTOS 调度} }因为任务2的优先级比任务1的优先级高所以会先打印Task2 is running然后再打印Task1 is running以此往复。 七、修改任务优先级 uxTaskPriorityGet() 和 vTaskPrioritySet() 是FreeRTOS中用于获取和设置任务优先级的函数。 uxTaskPriorityGet() 函数用于获取任务的当前优先级。它接受一个参数即任务句柄返回一个 UBaseType_t 类型的值表示任务的当前优先级。 vTaskPrioritySet() 函数用于设置任务的优先级。它接受两个参数第一个参数是要设置优先级的任务句柄第二个参数是要设置的优先级值。这个函数没有返回值。 以下是一个使用 uxTaskPriorityGet() 和 vTaskPrioritySet() 函数的示例代码 TaskHandle_t Task1Handle; TaskHandle_t Task2Handle;void Task1(void* pvParameters) {while (1) {// 获取任务优先级UBaseType_t priority uxTaskPriorityGet(NULL);printf(Task1 priority: %u\n, priority);vTaskDelay(pdMS_TO_TICKS(1000));} }void Task2(void* pvParameters) {while (1) {// 获取任务优先级UBaseType_t priority uxTaskPriorityGet(NULL);printf(Task2 priority: %u\n, priority);// 设置任务优先级vTaskPrioritySet(Task1Handle, 2);vTaskDelay(pdMS_TO_TICKS(5000));// 恢复任务优先级vTaskPrioritySet(Task1Handle, 1);} }int main(void) {xTaskCreate(Task1, Task1, configMINIMAL_STACK_SIZE, NULL, 1, Task1Handle);xTaskCreate(Task2, Task2, configMINIMAL_STACK_SIZE, NULL, 2, Task2Handle);vTaskStartScheduler();while (1) {// 主循环为空所有的任务由 FreeRTOS 调度}在这个示例代码中我们创建了两个任务 Task1 和 Task2并使用 uxTaskPriorityGet() 和 vTaskPrioritySet() 进行任务优先级的获取和设置。 在 Task1 中我们首先使用 uxTaskPriorityGet(NULL) 获取当前任务的优先级并通过 printf 打印出来。然后使用 vTaskDelay() 延迟1秒钟。 在 Task2 中我们首先获取当前任务的优先级然后通过 vTaskPrioritySet(Task1Handle, 2) 将 Task1 的优先级设置为2。接着延迟5秒钟后再通过 vTaskPrioritySet(Task1Handle, 1) 恢复 Task1 的优先级为1。 通过运行这个示例代码将会看到在任务的执行过程中任务的优先级获取和设置操作被执行并通过打印语句输出任务的优先级信息。 注意在使用 uxTaskPriorityGet() 和 vTaskPrioritySet() 函数时需要确保任务句柄是正确的并且函数的调用时机是合适的以避免潜在的问题和不一致性。 总结 本篇文章就讲解到这里。
http://www.zqtcl.cn/news/896486/

相关文章:

  • 如何查询网站是否备案江苏省句容建设局网站
  • 中国商业网点建设开发中心官方网站天津中小企业网站制作
  • 莱芜网站建设及优化云开发小程序源码
  • 珠海商城网站学校建网站
  • 自己网站如何做关键词排名网站配色网
  • 做二手物资哪个网站好江苏大汉建设实业集团网站
  • j2ee 建设简单网站Wordpress 导航条样式
  • 创客贴网页设计网站企业局域网
  • 深圳哪里网站制作云南建设网站首页
  • 赤峰做网站哪家好岳阳网站设计u
  • 腾讯云10g数字盘做网站够么网站开元棋牌怎么做app
  • 天津网站建设信息科技有限公司门户网站开发公司排名
  • 优秀策划设计网站jsp mysql开发网站开发
  • 深圳做微信网站建设我爱水煮鱼 wordpress
  • 企业网站推广是不是必要的蓝色网站建设
  • 浙江企业响应式网站建设网站建设 找vx cp5173
  • nodejs做的网站音乐网站制作教程
  • 怎么利用网站做外链接阿里云网站部署
  • 做学校网站简述网站的制作步骤
  • 怎样让网站响应式推广策划案
  • 网站开发 面试 适当吹牛网站文件命名规则
  • 河北省建设中心网站图片分享网站源码
  • 工信部网站备案修改个人求职网站怎么做
  • 关于建设公司网站的申请宁波网站制作出售
  • 织梦电影网站免费模板网站域名asia是
  • 顺德中小企业网站建设宁乡市建设局网站
  • 静态网页模板 网站模板兰州做网站价格
  • 吕梁推广型网站建设godaddy托管 wordpress
  • 什么网站百度收录好珠海哪里做网站的
  • 如何介绍网站模板金融网站模版