私は2つのタスク(task1とtask2)を持っています。 CANからのメッセージを受け取ったら、もう一度タスクを再開する必要があります。どのようなアイデア?FreeRTOSの再起動の仕方
私はこの問題を解決しました。
volatile uint8_t restart = 0;
extern void task1(void *pvParameters)
{
UNUSED(pvParameters);
const portTickType xDelayTime = 5/portTICK_RATE_MS;
int16_t stop = 0;
int16_t fast= 0;
for (;;)
{
if (xQueueReceive(can_message, &stop, 100) == pdPASS)
restart = 1;
vTaskDelay(xDelayTime);
}
}
extern void task2(void *pvParameters)
{
UNUSED(pvParameters);
const portTickType xDelayTime = 15/portTICK_RATE_MS;
for (;;)
{
/*inits of task, vatiable set,...*/
while(restart != 1)
{
/*function loop*/
restart = 0;
}
vTaskDelay(xDelayTime);
}
}
あなたはこれまでに並行性について何か聞いたことがありますか?あなたはまた、私は、思うに、 'while(restart!= 1)'ループに遅れを入れてスケジューラを緩和する必要があると思います。答えはあなたの質問を編集するのではなく、回答として投稿する必要があります。 – LPs