您的位置 首页 > 德语词汇

tasks是什么意思?用法、例句?FreeRTOS——任务(tasks)

大家好,关于tasks是什么意思?用法、例句很多朋友都还不太明白,今天小编就来为大家分享关于FreeRTOS——任务(tasks)的知识,希望对各位有所帮助!

tasks是什么意思?用法、例句?FreeRTOS——任务(tasks)

1、官网资料https://www.freertos.org/taskandcr.html

2、有关基本的多任务处理概念的介绍,请参见FreeRTOS的工作原理部分。Tasks和Co-Routine文档页面提供了用于确定任务或协同例程是否最适合的上下文。可以仅使用任务,仅使用协程或两者结合来设计应用程序。但是,任务和协同例程使用不同的API函数,因此不能使用队列(或信号量)将数据从任务传递到协同例程,反之亦然。

3、协同例程实际上仅用于具有严格RAM限制的小型处理器。

4、“任务”的特征

5、简而言之:可以将使用RTOS的实时应用程序构造为一组独立的任务。每个任务都在其自己的上下文中执行,而不会偶然依赖系统中的其他任务或RTOS调度程序本身。应用程序中的一个任务只能在任何时间执行,并且实时RTOS调度程序负责确定这应该是哪个任务。因此,RTOS调度程序可以在应用程序执行时重复启动和停止每个任务(将每个任务交换进出)。由于任务不了解RTOS调度程序的活动,因此实时RTOS调度程序负责确保交换任务时的处理器上下文(寄存器值,堆栈内容等)与同一任务时的上下文完全相同。被换了。为了实现这一目标,每个任务都提供了自己的堆栈。换出任务后,执行上下文将保存到该任务的堆栈中,以便在稍后换回同一任务时也可以将其准确还原。有关更多信息,请参见FreeRTOS的工作原理部分。

6、实际执行任务时,据说它处于“运行中”状态。当前正在使用处理器。如果运行RTOS的处理器仅具有一个内核,则在任何给定时间只能有一个任务处于“运行”状态。

7、就绪任务是那些能够执行的任务(它们不处于“已阻止”或“挂起”状态),但是由于当前具有不同优先级或更高优先级的任务已处于“正在运行”状态而当前无法执行。

8、如果任务当前正在等待临时事件或外部事件,则称该任务处于“已阻止”状态。例如,如果任务调用vTaskDelay(),它将一直阻塞(置于“阻塞”状态),直到延迟时间段到期为止–这是一个时间事件。任务也可以阻塞以等待队列,信号灯,事件组,通知或信号灯事件。处于“已阻止”状态的任务通常有一个“超时”时间段,此后该任务将超时并被解除阻止,即使未发生任务正在等待的事件也是如此。

9、处于“已阻止”状态的任务不使用任何处理时间,并且不能选择进入“运行”状态。

10、与处于“阻塞”状态的任务一样,处于“挂起”状态的任务无法选择进入“运行”状态,但是处于“挂起”状态的任务没有超时。相反,只有分别通过vTaskSuspend()和xTaskResume()API调用明确命令这样做时,任务才进入或退出Suspended状态。

11、每个任务的优先级从0到(configMAX_PRIORITIES–1),其中configMAX_PRIORITIES在FreeRTOSConfig.h中定义。

12、如果正在使用的端口实现了端口优化的任务选择机制,该机制使用了``计数前导零''类型的指令(用于单条指令中的任务选择)并且FreeRTOSConfig.h中的configUSE_PORT_OPTIMISED_TASK_SELECTION设置为1,那么configMAX_PRIORITIES不能高于32。在所有其他情况下,configMAX_PRIORITIES可以在合理范围内取任何值-但由于RAM的原因,应将效率保持在实际必要的最小值。

13、低优先级数字表示低优先级任务。空闲任务的优先级为零(tskIDLE_PRIORITY)。

14、FreeRTOS调度程序可确保始终为“就绪”或“运行”状态的任务分配处理器(CPU)时间,而不是优先级较低的任务也处于“就绪”状态的任务。换句话说,置于“运行”状态的任务始终是能够运行的最高优先级任务。

15、任意数量的任务可以共享相同的优先级。如果未定义configUSE_TIME_SLICING,或者configUSE_TIME_SLICING设置为1,则具有优先级的就绪状态任务将使用时间片轮循调度方案共享可用的处理时间。

16、voidvATaskFunction(void*pvParameters)

17、/*Tasksmustnotattempttoreturnfromtheirimplementing

18、functionorotherwiseexit.InnewerFreeRTOSport

19、attemptingtodosowillresultinanconfigASSERT()being

20、calledifitisdefined.Ifitisnecessaryforataskto

21、exitthenhavethetaskcallvTaskDelete(NULL)toensure

22、TaskFunction_t类型定义为一个返回void并以void指针为其唯一参数的函数。实现任务的所有功能都应属于此类。该参数可用于将任何类型的信息传递到任务中-一些标准的演示应用程序任务对此进行了演示。

23、任务功能永远不会返回,因此通常实现为连续循环。同样,请参见RTOS演示应用程序以获取大量示例。

24、通过调用xTaskCreate()或xTaskCreateStatic()创建任务,并通过调用vTaskDelete()删除任务。

25、可以选择使用portTASK_FUNCTION和portTASK_FUNCTION_PROTO宏定义任务功能。提供这些宏是为了允许将编译器特定的语法分别添加到函数定义和原型中。除非在文档中特别说明所使用的端口(当前仅是PIC18fedC端口),否则不需要使用它们。

26、上面显示的函数的原型可以写成:

27、voidvATaskFunction(void*pvParameters);

28、portTASK_FUNCTION_PROTO(vATaskFunction,pvParameters);

29、同样,上面的函数可以等效地写为:

30、portTASK_FUNCTION(vATaskFunction,pvParameters)

31、启动RTOS调度程序时,将自动创建空闲任务,以确保始终至少有一个任务能够运行。它以最低的优先级创建,以确保在就绪状态下具有较高优先级的应用程序任务时,不占用任何CPU时间。

32、空闲任务负责释放由RTOS分配给此后已删除任务的内存。因此,对于使用vTaskDelete()函数的应用程序来说,重要的是要确保空闲任务不会因处理时间而短缺。空闲任务没有其他活动功能,因此在所有其他条件下都可以合理地饿死微控制器的时间。

33、应用程序任务可以共享空闲任务优先级(tskIDLE_PRIORITY)。有关如何配置此行为的信息,请参阅configIDLE_SHOULD_YIELD配置参数。

34、空闲任务钩子是在空闲任务的每个周期内调用的函数。如果希望应用程序功能以空闲优先级运行,则有两个选项:

35、必须始终至少有一个准备好运行的任务。因此,挂钩函数必须不要调用任何可能导致空闲任务阻塞的API函数(例如vTaskDelay()或具有阻塞时间的队列或信号量函数)。联例程可以在挂钩函数中阻塞是可以的。

36、这是一种更灵活的解决方案,但具有更高的RAM使用开销。

37、有关使用空闲挂钩的更多信息,请参见嵌入式软件应用程序设计部分。

38、通常使用空闲挂钩功能将微控制器CPU置于省电模式。

好了,关于tasks是什么意思?用法、例句和FreeRTOS——任务(tasks)的问题到这里结束啦,希望可以解决您的问题哈!

本站涵盖的内容、图片、视频等数据,部分未能与原作者取得联系。若涉及版权问题,请及时通知我们并提供相关证明材料,我们将及时予以删除!谢谢大家的理解与支持!

Copyright © 2023