내 STM32F4 기반 보드에 FreeRTOS를 사용하고 있고, 이해하기 쉽고 적용하기 쉬운 대기열 및 세마포 작업 간의 통신에 대해 읽었습니다.STM32 - 다중 작업에서 입출력 읽기
그러나 문서에, 나는 예를 들어, 다른 작업에서 같은 메소드를 호출 할 안전한지에 대한 정보를 찾을 수 없습니다 :
void DefaultTask(void const * argument)
{
uint8_t pin = 10;
uint16_t analog = ADC_GetAnalog(pin);
uint32_t encoder = Encoder_GetCount(1);
}
void SecondTask(void const * argument)
{
uint8_t pin = 14;
uint16_t analog = ADC_GetAnalog(pin);
uint32_t encoder = Encoder_GetCount(2);
}
ADC_GetAnalog :
uint16_t ADC_GetAnalog(uint8_t PinNumber)
{
if((PinNumber >=1)&&(PinNumber<=18))
{
return ADC_Pin[PinNumber].AnalogValue;
}
else
return 0;
}
I을 또한 내 시스템에 여러 엔코더가 있습니다 (htim #의 CNT 속성을 증가/감소시키는 인터럽트). ADC와 같은 줄에있는 read 메서드를 다른 작업에서도 호출합니다.
uint32_t Encoder_GetCount(uint8_t encoder_num)
{
volatile __IO uint32_t count = 0;
switch(encoder_num)
{
case 1:
count = htim1.Instance->CNT;
break;
case 2:
count = htim3.Instance->CNT;
break;
case 3:
count = htim5.Instance->CNT;
break;
default:
break;
}
return (uint32_t)count;
}
오늘 저는이 방법을 사용합니다.하지만 이것이 가장 안전한 (안전한) 방법인지 알고 싶습니다 !!
재진입 성 또는 스레드 안전성의 개념은 본질적으로 기능이 재진입 성 여부를 묻는 것처럼 읽을 수있는 주제입니다. – rjp