- taskENTER_CRITICAL()和 taskEXIT_CRITICAL()
臨界區保護代碼實際上就是在taskENTER_CRITICAL()和taskEXIT_CRITICAL()無法被中斷,常用在時序讀取一些傳感器和芯片上(比如flash和eeprom上)。
taskENTER_CRITICAL()
//此處爲保護,不能被中斷代碼
taskEXIT_CRITICAL()
注意:臨界區代碼不宜過長,否則會影響系統響應
3. taskENTER_CRITICAL_FROM_ISR()和taskEXIT_CRITICAL_FROM_ISR()
這一對臨界區代碼保護函數用在中斷服務函數中,但是中斷函數優先級不能用在高於configLIBRARY_MAX_SYSCALL_INTERRUPT_PRIORITY。
void HAL_TIM_PeriodElapsedCallback(TIM_HandleTypeDef *htim)
{
uint32_t status_value;
if(htim==(&TIM3_Handler))
{
status_value=taskENTER_CRITICAL_FROM_ISR();
total_num+=1;
printf("float_num 的值爲: %d\r\n",total_num);
taskEXIT_CRITICAL_FROM_ISR(status_value);
}
}