前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >FreeRTOS System Tick

FreeRTOS System Tick

原创
作者头像
yuezht
发布2023-04-17 10:28:02
9330
发布2023-04-17 10:28:02
举报

FreeRTOS 系统的心跳被称为系统节拍。FreeRTOS 配置系统生成一个周期性的节拍中断。用户可以配置节拍中断的频率,通常在毫秒级别。每次节拍中断触发时,都会调用 vTaskSwitchContext() 函数。vTaskSwitchContext() 函数会选择最高优先级的就绪任务,并将其放入 pxCurrentTCB 变量中,如下所示:

代码语言:c
复制
/* Find the highest-priority queue that contains ready tasks. */
while( listLIST_IS_EMPTY( &( pxReadyTasksLists[ uxTopReadyPriority ] ) ) )
{
    configASSERT( uxTopReadyPriority );
    --uxTopReadyPriority;
}

/* listGET_OWNER_OF_NEXT_ENTRY walks through the list, so the tasks of the same 
priority get an equal share of the processor time. */
listGET_OWNER_OF_NEXT_ENTRY( pxCurrentTCB, &( pxReadyTasksLists[ uxTopReadyPriority ] ) );

在 while 循环开始之前,uxTopReadyPriority 被保证大于或等于最高优先级就绪任务的优先级。while() 循环从优先级 uxTopReadyPriority 开始,并通过 pxReadyTasksLists[] 数组向下遍历,以查找具有就绪任务的最高优先级级别。然后,listGET_OWNER_OF_NEXT_ENTRY() 从该优先级级别的就绪列表中获取下一个就绪任务。

现在,pxCurrentTCB 指向最高优先级任务,当 vTaskSwitchContext() 返回时,硬件相关的代码开始运行该任务。

这九行代码是 FreeRTOS 的核心。FreeRTOS 的其他 8900 多行代码存在的目的是确保这九行代码足以保持最高优先级任务的运行。

下图是就绪列表的高级图示。此示例具有三个优先级级别,其中一个优先级为 0 的任务,没有优先级为 1 的任务,以及三个优先级为 2 的任务。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
物联网
腾讯连连是腾讯云物联网全新商业品牌,它涵盖一站式物联网平台 IoT Explorer,连连官方微信小程序和配套的小程序 SDK、插件和开源 App,并整合腾讯云内优势产品能力,如大数据、音视频、AI等。同时,它打通腾讯系 C 端内容资源,如QQ音乐、微信支付、微保、微众银行、医疗健康等生态应用入口。提供覆盖“云-管-边-端”的物联网基础设施,面向“消费物联”和 “产业物联”两大赛道提供全方位的物联网产品和解决方案,助力企业高效实现数字化转型。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档