freertos阻塞函数
时间: 2024-07-28 08:01:16 浏览: 111
FreeRTOS(Real-Time Operating System for Embedded Systems)是一个轻量级嵌入式实时操作系统,它特别适合小型微控制器。Freertos提供了一系列的API函数,其中就包括一些用于同步任务的阻塞函数,比如:
1. vTaskDelay():这是一个基本的睡眠函数,它会使当前的任务暂停运行指定的时间(以 Tick 指数计数单位),直到再次唤醒。
2. xQueueReceive() 和 xQueueSend():这两个函数用于操作队列(queue),如果队列为空,xQueueReceive()会阻塞等待消息的到来;反之,如果队列满,xQueueSend()会挂起发送者。
3. xSemaphoreTake() 和 xSemaphoreGive():它们分别用于获取信号量(semaphore)和释放信号量,当信号量值为0并且有其他任务正在等待获取该信号量时,xSemaphoreTake()会阻塞。
4. xEventGroupWaitBits():这个函数用于在一个事件组(event group)上等待多个事件之一发生,如果所有事件都没有满足条件,该函数会进入阻塞状态。
这些阻塞函数允许任务在需要的时候暂时停止执行,以便于管理系统的资源,如处理器时间、内存和其他共享资源,提高了系统的响应性和效率。
相关问题
FreeRTOS阻塞状态
在FreeRTOS中,阻塞状态是指任务调用延时函数后,任务会被剥夺CPU的使用权,进入阻塞状态,直到延时时间结束后,任务重新获取CPU的使用权才能继续运行。在任务阻塞期间,CPU可以执行其他任务,如果其他任务也处于延时状态,那么CPU将运行空闲任务。空闲任务是系统在启动调度器时创建的优先级最低的任务,它主要负责系统内存的清理工作。\[1\]\[2\]\[3\]
#### 引用[.reference_title]
- *1* [【FreeRTOS】03 任务的运行、就绪、阻塞、挂起](https://blog.csdn.net/little_grapes/article/details/124657272)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
- *2* *3* [FreeRTOS 笔记之⑥:空闲任务与阻塞延时的实现](https://blog.csdn.net/XieWinter/article/details/103052953)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
freertos引起阻塞的函数
FreeRTOS 中有一些会引起阻塞的函数,比较常见的包括:
1. vTaskDelay():用于让任务延迟一段时间,这个函数会让任务进入阻塞态,直到延迟时间结束。
2. xQueueReceive():用于从队列中接收数据,如果队列中没有数据,则任务会进入阻塞态,直到有数据可用。
3. xSemaphoreTake():用于获取一个二值信号量或者计数信号量,如果信号量的值为 0,则任务会进入阻塞态,直到信号量的值变成非 0。
4. xTaskNotifyWait():用于等待任务通知,如果没有任务通知,则任务会进入阻塞态,直到有任务通知。
5. xEventGroupWaitBits():用于等待事件组中的某些事件,如果没有事件满足条件,则任务会进入阻塞态,直到有事件满足条件。
需要注意的是,在使用这些函数时,应该尽量控制阻塞时间,避免影响系统的实时性。
阅读全文