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.

TMS320F28377S: TI 移植FreeRTOS 任务切换和中断的问题?

Part Number: TMS320F28377S

我们知道ARM中 任务切换机制是在滴答定时器中触发pendSV中断,其中滴答定时器的中断是最高优先级,pendSV中断是最低优先级? 

在TI中,移植FreeRTOS如何保证这一机制?  如何保证任务切换过程中,不会被更高优先级打断? 

首先TI官方库没有配套支持中断嵌套的功能,那么如果有中断任务执行时间比较久,是不会就会影响任务切换以及系统时间的准确性?

  • 首先TI官方库没有配套支持中断嵌套的功能,

    这个依据在哪里?如果是从参考代码中看到的话,方便指一下具体的路径吗?

    C2000是支持中断嵌套的,不过默认是关闭的。我在C2000 FreeRTOS中没有找到task在C28上运行与在一般ARM上运行有什么区别的说明。对于同等优先级的任务,在适当配置以后,是会以轮流的方式在不同时间片上运行的。

  • 我知道是支持中断嵌套的,但是TI库并没有相关的开启或配置的代码吧。 需要我们用户自己去修改TI的库去实现嵌套的功能。 

  • 在ARM中, 滴答定时器的中断用来进行系统时间和任务就绪的一系列功能,然后再滴答定时中断中触发PendSV 中断,在优先级最低的PendSV 中断执行上下文切换。 用来避免上下文切换过程被高优先级的中断的打断。 

    但是在TI中, 这两部分的功能全部在定时器的中断中处理了。 见portasm.asm 文件。 

    这样带来的问题是: 

    1  如果没有配置TI的中断嵌套功能(TI 库本身没有去实现,芯片是支持的),这样其他同等优先级的中断如果处理时间过长,会导致系统的计时偏差。 

    2  如果配置了中断嵌套功能,为了避免上下文切换过程被中断,就要配置这个定时器的中断为最低的优先级,这样中断占用实现过长的话,也会导致系统计时的偏差。 

  • 1. 如我在另一个问题中(TMS320F28377S: FreeRTOS 移植中的问题)回复的,中断只起跳转作用,所以执行的时间大致都是相同的,也不会出现一个中断占用太长时间的问题;

    2. 无论如何计时也不会出现偏差,有硬件的计时器。计时器是不停计时的,到点触发中断;

    3. 上下文是固定的,所以切换上下文的时间也是固定的。