我面临着FreeRTOS代码的怪异行为。
特别是在使用vTaskDelayUntil()
和vTaskDelay()
我正在尝试从PIR传感器读取输入引脚。 在示波器上,我看到PIR保持3.3v高电平至少1秒钟。
当我注释掉'vTaskDelayUntil'行时,下面的代码仅读取我的PIR输入。一旦激活该行,PINC寄存器就始终为0。 同样,当我确定输入引脚上有3.3v电压时。
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更改为不同的值,但是没有任何运气。
答案 0 :(得分:0)
作为实验,请简化输出:
putchar( (PINC & (1<<1)) == 0 ? '0' : '1' ) ;
然后您将获得1或0的连续流。
如果无论延迟有无延迟,那么任务似乎堆栈太小而无法支持printf()
。尝试增加堆栈并放回printf()
。