广告
返回顶部
首页 > 资讯 > 操作系统 >FreeRTOS实时操作系统的内核控制是什么
  • 801
分享到

FreeRTOS实时操作系统的内核控制是什么

2023-06-29 22:06:34 801人浏览 泡泡鱼
摘要

这篇文章主要介绍“FreeRTOS实时操作系统的内核控制是什么”,在日常操作中,相信很多人在FreeRTOS实时操作系统的内核控制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”FreeRTOS实时操作系

这篇文章主要介绍“FreeRTOS实时操作系统的内核控制是什么”,在日常操作中,相信很多人在FreeRTOS实时操作系统的内核控制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”FreeRTOS实时操作系统的内核控制是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

前言

内核控制的一些功能需要移植层提供,为了方便移植,这些api函数用宏来实现,比如上下文切换、进入和退出临界区、禁止和使能可屏蔽中断。内核控制函数还包括启动和停止调度器、挂起和恢复调度器以及用于低功耗模式的调整系统节拍函数。

1.强制上下文切换宏

      taskYIELD:用于强制上下文切换的宏。在中断服务程序中的等价版本为portYIELD_FROM_ISR,这也是个宏,其实现取决于移植层。

      用于上下文切换的实际代码由移植层提供。对于Cortex-M3硬件,这个宏会引起PendSV中断。

2.进入临界区宏

      taskENTER_CRITICAL:用于进入临界区的宏。在临界区中不会发生上下文切换。

     进入临界区的实际代码由移植层提供,对于Cortex-M3硬件,先禁止所有RTOS可屏蔽中断,这可以通过向basepri 寄存器写入configMAX_SYSCALL_INTERRUPT_PRioRITY来实现。basepri寄存器被设置成某个值后,所有优先级号大于等于此值的中断都被禁止,但若被设置为0,则不关闭任何中断,0为默认值。然后临界区嵌套计数器增1。

3.退出临界区宏

      taskEXIT_CRITICAL:用于退出临界区的宏。

      退出临界区的实际代码有移植层提供,对于Cortex-M3硬件,先将临界区嵌套计数器减1,如果临界区计数器为零,则使能所有RTOS可屏蔽中断,这可以通过向basepri 寄存器写入0来实现。

4.禁止可屏蔽中断宏

      taskDISABLE_INTERRUPTS:禁止所有RTOS可屏蔽中断。在调用宏taskENTER_CRITICAL进入临界区时,也会间接调用该宏禁止所有RTOS可屏蔽中断。

5.使能可屏蔽中断宏

      taskENABLE_INTERRUPTS:使能所有RTOS可屏蔽中断。在调用宏taskEXIT_CRITICAL退出临界区时,也会间接调用该宏使能所有RTOS可屏蔽中断。

6.启动调度器

6.1函数描述

void vTaskStartScheduler( void );

      启动RTOS调度器,之后RTOS内核控制哪个任务执行以及何时执行。

      当调用vTaskStartScheduler()后,空闲任务被自动创建。如果configUSE_TIMERS被设置为1,定时器后台任务也会被创建。

      如果vTaskStartScheduler()成功执行,则该函数不会返回,直到有任务调用了vTaskEndScheduler()。如果因为RAM不足而无法创建空闲任务,该函数也可能执行失败,并会立刻返回调用处。

7.停止调度器

7.1函数描述

void vTaskEndScheduler( void );

      仅用于x86硬件架构中。

      停止RTOS内核系统节拍时钟。所有创建的任务自动删除并停止多任务调度。

8.挂起调度器

8.1函数描述

void vTaskSuspendAll( void );

      挂起调度器,但不禁止中断。当调度器挂起时,不会进行上下文切换。调度器挂起后,正在执行的任务会一直继续执行,内核不再调度(意味着当前任务不会被切换出去),直到该任务调用了xTaskResumeAll ()函数。

      内核调度器挂起期间,那些可以引起上下文切换的API函数(如vTaskDelayUntil()、xQueueSend()等)决不可使用。

9.恢复被挂起的调度器

9.1函数描述

BaseType_t xTaskResumeAll( void );

      恢复因调用vTaskSuspendAll()函数而挂起的实时内核调度器。xTaskResumeAll()仅恢复调度器,它不会恢复那些被vTaskSuspend()函数挂起的任务。

