|
初学者,有很多地方似懂非懂:
1,FreeRTOS的每个任务都是while(1)这种死循环,我有点想不通,任务是怎么切换的?就是怎么退出去的?因为按照我之前裸机开发仅有的知识点,退出死循环不是要有break, return这种吗?我没有看到while(1)有break,或return这种退出语句啊?实在不懂他是怎么退出的?
2,我有任务A和任务B两个任务,任务A有a, b, c三行代码,任务B也有d,e,f三行代码,假设任务A优先级最高,FreeRTOS的任务调度是先把a,b,c按顺序执行完阻塞退出,在按顺序执行任务B,还是先执行a, 然后执行d,再执行b,,,,类似这种交叉执行?
3,假设有个任务如下
void task1(void *pvParameters)
{
while(1)
{
for(unsigned char i=0; i<10; i++)
{
getvalue= sensor_calc1 + sensor_calc2; //计算得到getvalue的值----------------1
xSemaphoreGive(xBinarySemaphore); //得到getvalue值后释放一个信号量通知任务task2-------------2
read_sensor += 1; //-----------------------------3
}
}
}
void task2(void *pvParameters)
{
while(1)
{
xSemaphoreTake(xBinarySemaphore, portMAX_DELAY);
}
}
我的疑问,
task1中,代码1,2,3都在for循环中,如果代码2释放了信号量,此时是立即切换到task2, 还是会把后面的代码3执行完呢?还是说先不管这个信号量,直接完整的循环十次结束循环?
也就是这个for循环是每循环一次就释放一次信号量,然后立即切换到task2?
|
|