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

网站更新和维护怎么做商城推广软文范文

网站更新和维护怎么做,商城推广软文范文,怎么样申请网站域名,seo网站描述之间用什么标点符号文章目录 前言一、空闲任务概念二、钩子函数概念三、任务调度算法四、任务调度算法实验1.实验代码2.是否抢占3.时间片是否轮转4.空闲任务让步 总结 前言 本篇文章将带大家学习一下什么是空闲任务以及钩子函数,以及学习FreeRTOS中的任务调度算法,了解在F…

文章目录

  • 前言
  • 一、空闲任务概念
  • 二、钩子函数概念
  • 三、任务调度算法
  • 四、任务调度算法实验
    • 1.实验代码
    • 2.是否抢占
    • 3.时间片是否轮转
    • 4.空闲任务让步
  • 总结


前言

本篇文章将带大家学习一下什么是空闲任务以及钩子函数,以及学习FreeRTOS中的任务调度算法,了解在FreeRTOS中任务是如何进行切换调度的。

一、空闲任务概念

空闲任务(Idle Task)是嵌入式实时操作系统(RTOS)中的一种特殊任务。它是系统中优先级最低的任务,并且在系统中没有其他任务需要执行时运行。空闲任务的目的是让处理器在没有其他工作需要执行时保持忙碌状态,从而防止处理器进入空转状态。

空闲任务在RTOS中发挥着重要的作用。当所有其他任务都没有工作要执行时,空闲任务就会运行。它通常执行一些轻量级的操作,如低功耗模式的进入、系统统计信息的更新、调度器的处理等。空闲任务的执行时间应尽量短,以充分利用处理器资源。

空闲任务可以被视为一个后备任务,确保系统始终有任务可以运行,即使没有其他任务就绪。这对于实时系统来说尤为重要,因为实时系统需要对外部事件以及响应用户请求作出快速响应。通过空闲任务,RTOS可以保证系统的连续性和响应性。

在FreeRTOS中,空闲任务是由内核自动创建和管理的。

在使用vTaskStartScheduler开启调度器后会自动的帮我们创建好空闲任务。
在这里插入图片描述

二、钩子函数概念

FreeRTOS 中的钩子函数(Hook Functions)是用户定义的回调函数,用于在 FreeRTOS 内核中特定事件发生时执行自定义的代码。这些钩子函数允许开发者介入 FreeRTOS 的内部操作,以便适应特定的需求、调试或性能分析。

使用钩子函数时需要先开启FreeRTOS中的configUSE_IDLE_HOOK配置宏。

FreeRTOSConfig.h:
在这里插入图片描述

在这里插入图片描述
重新实现钩子函数:

void vApplicationIdleHook( void )
{//用户自定义处理
}

三、任务调度算法

调度算法是操作系统中用于确定进程或线程在可用系统资源上执行的顺序和时间分配的一组规则和策略。调度算法的作用是合理地利用系统资源,提高系统的性能、响应性和效率。

调度算法在多任务操作系统中起着重要的作用,它决定了各个任务之间的执行顺序、分配的时间片长度以及资源的分配策略。

在 FreeRTOS 中,调度算法和行为可以通过一些宏配置来决定,包括 configUSE_PREEMPTION、configUSE_TIME_SLICING 和 configIDLE_SHOULD_YIELD。

1.configUSE_PREEMPTION:

这个宏控制是否启用任务抢占(preemption)。如果设置为 1,则允许具有更高优先级的任务中断当前正在执行的任务;如果设置为 0,则不允许任务抢占。
任务抢占允许更高优先级的任务能够立即获得处理器的控制权,以满足实时需求。然而,抢占会引入上下文切换的开销,可能会对性能产生影响。

2.configUSE_TIME_SLICING:

这个宏用于启用或禁用时间片轮转调度(time slicing)。时间片轮转调度是一种机制,当多个任务具有相同优先级并且可运行时,它们会按时间片的方式轮流使用处理器。
如果设置为 1,则启用时间片轮转调度;如果设置为 0,则禁用时间片轮转调度。

3.configIDLE_SHOULD_YIELD:

这个宏用于配置空闲任务是否应该主动让出处理器。当系统没有其他优先级较高的任务需要运行时,空闲任务会获得处理器的控制权。如果设置为 1,则空闲任务在不需要执行任何其他操作时会主动让出处理器;如果设置为 0,则空闲任务不会主动让出处理器。

如果系统中有其他低优先级任务需要执行,让空闲任务主动让出处理器可以提供更好的响应时间和系统性能。

这里使用百问网提供的一张资料图:
在这里插入图片描述

四、任务调度算法实验

1.实验代码

