Freertos 互斥锁
信号量是任务与任务之间,任务与中断之间同步的重要方式,二元信号量与互斥锁十分相像,两者之间的差别在于优先级的继承机制,当另外一个具有更高优先级的任务试图获取同一个互斥锁时,已经获得互斥锁的任务将继承试图获取同一互斥锁的任务的优先级。而信号量没有这种机制,所以二元信号量更适合实现同步,互斥锁更适合实现简单的互斥。需要注意的是互斥锁在使用完资源后必须返还,否则高优先级的任务永远也无法获取互斥锁,低优先级的任务将不会放弃优先级的继承。二元信号量并不需要在得到后立即释放,因此同步操作一般可以通过一个任务或中断持续释放信号量,另一个任务持续获取信号量来实现。
一、简单例程
互斥锁主要作用是保护资源,创建一个全局变量test_value作为共享资源,其中任务2每隔十毫秒申请操作资源,将test_value赋值为1,任务1每隔100ms申请互斥锁,成功后将test_value清0,并等待1秒时间,1秒内如果test_value值被改写则打印测试失败,如果值没有被改变则打印测试成功,释放互斥锁。
/* includes. */
#include
#include "FreeRTOS.h"
#include "task.h"
#include "queue.h"
#include "stm32f10x.h"
#include "semphr.h"
#include "portmacro.h"
static void prvSetupHardware( void );
void vPrint