m0_60250364 2022-08-01 18:08
浏览 25
已结题

FreeRTOS :在configUSE_PREEMPTION, configUSE_TIME_SLICING ,configIDLE_SHOULD_YIELD 设置为100时的理解性问题

                                          标题

FreeRTOS :在configUSE_PREEMPTION, configUSE_TIME_SLICING ,configIDLE_SHOULD_YIELD 设置为100时,为什么会task1/2都不执行只有空闲任务执行

基本配置:可抢占+非时间片轮转+空闲任务不让步

Task1

void Task1Function(void * param)
{
    volatile int i = 0;
    while (1)
    {
        Task1flagnum=1;
        Task2flagnum=0;
        Task4flagnum=0;
        for (i = 0; i < 100000; i++)
        {    
        sum++;
        }
        flagCalcEnd = 1;
        //printf("1");
        vTaskDelete(NULL);
    }
}

task2


void Task2Function(void * param)
{
    while (1)
    {
        if (flagCalcEnd)
            printf("sum = %d\r\n", sum);
        Task1flagnum=0;
    Task2flagnum=1;
    //Task3flagnum=0;
    Task4flagnum=0;
    }
}

空闲任务钩子函数

void vApplicationIdleHook(){
    Task1flagnum=0;
    Task2flagnum=0;
    Task3flagnum=0;
    Task4flagnum=1;
    //printf("0");
}

**主函数
**

int main( void )
{
#ifdef DEBUG
  debug();
#endif
    prvSetupHardware();

    printf("Hello, world!\r\n");
    //下面NULL这个参数的值就是传给Task1Function的param
    xTaskCreate(Task1Function,"xTask1",100,NULL,0,&xHandleTask1);
    //xTaskCreate(Task2Function,"xTask2",100,NULL,2,NULL);
    xTaskCreate(Task2Function,"xTask2",100,NULL,0,NULL);
    //xIdleTask3Handle = xTaskCreateStatic(Task3Function,"xTask3",100,NULL,1,puxTask3StackBuffer,&pxTask3Buffer);
                                 //我自己定义栈的深度是100   //用函数进行实际分配栈大小也就照这个进行分配    
    //xTaskCreate(TaskGenericFunction,"GenericTask1",100,(void *)4,1,NULL);
    //xTaskCreate(TaskGenericFunction,"GenericTask2",100,(void *)5,1,NULL);
    /* Start the scheduler. */
    vTaskStartScheduler();
    /* Will only get here if there was not enough heap space to create the
    idle task. */
    return 0;
}

预期结果
按照我的配置, 按照我的想法在主函数里注册task1的时候,因为他们都是同优先级 task1应该被放到readylist的第一项所以应该第一个执行,直到删除自己的时候才会调用空闲任务,然后空闲任务一直执行。

实际结果

img

但是实际情况如上图,空闲任务跳过任务1,一直执行。

请各位帮帮忙呗

应该是我理解方面的问题

  • 写回答

0条回答 默认 最新

    报告相同问题?

    问题事件

    • 系统已结题 8月9日
    • 创建了问题 8月1日

    悬赏问题

    • ¥15 python的qt5界面
    • ¥15 无线电能传输系统MATLAB仿真问题
    • ¥50 如何用脚本实现输入法的热键设置
    • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
    • ¥30 深度学习,前后端连接
    • ¥15 孟德尔随机化结果不一致
    • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
    • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
    • ¥15 谁有desed数据集呀
    • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100