tzz1983
发表于 2024-5-11 14:32:10
TinyRTOS51的0中断延迟, 和 FreeRTOS 不受OS控制的 高优中断,属于一个类型,我之前做UCOSII 时也有过相关的概念,
这种类型,高优确实能做到零中断延迟,作为代价,不能调用任何OS服务。
这是和 CosyOS不一样的地方。
从全局来看,TinyRTOS51 和 FreeRTOS 都不算是从内核上支持零中断延迟的
CosyOS
发表于 2024-5-11 14:32:40
杨为民 发表于 2024-5-11 14:04
这是你在62楼的回答:
据我所知,在 RTOS 当中,在高优先级的可实现0中断延迟的中断中,
当然承认啊,不仅是TinyRTOS,其它的 RTOS 我也承认。
fanxsp
发表于 2024-5-11 14:55:45
本帖最后由 fanxsp 于 2024-5-11 15:21 编辑
tzz1983 发表于 2024-5-11 14:32
TinyRTOS51的0中断延迟, 和 FreeRTOS 不受OS控制的 高优中断,属于一个类型,我之前做UCOSII 时也有过相 ...
这个我知道,两者实现方法是不一样的,我是认为两者的实际效果是一样的。CosyOS可以直接调用系统服务,这一点比较方便,但是调用系统服务也会被系统延迟。临界区是客观存在的,系统服务都不能在临界区运行,无论用什么方法都一样。不受OS影响的高优先级中断,用户通过一些办法,比如设标志或触发中断,也是可以调用系统服务的,只是这种调用也是会被系统延迟。CosyOS虽然可以直接调用系统服务,但是也会被系统延迟,从效果上说两者是一样的。这个单单从理论上,很不好讨论。要通地一个具体的应用场景,比较两者的应用情况,才有办法讨论。
FreeRTOS 和ucos ,都可以通过不受OS影响的高优先级中断,达到相同的效果。
杨为民
发表于 2024-5-11 15:09:28
CosyOS 发表于 2024-5-11 14:32
当然承认啊,不仅是TinyRTOS,其它的 RTOS 我也承认。
(1)承认就好。以后不用再争论“天下唯几”了,也不用像铁杆粉丝一样再争论谁先进谁落后了,也别指点江山讨论天下谁被谁淘汰了。
(2)关于临界区保护要不要关闭总中断,其实只是作者根据权衡各种利弊的一种选择,好的作品通常把这种选择留给用户。
我很赞同你在你的“CosyOS-II-STM32F4”给用户的选择,全文摘抄于下,作为对你M4上的CosyOS-II的点评,其余的等STC33M出来后,根据官方的平台是什么在讨论。
// <o> 系统方案配置
// <0=> 全局寄存器变量 <1=> 互斥访问指令 <2=> 关中断
// <i> 方案一、全局寄存器变量
// <i> 该方案适用于所有ARM内核并具有最高的性能,可实现全局不关总中断、零中断延迟。但要求用户必须做到以下三点注意事项:
// <i> (1) 编译器必须开启对GNU/GCC的支持。
// <i> (2) 项目中所有C文件(CosyOS系统文件除外)均需直接或间接包含os_link.h,以声明全局寄存器变量r10、r11。
// <i> (3) 部分标准库/微库函数不能被调用(如printf),原因是它们已经被编译使用了r10、r11。
// <i> 方案二、互斥访问指令
// <i> 该方案仅适用于Cortex-M3/M4/M7等支持指令的内核,可实现全局不关总中断、零中断延迟。
// <i> 该方案不需要方案一中叙述的三点注意事项。
// <i> 方案三、关中断
// <i> 该方案适用于所有ARM内核,并具有极短的、确定的关闭总中断时间(包括开中断在内,不超过10个指令周期)。
// <i> 该方案,内核关闭总中断仅发生在中断挂起服务装载器中的__LOAD段。
// <i> 该方案不需要方案一中叙述的三点注意事项。
// <i> 总结:
// <i> 简单来说,方案一适用于高手,方案二适用于特定的内核,方案三适用于小白。
#define MCUCFG_SYSSCHEME 1
(2)其实“关闭总中断的”临界区保护方法本质上只有一种,就是关闭总中断,其他差别无非是能否嵌套和如何实现等。
(3)但是“不关闭总中断的”临界区保护方法却又很多种,尤其对不同架构的单片机就有不同的种类,比如你的CosyOS。
而现在看来在STC单片机上能实现“零中断延迟”的的RTOS远不止一种,而这些能实现“零中断延迟”的方法肯定各不相同,以后大家多交流就好
杨为民
发表于 2024-5-11 15:15:10
tzz1983 发表于 2024-5-11 14:32
TinyRTOS51的0中断延迟, 和 FreeRTOS 不受OS控制的 高优中断,属于一个类型,我之前做UCOSII 时也有过相 ...
我对你最近给出的作品 uC/OS-II@STC8H, 51核移植版本的点评是:
“uC/OS-II@STC8H, 从内核上是支持零中断延迟的”。
我的这个评价作为本尊的你觉得是正确的吗?
CosyOS
发表于 2024-5-11 15:19:37
杨为民 发表于 2024-5-11 15:09
(1)承认就好。以后不用再争论“天下唯几”了,也不用像铁杆粉丝一样再争论谁先进谁落后了,也别指点江 ...
是的,杨老师讲的 非常有道理,专家教授的水平就是不一样。
向杨老师学习!
我以前说的话确实不妥、有些过激,
实际上每种方法都有他的优势和劣势,没有绝对的好或不好,
都是权衡利弊,做出的选择。
正因为有各种各样的方法和技术手段,世界才因此而缤纷多彩!
tzz1983
发表于 2024-5-11 15:37:36
杨为民 发表于 2024-5-11 15:15
我对你最近给出的作品 uC/OS-II@STC8H, 51核移植版本的点评是:
“uC/OS-II@STC8H, 从内核上是支持零中断 ...
可以这样认为,其实大家都知道怎么回事。
如果说,在高优中断里不调用OS服务,基本上都是零改就能实现的事情。
tzz1983
发表于 2024-5-11 15:48:44
fanxsp 发表于 2024-5-11 14:55
这个我知道,两者实现方法是不一样的,我是认为两者的实际效果是一样的。CosyOS可以直接调用系统服务,这 ...
在中断里不是非要调用OS服务的,比如说我只是改变一个IO的输出电平。
用FreeRTOS的办法是受限的,他只能是指定的哪些优先级可以不受OS管理,
而另一种是,一开始就是除了和pendSV同优先级以外的任何中断都可以避开pendSV(也就是避开OS)先做自己的事情,然后再去执行OS服务。这就是区别。
别把OS服务看得那么重,或许我要做的不是OS服务呢?其次就是OS服务本身就应该排在中断代码之后来执行。
fanxsp
发表于 2024-5-11 16:08:05
本帖最后由 fanxsp 于 2024-5-11 16:12 编辑
tzz1983 发表于 2024-5-11 15:48
在中断里不是非要调用OS服务的,比如说我只是改变一个IO的输出电平。
用FreeRTOS的办法是受限的,他只能 ...
如果是只是改变IO电平的话,那也是一样的。FreeRTOS的不受OS管理的高优先级中断,具体是怎么实现的,我不是很清楚。我的系统是,只要是没有调用系统服务的中断且优先级不低于受OS管理的中断,就可以指定为不受OS管理。不受OS管理的中断,除了不能调用系统服,其它都可以。具体做法是,在OSDi(), OSEi()在两个宏里面,不关闭和恢复EA,只关闭和恢复受OS管理的中断,不管不受OS管理的中断。
tzz1983
发表于 2024-5-11 16:12:57
fanxsp 发表于 2024-5-11 16:08
如果是只是改变IO电平的话,那也是一样的。FreeRTOS的不受OS管理的高优先级中断,具体是怎么实现的,我不 ...
好吧,也是。
认知是一样的,就不为了说法不一致而伤筋动骨了。
M3是用优先级划一条线.
你是用进出临界区的方法的多元化来实现。
只是因为硬件不一样,最终是走到一起去的,这么说应该是对的吧?{:smile:}
页:
2
3
4
5
6
7
8
9
10
11
[12]
13
14
15