临界段应用
临界段的作用:
一、什么是临界段
在程序访问资源时,不希望被其他任务或者中断打断,这段要执行的代码,称为临界代码段。
不想被打断访问的资源
读取或者修改变量(全局变量)
调用公共函数的代码(不可重入函数)
使用硬件资源(外设)
对时序有精准要求的操作
用户不想被打断的代码
二,临界段的API
1、关闭中断
taskDISABLE_INTERRUPTS();
2、打开中断
taskENABLE_INTERRUPTS();
3、进入临界段
freertos提供一个任务中进入临界段的方法
taskENTER_CRITICAL()
注意事项:1、成对出现
2、周期快(不允许加延时)
4、退出临界段;
taskEXIT_CRITICAL();
注意事项:不能在中断中使用。
5、在中断中进入临界段
重点:返回值,返回上次中断屏蔽寄存器操作值
6、退出临界段
taskENTER_CRITICAL_FROM_ISR();
三、临界段的应用
操作例程:
功能需求
1、分别修改Usart_Task、DelayTask任务
2、配置延时周期为50ms打印一次运行状态,观察现象,是否出现,资源冲突问题
3、通过临界段解决共享资源冲突问题
void Usart_Task(void const * argument)
{
/* USER CODE BEGIN Usart_Task */
/* Infinite loop */
for(;;)
{
printf("UsartTask is Runing!\r\n");
osDelay(50);
}
/* USER CODE END Usart_Task */
}
void Delay_Task(void const * argument)
{
TickType_t WakeTime = xTaskGetTickCount();