裸机中经常使用全局变量,但在RTOS中大量使用全局变量会造成很多问题。在RTOS中也可以使用全局变量但使用时一定要注意有哪些任务会写这个变量,哪些任务会读这个变量。尤其切记在使用这个变量的过程中变量的数值发生改变,程序可能达不到预期的效果,程序出bug。
看一下这三个任务,当三个任务优先级不同时,task_3会打印出什么信息呢?当这三个任务优先级相同的时候,task_3会打印出什么信息呢?
为了解决任务间数据传递的问题,freertos有一套自己的机制。其它的RTOS也差不多。
uint8_t i=0;//全局变量
void task_1(void* pvParameters)
{
while(1)
{
i=1;
vTaskDelay(100);
}
}
void task_2(void* pvParameters)
{
while(1)
{
i=2;
vTaskDelay(100);
}
}
void task_3(void* pvParameters)
{
while(1)
{
if(i==1)
{
..........................
vTaskDelay(1);
printf("1:i=%d\r\n",i);//打印出来的是1还是2?
}
else
{
...............................
vTaskDelay(1);
printf("2:i=%d\r\n",i);//打印出来的是1还是2?
}
vTaskDelay(100);
}
}