一、使用STM32CubeMX创建FreeRTOS操作系统
LED闪烁的配置
接下来配置时钟,点击生成
此处为用户代码编写处;
开启这个选项便可以使用更加精确的延时。
在代码区添加
便可以!
二、任务挂起和取消挂起
osThreadSuspend(osThreadId thread_id);
//osThreadId thread_id为要挂起任务句柄
osThreadResume(osThreadId thread_id);
//osThreadId thread_id取为要取消任务的句柄
三、消息队列
函数:
osMessagePut(myQueue01Handle,ProducerValue,0);//将ProducerValue放入队列myQueue01Handle中
osEvent event;//在接受函数中声明改变量
event = osMessageGet(myQueue01Handle,osWaitForever); //获取队列消息,获取之后并删除
event = osMessagePeek(myQueue01Handle,osWaitForever); //获取之后不删除消息
osMessagePeek函数需要加上这句;否则信号量不对
四、二进制信号量与连续二进制信号量
在需要二进制信号量的任务中将NULL改为信号量句柄
osSemaphoreRelease(semaphore);
//如果释放信号量成功 osSemaphoreRelease信号量释放函数 信号量+1
osSemaphoreGetCount(semaphore)获取信号量函数
osSemaphoreWait 信号量释放等待函数 osSemaphoreWait(semaphore,0) 信号量-1
//二进制信号量的数值只在 0 1之间
连续二进制信号量
五、互斥锁与递归互斥锁
osMutexWait(myMutex01Handle,osWaitForever); //获得互斥锁信号量函数osMutexWait();
osRecursiveMutexWait(myRecursiveMutex01Handle,osWaitForever);//获得递归互斥锁
osRecursiveMutexRelease(myRecursiveMutex01Handle); //释放递归互斥锁
osMutexRelease(myMutex01Handle); //释放互斥锁信号量函数
使用方法:可以将使用互斥锁的两个任务的优先级暂时提高到同一优先级