9.2返回值

      返回pdTRUE 表示恢复调度器引起了一次上下文切换,否则,返回pdfALSE。

9.3用法举例

 voidvTask1( void * pvParameters ) {     for( ;; )     {                                    xTaskSuspendAll ();                                    if( !xTaskResumeAll () )         {              taskYIELD ();         }     } }

10.调整系统节拍

10.1函数描述

void vTaskStepTick( TickType_txTicksToJump );

      如果RTOS使能tickless空闲功能,每当只有空闲任务被执行时,系统节拍时钟中断将会停止,微控制器进入低功耗模式。当微控制器退出低功耗后,系统节拍计数器必须被调整,将进入低功耗的时间弥补上。

      如果FreeRTOS移植文件中定义了宏portSUPPRESS_TICKS_AND_SLEEP()实体,则函数vTaskStepTick用于在这个宏portSUPPRESS_TICKS_AND_SLEEP()实体内部调整系统节拍计数器。函数vTaskStepTick是一个全局函数,所以也可以在宏portSUPPRESS_TICKS_AND_SLEEP()实体中重写该函数。

      在文件FreeRTOSConfig.h中,宏configUSE_TICKLESS_IDLE必须设置为1,此函数才有效。

10.2参数描述

xTickToJump:时间值,单位是系统节拍周期,表示微处理器进入低功耗的时间,函数根据这个值来调整系统节拍计数器的值。

10.3用法举例

#defineportSUPPRESS_TICKS_AND_SLEEP( xIdleTime ) vApplicationSleep( xIdleTime ) void vApplicationSleep(TickType_t xExpectedIdleTime ){ unsigned long ulLowPowerTimeBeforeSleep,ulLowPowerTimeAfterSleep;  ulLowPowerTimeBeforeSleep =ulGetExternalTime();  prvStopTickInterruptTimer();  vSetWakeTimeInterrupt( xExpectedIdleTime );  prvSleep();  ulLowPowerTimeAfterSleep =ulGetExternalTime();  vTaskStepTick( ulLowPowerTimeAfterSleep –ulLowPowerTimeBeforeSleep );  prvStartTickInterruptTimer();}#defineportSUPPRESS_TICKS_AND_SLEEP( xIdleTime ) vApplicationSleep( xIdleTime ) void vApplicationSleep(TickType_t xExpectedIdleTime ){    unsigned long ulLowPowerTimeBeforeSleep,ulLowPowerTimeAfterSleep;         ulLowPowerTimeBeforeSleep =ulGetExternalTime();         prvStopTickInterruptTimer();         vSetWakeTimeInterrupt( xExpectedIdleTime );         prvSleep();         ulLowPowerTimeAfterSleep =ulGetExternalTime();                vTaskStepTick( ulLowPowerTimeAfterSleep –ulLowPowerTimeBeforeSleep );        prvStartTickInterruptTimer();}

到此,关于“FreeRTOS实时操作系统的内核控制是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: FreeRTOS实时操作系统的内核控制是什么

