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.
我们知道ARM中 任务切换机制是在滴答定时器中触发pendSV中断,其中滴答定时器的中断是最高优先级,pendSV中断是最低优先级?
在TI中,移植FreeRTOS如何保证这一机制? 如何保证任务切换过程中,不会被更高优先级打断?
首先TI官方库没有配套支持中断嵌套的功能,那么如果有中断任务执行时间比较久,是不会就会影响任务切换以及系统时间的准确性?
首先TI官方库没有配套支持中断嵌套的功能,
这个依据在哪里?如果是从参考代码中看到的话,方便指一下具体的路径吗?
C2000是支持中断嵌套的,不过默认是关闭的。我在C2000 FreeRTOS中没有找到task在C28上运行与在一般ARM上运行有什么区别的说明。对于同等优先级的任务,在适当配置以后,是会以轮流的方式在不同时间片上运行的。
在ARM中, 滴答定时器的中断用来进行系统时间和任务就绪的一系列功能,然后再滴答定时中断中触发PendSV 中断,在优先级最低的PendSV 中断执行上下文切换。 用来避免上下文切换过程被高优先级的中断的打断。
但是在TI中, 这两部分的功能全部在定时器的中断中处理了。 见portasm.asm 文件。
这样带来的问题是:
1 如果没有配置TI的中断嵌套功能(TI 库本身没有去实现,芯片是支持的),这样其他同等优先级的中断如果处理时间过长,会导致系统的计时偏差。
2 如果配置了中断嵌套功能,为了避免上下文切换过程被中断,就要配置这个定时器的中断为最低的优先级,这样中断占用实现过长的话,也会导致系统计时的偏差。
1. 如我在另一个问题中(TMS320F28377S: FreeRTOS 移植中的问题)回复的,中断只起跳转作用,所以执行的时间大致都是相同的,也不会出现一个中断占用太长时间的问题;
2. 无论如何计时也不会出现偏差,有硬件的计时器。计时器是不停计时的,到点触发中断;
3. 上下文是固定的,所以切换上下文的时间也是固定的。