So far so good. From the flash.c-file of the demonstration i got the following function.
void vParTestToggleLED( unsigned portBASE_TYPE uxLED )
{
unsigned portSHORT usBit;
vTaskSuspendAll();
{
if( uxLED < partstMAX_OUTPUT_LED )
{
usBit = partstFIRST_LED << uxLED;
if( usOutputValue & usBit )
{
usOutputValue &= ~usBit;
}
else
{
usOutputValue |= usBit;
}
GPIO_Write( GPIOC, usOutputValue );
}
}
xTaskResumeAll();
}
I am wondering about the use of the SuspendAll / ResumeAll calls. What exactly are they for in this application? I see two possible explanations.
1) To ensure no other task is currently accessing the usOutputValue-variable.2) To ensure no other task is currently calling the GPIO_Write-function. I think the GPIO_Write-function shouldn’t be the reason, there is no read modify-write operation in the function.
void GPIO_Write(GPIO_TypeDef* GPIOx, u16 PortVal)
{
GPIOx->ODR = PortVal;
}
When exactly do I need to use such a “critical section” ?
Thanks for clearing my confusion.
Benjamin