熊仔
发表于 2023-9-20 16:24:13
8051,80251没办法零延迟,ARM-cortex系列有屏蔽管理的才称得上零中断延迟。
51系列进入临界区,就关闭中断了。其他中断不能响应。
熊仔
发表于 2023-9-20 16:28:27
也可能杨老师一直停留在方法1,我们用的是方法2,他的测试例子所谓的天大的bug用方法1都能测试通过。
有时候方法不一样。没必要追求一样的效果。声明一下就好。
CosyOS
发表于 2023-9-20 16:30:51
熊仔 发表于 2023-9-20 16:24
8051,80251没办法零延迟,ARM-cortex系列有屏蔽管理的才称得上零中断延迟。
51系列进入临界区,就关闭中 ...
我推荐你抽空看下《CosyOS-所有内核全局不关总中断原理》再下结论。
熊仔
发表于 2023-9-20 16:37:49
CosyOS 发表于 2023-9-20 16:30
我推荐你抽空看下《CosyOS-所有内核全局不关总中断原理》再下结论。
好的,抽空看看,研读下。实在想不出来还可以整个系统不关闭EA能完成。看来需要好好学习。
我的认知,只要操作了EA=0,中断就不可能零延迟。
CosyOS
发表于 2023-9-20 16:44:38
熊仔 发表于 2023-9-20 16:37
好的,抽空看看,研读下。实在想不出来还可以整个系统不关闭EA能完成。看来需要好好学习。
我的认知,只 ...
CosyOS虽提供全局临界区给用户,但那只是为了便于用户对全局公共资源和程序过程的保护,CosyOS内核中从来不会进入全局临界区。
你可以研究下Keil RTX4/5是怎样实现Cortex-M3/M4内核全局不关所有中断的,CosyOS的部分方法还是与其比较类似的,但也有很大不同。
熊仔
发表于 2023-9-20 16:56:45
CosyOS 发表于 2023-9-20 16:44
CosyOS虽提供全局临界区给用户,但那只是为了便于用户对全局公共资源和程序过程的保护,CosyOS内核中从来 ...
大致看了下原来关闭这两中断实现的,SysTick_Handler/定时器0中断、PendSV_Handler/其它替代中断
需要深入学习下。
CosyOS
发表于 2023-9-20 17:06:07
本帖最后由 CosyOS 于 2023-9-20 22:17 编辑
熊仔 发表于 2023-9-20 16:56
大致看了下原来关闭这两中断实现的,SysTick_Handler/定时器0中断、PendSV_Handler/其它替代中断
需要深 ...
其实核心原理就以下几点:
1、SysTick、PendSV、任务临界区,三者间是互斥访问的。
2、滴答服务在SysTick中断中执行。
3、任务服务在任务临界区中执行。
4、中断异步服务和任务调度/切换在PendSV中执行。
5、中断同步服务用互斥访问机制。
从而实现了所有内核的MCU全局不关总中断(零中断延迟)。
无论哪种内核的MCU,只要硬件中断不是最低优先级,就可实现零中断延迟。
只是说由于我的精力有限,CosyOS现仅支持8051、80251、Cortex-M全系列,这三类内核。
试想,连51都可实现全局不关总中断(零中断延迟),还有谁是不可以的呢?
杨为民
发表于 2023-9-20 18:28:18
CosyOS 发表于 2023-9-20 16:18
现在,我已经想明白了一件事,不要再称CosyOS是全局不关总中断的RTOS了,全局不关中断的RTOS有很多,
应称 ...
{:4_250:}一并回复:是的,并且你上面的理解很正确,我上面说的“不被打断”,其实不是指“指令流=CPU执行的二进制机器码流”不被打断,是指“进行任务切换这个程序流不被打断”。在任务切换过程中断,跳出个执行“P2=0x55”这类端口控制的硬中断有什么关系?只要把“任务切换这个操作流”保护好了就行。请注意这三个流不是一回事,这也就是实现你的CosyOS目标的理论基础,但我不知道用你们的语言怎么表达,理解就好了
CosyOS
发表于 2023-9-20 19:05:17
杨为民 发表于 2023-9-20 18:28
一并回复:是的,并且你上面的理解很正确,我上面说的“不被打断”,其实不是指“指令流=CPU执 ...
有时就是语言表达的问题,大家所用的词汇不同,其实对事物的理解还是一样的。