Я столкнулся со странным поведением с кодом FreeRTOS.
Особенно при использовании vTaskDelayUntil()
и vTaskDelay()
Я пытаюсь прочитать входной контакт с моего ИК-датчика.
Что касается области видимости, я вижу, что PIR удерживает 3,3 В в течение не менее 1 секунды.
Код ниже читает мой PIR-вход только когда я закомментирую строку 'vTaskDelayUntil'. Как только я активирую эту строку, регистр PINC всегда равен 0.
Также, когда я уверен, что на моем входном контакте есть 3.3В.
static void TaskStatemachine(void *pvParameters)
{
(void) pvParameters;
TickType_t xLastWakeTime;
const TickType_t xFrequency = 100;
xLastWakeTime = xTaskGetTickCount();
for(;;)
{
printf("PINC.1 = %d\n", (PINC & (1<<1) ));
vTaskDelayUntil( &xLastWakeTime, ( xFrequency / portTICK_PERIOD_MS ) );
}
}
Что здесь происходит?
Я изменил xFrequency на разные значения, но безуспешно.