This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TMS570LC4357:FreeRTOS -任务资源删除执行跳转到使用 IFSR 0x0D 中的值预取条目

Guru**** 2470830 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1070902/tms570lc4357-freertos---task-resource-delete-execution-jumps-to-prefetch-entry-with-value-in-ifsr-0x0d

部件号:TMS570LC4357
“线程:测试”中讨论的其它部件

TI 专家您好,

我们正在使用 TMS570LC43xx 和 FreeRTOS。

要重新初始化,我们需要在删除任务之前删除任务资源,如计时器和信号等。

在调试过程中,在执行 xTimerDelete 后,代码会在“预取条目”异常时跳转。

我尝试仅删除该任务的已用资源。  

此外,尝试 在这些函数之间插入小延迟。

请求指导解决此问题。

谢谢,此致,

阿尼尔

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    你好,Anil,

    xTimerDelete()删除以前使用 xTimerCreate()创建的计时器。  configUSE_TIMERS 配置常量必须设置为1才能使用 xTimerDelete()。 默认情况下,该常量在 FreeRTOSConfig.h 中定义为0:

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    我刚刚进行了测试,创建了一个计时器,并在计时器开始后删除了它。 一切都如预期的那样好。 这是我的测试代码:

    void vTimerCallback(时间处理_t xTimer )

    TickType_t xTimeNow;
    /*获取当前的刻度数。 *
    xTimeNow = xTaskGetTickCount();

    /*带计时器勾号的拖格式 GIOB[2:1]*/
    gioTogleBit(gioPORTb,1);
    // gioTogleBit(gioPORTb,2);

    }

    /*用户代码结束*/

    Int main (无效)

    /*用户码开始(3)*/

    gioInit();

    /*将高端计时器 GIO 端口 hetPort 引脚方向设置为所有输出*/
    gioSetDirection (hetPORT1,0xFFFFFFFF);
    gioSetDirection (gioPORTB,0xFFFF);

    /*创建然后启动一些计时器。 以前启动计时器
    RTOS 调度程序已启动意味着计时器将启动
    RTOS 调度程序启动后立即运行。
    *
    xTimers = xTimerCreate
    (/*只是一个文本名称,不被 RTOS 内核使用。 *
    "计时器",
    /*计时器周期(以嘀嗒信号为单位)必须大于0。 *
    PDM_to_Ticks (1000),/*周期/时间*/
    /*计时器将在过期时自动重新加载。 *
    pdTRUE,
    /*该 ID 用于存储计时器过期次数的计数,该计数被初始化为0。 *
    (void *) 0,
    /*每个计时器在回叫到期时调用相同的回叫。 *
    vTimerCallback
    );

    IF( xTimers == NULL )

    /*计时器未创建。 *
    }
    否则

    /*启动计时器。 未指定阻止时间,和
    即使是这样,也会因为 RTOS 而被忽略
    计划程序尚未启动。 *
    if( xTimerStart( xTimers,0)!= pdPASS )

    /*无法将计时器设置为“活动”状态。 *
    for (;;);/*故障*/
    }
    }

    错误1
    /*创建任务1 */
    如果(xTaskCreate (vTask1,"Task1",configMINIMAL_STACK_SIZE,NULL,1,&xTask1Handle)!= pdTRUE)

    无法创建/*任务*/
    While (1);
    }

    /*创建任务1 */
    如果(xTaskCreate (vTask2,"Task2",configMINIMAL_STACK_SIZE,NULL,2,&xTask1Handle)!= pdTRUE)

    无法创建/*任务*/
    While (1);
    }
    #endif

    xTimerDelete (xTimers,0);

    /*启动计划程序*/
    vTaskStartScheduler();

    /*永远跑*/
    While (1);
    /*用户代码结束*/

    返回0;
    }


    /*用户码开始(4)*/
    /*用户代码结束*/