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.

[参考译文] TMS320F28384D:任务未按顺序执行

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1334463/tms320f28384d-task-execution-not-in-order

器件型号:TMS320F28384D

您好!

在我的项目中、我有一个周期性的 ADC 中断会触发两个 任务:CPU1任务和 CLA1任务。 函数如下所示:

__interrupt void INT_myADC0_1_ISR()

{

    // Cla1Task1() is triggered in the background

    // Clearing interrupt:

    ADC_clearInterruptStatus(ADCA_BASE, ADC_INT_NUMBER1);

    Interrupt_clearACKGroup(INT_myADC0_1_INTERRUPT_ACK_GROUP);

    // Pulse LED before and after CPU1_task():

    Pulse_LED();

    CPU1_task();

    Pulse_LED();

}

__interrupt void cla1Isr1()

{

    // CLearing interrupt:

    Interrupt_clearACKGroup(INT_myCLA01_INTERRUPT_ACK_GROUP);

    // Pulse LED twice in a row to detect end of Cla1Task1():

    Pulse_LED();

    Pulse_LED();

}

CPU1_TASK()比 Cla1Task1()长得多,但当我查看 LED 信号时,指示 Cla1Task1()结束的两个脉冲总是在 CPU1_Task1()之后发生。

我不是从 ADC 中断自动触发 Cla1Task1 (),而是在我调用 cpu1_task ()之前,我还在显式地尝试使用 cla_forceTasks ( cla1_base , cla_taskfloag_1 ),但我得到了相同的结果。

它看起来像 Cla1Task1()在 INT_myADC0_1_ISR() 函数结束之前不会被执行。 我还尝试了禁用编译器优化、但没有区别(执行 Taks 需要更长的时间、但 CLA 任务在 CPU 任务之后仍在执行)。 这是否会成为优先级问题?

谢谢!

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

    我做了一些研究、发现中断未嵌套在硬件级别。 因此,Cla1Task1()  可以在更早完成,但它的中断函数 cla1Isr1()在 INT_myADC0_1_ISR() 完成之前不会被处理。 我认为有一种可以在软件级别嵌套中断的方法、但这不是我的项目所需要的: software-dl.ti.com/.../index.html