本文介绍: 如果需要简单的互斥访问,互斥信号量可能是最合适的选择。互斥信号量也用于实现资源的互斥访问,类似于二进制信号量。但与二进制信号量不同的是,互斥信号量允许同一个任务多次获取信号量,而不会导致死锁。在任务持有互斥信号量时,其他任务无法获取该信号量,必须等待该任务释放信号量。例如,当多个任务需要共享一个资源时,可以使用二进制信号量来保证同一时间只有一个任务访问该资源。递归互斥信号量是一种特殊的信号量类型,用于解决任务在嵌套调用中对资源的重复获取。应用场景:递归互斥信号量适用于同一任务需要多次获取互斥资源的场景。
学习目标
学习内容
概念
在 FreeRTOS 中,信号量(Semaphore)是一种用于实现任务之间同步和资源共享的机制。它是一种计数型的同步原语,用于控制对共享资源的访问和保护。
在FreeRTOS中,包含4种类型的信号量:
1. 二进制信号量(Binary Semaphore):
二进制信号量是最基本的信号量类型。它的计数值要么为0(表示信号量已被获取),要么为1(表示信号量可用)。二进制信号量常用于实现互斥访问共享资源的场景,只允许一个任务访问资源。
在 FreeRTOS 中,你可以使用 xSemaphoreCreateBinary()
函数创建一个二进制信号量。任务可以通过 xSemaphoreTake()
函数获取信号量,通过 xSemaphoreGive()
函数释放信号量。
2. 计数型信号量&#
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。