私は私のSTM32F4ベースボードにFreeRTOSを使用している、と私は理解し、適用が容易キューやセマフォとタスク間の通信について読みます。STM32 - 複数のタスクからI/Oを読む
しかし、ドキュメンテーションに、私は例えば、異なるタスクから同じメソッドを呼び出すことが安全である場合についての情報を見つけることができません:
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;
}
私はまた、(その増分を中断/ 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