本文链接: https://www.lsjlt.com/news/326545.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • FreeRTOS实时操作系统的内核控制是什么
    这篇文章主要介绍“FreeRTOS实时操作系统的内核控制是什么”,在日常操作中,相信很多人在FreeRTOS实时操作系统的内核控制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”FreeRTOS实时操作系...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的内核控制示例解析
    目录前言1.强制上下文切换宏2.进入临界区宏3.退出临界区宏4.禁止可屏蔽中断宏5.使能可屏蔽中断宏6.启动调度器6.1函数描述7.停止调度器7.1函数描述8.挂起调度器8.1函数描...
    99+
    2022-11-13
  • FreeRTOS实时操作系统内核配置说明
    目录1.configUSE_PREEMPTION2.configUSE_PORT_OPTIMISED_TASK_SELECTION3.configUSE_TICKLESS_I...
    99+
    2022-11-13
  • FreeRTOS实时操作系统内核配置的方法
    今天小编给大家分享一下FreeRTOS实时操作系统内核配置的方法的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。FreeRTO...
    99+
    2023-06-29
  • FreeRTOS实时操作系统Cortex-M内核使用注意事项是什么
    这篇文章主要介绍了FreeRTOS实时操作系统Cortex-M内核使用注意事项是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇FreeRTOS实时操作系统Cortex-M内核使用注意事项是什么文章都会有所收...
    99+
    2023-06-29
  • FreeRTOS实时操作系统结构是什么
    本文小编为大家详细介绍“FreeRTOS实时操作系统结构是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“FreeRTOS实时操作系统结构是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。 Fre...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的任务是什么
    这篇文章主要介绍了FreeRTOS实时操作系统的任务是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇FreeRTOS实时操作系统的任务是什么文章都会有所收获,下面我们一起来看看吧。1. 任务和协程(Co-r...
    99+
    2023-06-29
  • FreeRTOS实时操作系统Cortex-M内核使用注意事项
    前言 在阅读本文之前,有两个定义在FreeRTOSConfig.h中的宏,你必须先明白它们是什么意思,《FreeRTOS内核配置说明》一文中,讲解了这两个宏: configKERNE...
    99+
    2022-11-13
  • FreeRTOS实时操作系统的内存怎么管理
    这篇“FreeRTOS实时操作系统的内存怎么管理”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“FreeRTOS实时操作系统的...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的内存管理分析
    目录前言1.heap_1.c功能简介:2.heap_2.c功能简介:3.heap_3.c功能简介:4.heap_4.c功能简介:5.heap_5.c(V8.1.0新增)前言 本文介绍...
    99+
    2022-11-13
  • FreeRTOS实时操作系统的任务应用函数是什么
    本文小编为大家详细介绍“FreeRTOS实时操作系统的任务应用函数是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“FreeRTOS实时操作系统的任务应用函数是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的多优先级怎么实现
    这篇文章主要介绍“FreeRTOS实时操作系统的多优先级怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“FreeRTOS实时操作系统的多优先级怎么实现”文章能帮助大家解决问题。如何实现任务多优...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的任务通知怎么实现
    这篇文章主要介绍“FreeRTOS实时操作系统的任务通知怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“FreeRTOS实时操作系统的任务通知怎么实现”文章能帮助大家解决问题。前言注:本文介绍...
    99+
    2023-06-29
  • FreeRTOS实时操作系统空闲任务的阻塞延时怎么实现
    这篇文章主要介绍“FreeRTOS实时操作系统空闲任务的阻塞延时怎么实现”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“FreeRTOS实时操作系统空闲任务的阻塞延时怎么实现”文章能帮助大家解决问题。...
    99+
    2023-06-29
  • FreeRTOS实时操作系统的任务怎么创建和删除
    本文小编为大家详细介绍“FreeRTOS实时操作系统的任务怎么创建和删除”,内容详细,步骤清晰,细节处理妥当,希望这篇“FreeRTOS实时操作系统的任务怎么创建和删除”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧...
    99+
    2023-06-29
  • Linu系统实时监控日志内容的方法是什么
    这篇文章的内容主要围绕Linu系统实时监控日志内容的方法是什么进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!1. tail命令 实时监控日志如上所述...
    99+
    2023-06-28
  • Git分布式版本控制系统的核心原理是什么?
    Git是目前最流行的分布式版本控制系统,它具有高效、快速、稳定等优点,被广泛应用于软件开发、文档管理等领域。那么在本文中,我们将详细探讨Git分布式版本控制系统的核心原理,带你深入了解Git的原理和机制。 Git分布式版本控制系统的核心...
    99+
    2023-09-14
    分布式 git leetcode
  • Linux操作系统的内存管理方法是什么
    这篇文章主要讲解了“Linux操作系统的内存管理方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux操作系统的内存管理方法是什么”吧!在Linux下查看内存我们一般用comma...
    99+
    2023-06-17
  • Linux操作系统存储子系统核心技术中的硬盘与RAID是什么意思
    这篇文章将为大家详细讲解有关Linux操作系统存储子系统核心技术中的硬盘与RAID是什么意思,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Linux操作系统的存储子系统应该是Linux中最为...
    99+
    2023-06-15
  • 实时监控 Windows 系统的 Java Spring 解决方案是什么?
    随着企业信息化的快速发展,越来越多的企业开始选择使用 Java Spring 进行系统开发。Java Spring 是一个非常流行的开发框架,它可以帮助开发人员快速构建高质量的应用程序。但是,在生产环境中,Java Spring 应用程序可...
    99+
    2023-10-01
    spring 实时 windows
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作