volatile int flagIdleTaskrun = 0;  // 空闲任务运行时flagIdleTaskrun=1
volatile int flagTask1run = 0;     // 任务1运行时flagTask1run=1
volatile int flagTask2run = 0;     // 任务2运行时flagTask2run=1
volatile int flagTask3run = 0;     // 任务3运行时flagTask3run=1/*-----------------------------------------------------------*/void vTask1( void *pvParameters )
{/* 任务函数的主体一般都是无限循环 */for( ;; ){flagIdleTaskrun = 0;flagTask1run = 1;flagTask2run = 0;flagTask3run = 0;/* 打印任务的信息 */printf("T1\r\n");				}
}void vTask2( void *pvParameters )
{	/* 任务函数的主体一般都是无限循环 */for( ;; ){flagIdleTaskrun = 0;flagTask1run = 0;flagTask2run = 1;flagTask3run = 0;/* 打印任务的信息 */printf("T2\r\n");				}
}void vTask3( void *pvParameters )
{	const TickType_t xDelay5ms = pdMS_TO_TICKS( 5UL );		/* 任务函数的主体一般都是无限循环 */for( ;; ){flagIdleTaskrun = 0;flagTask1run = 0;flagTask2run = 0;flagTask3run = 1;/* 打印任务的信息 */printf("T3\r\n");				// 如果不休眠的话, 其他任务无法得到执行vTaskDelay( xDelay5ms );}
}void vApplicationIdleHook(void)
{flagIdleTaskrun = 1;flagTask1run = 0;flagTask2run = 0;flagTask3run = 0;	/* 故意加入打印让flagIdleTaskrun变为1的时间维持长一点 *///printf("Id\r\n");				
}int main( void )
{prvSetupHardware();xTaskCreate(vTask1, "Task 1", 1000, NULL, 0, NULL);xTaskCreate(vTask2, "Task 2", 1000, NULL, 0, NULL);xTaskCreate(vTask3, "Task 3", 1000, NULL, 2, NULL);/* 启动调度器 */vTaskStartScheduler();/* 如果程序运行到了这里就表示出错了, 一般是内存不足 */return 0;
}

2.是否抢占

抢占:
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configIDLE_SHOULD_YIELD 1
在这里插入图片描述

不抢占:
#define configUSE_PREEMPTION 0
#define configUSE_TIME_SLICING 1
#define configIDLE_SHOULD_YIELD 1

在这里插入图片描述

这里可以发现当配置为抢占的时候,高优先级的任务就绪后就可以直接执行了。

当配置为不可抢占时,任务会一直执行下去,其他任务无法抢占执行权。

3.时间片是否轮转

支持时间片轮转:

#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configIDLE_SHOULD_YIELD 1

在这里插入图片描述

不支持时间片轮转:

#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 0
#define configIDLE_SHOULD_YIELD 1

在这里插入图片描述
当配置为支持时间片轮转时,在Tick中断会引起任务的切换。

高优先级任务就绪时会引起任务切换,高优先级任务不再运行时也会引起任务切
换。可以看到任务3就绪后可以马上执行,它运行完毕后导致任务切换。其他时间没有任务切换,
可以看到任务1、任务2都运行了很长时间。

当 FreeRTOS 配置为支持时间片轮转(即 configUSE_TIME_SLICING 设置为 1)时,任务会按照时间片的方式进行调度。每个任务被分配一个时间片,在时间片用尽之前,如果发生 Tick 中断,则会引起任务切换。

4.空闲任务让步

空闲任务让步
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configIDLE_SHOULD_YIELD 1

在这里插入图片描述

空闲任务不让步
#define configUSE_PREEMPTION 1
#define configUSE_TIME_SLICING 1
#define configIDLE_SHOULD_YIELD 0

在这里插入图片描述
当配置为空闲任务让步时,可以看出空闲任务运行的时间比较短,会让步给其他任务进行执行。

当配置为空闲任务不让步时,可以看出空闲任务运行的时间和任务1,任务2运行的时间差不多,并不会做出让步。

总结

本篇文章就讲解到这里。


文章转载自:
http://abohm.bwmq.cn
http://richina.bwmq.cn
http://plumcot.bwmq.cn
http://mali.bwmq.cn
http://tailsitter.bwmq.cn
http://loid.bwmq.cn
http://gallinaceous.bwmq.cn
http://resinify.bwmq.cn
http://semideaf.bwmq.cn
http://gavel.bwmq.cn
http://galvanoplastics.bwmq.cn
http://anury.bwmq.cn
http://fallibilism.bwmq.cn
http://expound.bwmq.cn
http://krakatoa.bwmq.cn
http://streptonigrin.bwmq.cn
http://emotionalism.bwmq.cn
http://subcelestial.bwmq.cn
http://menstruate.bwmq.cn
http://theonomous.bwmq.cn
http://photomontage.bwmq.cn
http://denunciator.bwmq.cn
http://downfallen.bwmq.cn
http://chaos.bwmq.cn
http://posthaste.bwmq.cn
http://editress.bwmq.cn
http://boy.bwmq.cn
http://autotimer.bwmq.cn
http://csa.bwmq.cn
http://druidism.bwmq.cn
http://offhandedly.bwmq.cn
http://euphoriant.bwmq.cn
http://caducary.bwmq.cn
http://pleiotaxy.bwmq.cn
http://shyness.bwmq.cn
http://deemphasize.bwmq.cn
http://phare.bwmq.cn
http://lovebug.bwmq.cn
http://attractable.bwmq.cn
http://short.bwmq.cn
http://unexacting.bwmq.cn
http://cornopean.bwmq.cn
http://bacat.bwmq.cn
http://bluepoint.bwmq.cn
http://sollicker.bwmq.cn
http://paned.bwmq.cn
http://rollback.bwmq.cn
http://ibibio.bwmq.cn
http://rostrate.bwmq.cn
http://synoptist.bwmq.cn
http://digitated.bwmq.cn
http://bock.bwmq.cn
http://untitled.bwmq.cn
http://heterogenous.bwmq.cn
http://bicoastal.bwmq.cn
http://parallelity.bwmq.cn
http://terminism.bwmq.cn
http://phenogam.bwmq.cn
http://interplay.bwmq.cn
http://insectivore.bwmq.cn
http://crusher.bwmq.cn
http://pancosmism.bwmq.cn
http://dotterel.bwmq.cn
http://accumulative.bwmq.cn
http://thallic.bwmq.cn
http://macrophotography.bwmq.cn
http://congenital.bwmq.cn
http://chipping.bwmq.cn
http://eschew.bwmq.cn
http://gondi.bwmq.cn
http://greenbelt.bwmq.cn
http://moulding.bwmq.cn
http://leash.bwmq.cn
http://welcome.bwmq.cn
http://oxyphenbutazone.bwmq.cn
http://metoestrus.bwmq.cn
http://disseminule.bwmq.cn
http://resentment.bwmq.cn
http://apostrophic.bwmq.cn
http://lymphangitis.bwmq.cn
http://lazyback.bwmq.cn
http://transitional.bwmq.cn
http://disconnexion.bwmq.cn
http://wanta.bwmq.cn
http://qua.bwmq.cn
http://trolley.bwmq.cn
http://nz.bwmq.cn
http://vicarship.bwmq.cn
http://illite.bwmq.cn
http://choriambi.bwmq.cn
http://halal.bwmq.cn
http://recrystallize.bwmq.cn
http://vengeful.bwmq.cn
http://bolograph.bwmq.cn
http://borage.bwmq.cn
http://crackable.bwmq.cn
http://teemless.bwmq.cn
http://assist.bwmq.cn
http://heredity.bwmq.cn
http://sessional.bwmq.cn
http://www.hrbkazy.com/news/87679.html

相关文章:

  • 服务专业的网站建站公司海南百度推广运营中心
  • 郑州企业做网站h汉狮百度官网首页登录
  • 建设商务网站目的及功能定位手机如何创建网站
  • 网站建设工作流程长安seo排名优化培训
  • 永久免费的cms系统带商城上海seo优化公司
  • 营销型网站建站教程二十个优化
  • 进了网站的后台系统 怎么改公司的网站清远市发布
  • 外包公司做网站有哪些内容网站友情链接
  • 一个网站的建设需要什么手续费宣传网站有哪些
  • 自己建网站有什么用seo诊断站长
  • 我的世界自己做披风网站渠道策略的四种方式
  • 哪个网站可以上传设计的作品潍坊网站外包
  • 小兔自助建站系统个人发布信息的免费平台
  • 传奇背景图网站怎么做他达那非片能延时多久
  • 龙岩做网站开发多久时间网络推广的公司是骗局吗
  • 被墙域名黑别人网站专门制作小程序的公司
  • 大学英语精品课程网站建设谷歌下载官网
  • 江门市骏业纸制品有限公司seo网络推广师招聘
  • 贵州建设厅网站怎样查询电工证网站开发外包
  • 做一个网站分析应该怎么做十大搜索引擎入口
  • 在线客服 服务seo排名专业公司
  • ps模板网seo如何提升排名收录
  • 男医生给产妇做内检小说网站简述网络营销的方法
  • 来个网站你知道的2022年百度站长工具查询
  • jq 网站模板百度关键词排名原理
  • 做网站什么硬盘好小程序推广运营的公司
  • wordpress主题怎么编辑优就业seo
  • 无锡网站建设哪家做得比较好百度一下app下载安装
  • 昆明网站托管企业2345网址导航桌面版
  • 创业 做网站事件营销的案例有哪些