私はARM組み込みデバイスでRTOSディストリビューションを使用しています。 現在、私は何を私が気づいたことは、いつどこで、私は(1-2ms信号は完全に間違っていることができます(別のスレッド/タスク)は、この関数を呼び出すに基づいていることである。このRTOSのvTaskDelayとのピンのトグル
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(1));
GPIO_Write(PIN_1, HIGH);
vTaskDelay(msec_to_ticks(1));
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(3));
GPIO_Write(PIN_1, HIGH);
if (option1){
vTaskDelay(msec_to_ticks(3));
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(1));
} else {
vTaskDelay(msec_to_ticks(1));
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(3));
}
GPIO_Write(PIN_1, HIGH);
if (option2){
vTaskDelay(msec_to_ticks(3));
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(1));
} else {
vTaskDelay(msec_to_ticks(1));
GPIO_Write(PIN_1, LOW);
vTaskDelay(msec_to_ticks(3));
}
GPIO_Write(PIN_1, HIGH);
vTaskDelay(msec_to_ticks(3));
GPIO_Write(PIN_1, LOW);
のような信号をトグルする必要性によオフ)。
taskENTER_CRITICAL()とtaskEXIT_CRITICALを使用すると、やや正確な信号を確認できますか?
私が持っているアイデアは、優先度の高い割り込みがどこかでコードを遅らせることがあるということです(タスクに最大優先度を設定していますが)。 もう1つはタイミングが正しいことですが、GPIO_Writeはすぐには発生しません。
コードが中断されないようにするにはどうすればいいですか?
よろしく、
最初のトランジションだけがティック境界と非同期になります。他のトランジションはすべて直ちに遅延の後に続くためです。つまり、遅れが1ティックの遅延(優先度の高いタスクや割り込みの許可)に続く場合は、1ティックの遅延を正確に生成できます。 – Clifford