CosyOS
发表于 2024-5-3 22:14:23
cnwans 发表于 2024-5-3 21:23
看了一下说明文档,要求配置8级编译器优化,勾选LX51和AX51,以及内存设置为Small。我的现有工程使用STC8H3 ...
Keil C51 下,如果用 RTOS,编译器优化等级的可选范围为:4~8级。
如果选 0~3级 或 9~11级,都是错误的用法,即使没出问题,也只是没赶上出问题的契机而已。
请相信我的话,你不会吃亏的。
如果代码放不下,应设法减少代码或增加flash。
另外再补充一句,推荐优化等级为8级speed或size,speed偏向于优化代码运行速度,size偏向于优化减少代码大小,
在可选等级中,不仅代码已优化到最小,而且性能也是最为高效的。
CosyOS
发表于 2024-5-3 22:45:06
杨为民 发表于 2024-5-3 20:13
本尊你觉得用什么指标来作为“不关闭总中断”的RTOS的“最大的中断响应时间”的指标?
...
对于“零中断延迟的RTOS”,如 CosyOS 来说,“系统最大中断响应延迟时间” 为 零。
就是说,我们不考虑MCU内核特性的中断响应延迟时间,
而只考虑因系统保护临界段而造成的、“用户中断”不能响应的时间的最大值。
所以,“系统最大中断响应延迟时间” 是相对更科学的说法,而不仅仅是“系统最大关闭总中断时间”。
“系统最大关闭总中断时间” 仅包括,采用关闭总中断来保护临界段的方法;
“系统最大中断响应延迟时间”还包括,在最高优先级中断中处理临界段的情况。
也就是说,“在最高优先级中断中处理临界段的方法”与“关闭总中断来保护临界段的方法”,
都会造成“用户中断”的响应延迟,它们是“殊途同归”。
CosyOS
发表于 2024-5-3 23:17:44
本帖最后由 CosyOS 于 2024-5-3 23:25 编辑
CosyOS 发表于 2024-5-3 22:14
Keil C51 下,如果用 RTOS,编译器优化等级的可选范围为:4~8级。
如果选 0~3级 或 9~11级,都是错误的用 ...
有人会有疑问吗?
Keil C51 的 优化等级 只有 0~9级 啊,
有 10级、11级 吗?
你不是在胡说吧?
杨为民
发表于 2024-5-4 02:43:38
fanxsp 发表于 2024-5-3 20:31
是中断间隔为4us,系统节拍还是1ms,因为OSTimeTick()是有预分频的,我配置预分频为250,那么中断间隔 ...现在明白了,所以:
你的4uS的测试方法是正确的,对你的RTOS的测试结论也是正确的,
这个测试方法值得借鉴推广。
谢谢你的说明。
CosyOS
发表于 2024-5-4 03:30:12
CosyOS 的 原则 是 “简单易用”,以极具浪漫主义色彩的宏定义,实现高度的面向对象、和良好的易用性。
CosyOS 的 宗旨 是 “零中断延迟”,支持内核均已实现全局不关总中断、零中断延迟,从系统层面保证了用户中断的实时响应。
每个RTOS都有它的“标签”或是“特色”,这是该RTOS的安身立命之本。
CosyOS 的标签、特色、就是:易用性、零中断延迟。
如果 CosyOS 的 系统滴答中断 采用 NMI 不可屏蔽中断,虽可确保系统节拍的准确无误,
但这也将导致 CosyOS 的宗旨“零中断延迟”化为泡影,CosyOS 便失去了“灵魂”,必将无立足之地。
CosyOS 在实现“零中断延迟”的前提下,为保证系统节拍的准确,不得已,也对用户提出了两点要求:
1、用户中断应遵循快进快出的原则,仅对事件做必要的紧急处理,再同步至“中断服务任务”做后续处理。
用户中断的最大执行时间应远小于系统滴答周期。
2、临界区也应遵循快进快出的原则,临界段代码的执行时间应远小于系统滴答周期。
综上所述,无论在技术上能否实现 Timer0 的 不可屏蔽中断,CosyOS 都从未打算尝试。
也许有一天,当我的思想达到了新高度,说不定观念就会发生转变。
最后,用 CosyOS-实时运行模型 来说明一下 CosyOS-设计理念:
【用户中断层】(用户中断:按中断优先级实时抢占、零中断延迟)
↓
【内核服务层】(系统中断:处理内核服务、上下文切换等)
↓
【任空务空层】(任空空务:按任务优先级实时抢占)
杨为民
发表于 2024-5-4 05:22:12
本帖最后由 杨为民 于 2024-5-4 05:25 编辑
CosyOS 发表于 2024-5-4 03:30
CosyOS 的 原则 是 “简单易用”,以极具浪漫主义色彩的宏定义,实现高度的面向对象、和良好的易用性。
Cos ...
(1)“每个RTOS都有它的“标签”或是“特色”,这是该RTOS的安身立命之本。CosyOS 的标签、特色、就是:易用性、零中断延迟。”
点评:确实应该如此,世界上没有十全十美的事情,每个作品的本尊会根据不同的考虑进行取舍,创造出各具特色的作品,这也是本论坛出现众多的RTOS的原因。
(2)“如果 CosyOS 的 系统滴答中断 采用 NMI 不可屏蔽中断,虽可确保系统节拍的准确无误,但这也将导致 CosyOS 的宗旨“零中断延迟”化为泡影,CosyOS 便失去了“灵魂”,必将无立足之地。”
点评:我根据自己的实际经验认为,如果CosyOS想采用不可屏蔽中断,也不会导致“零中断延迟”的宗旨化为泡影。
比如:我移植的uC/OS-II新版本“挑战者x51(TZZx51-uCOS2) V3.30”也已经在国外著名的uC/OS-II RTOS上实现了“零中断延迟”,并且系统节拍定时器0是运行在“不可屏蔽中断模式3”上的,同时还允许用户自由地关闭总中断。
《STC单片机 uC/OS-II核心技术(11):uC/OS-II系统对用户程序打开/关闭总中断的响应》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4643)
并且“挑战者x51(TZZx51-uCOS2) V3.30”在排行榜上的性能比“CosyOS-II-STC32G-TEST-V2.1.3-20240410”还要好。
《排行榜重大宣布:在单片机RTOS领域,STC32G12K128单片机 全面碾压 STM32F103C8T6》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=7724)
(3)“综上所述,无论在技术上能否实现 Timer0 的 不可屏蔽中断,CosyOS 都从未打算尝试。
为什么?这正是我的好奇之处。不过你不需要回答这个问题。
zhudean11
发表于 2024-5-4 07:49:17
支持一下,学习
fanxsp
发表于 2024-5-4 09:04:08
本帖最后由 fanxsp 于 2024-5-4 11:21 编辑
支持NMI的RTOS, 也是可以实现部份中断的零延迟。
我设想的实现方法:
1.把有使用到的中断分为两类,一类是有调用系统服务的,另一类是没有调用系统服务的。
2.在portxxx.h 文件中,重新定义宏OSDi()、OSEi(),这两个宏原本是直接关闭和打开总中断,现在改为不关闭总中断,
只关闭和恢复有调用系统服务的中断,不关闭没有调用系统服务的中断,这样没有调用系统服务的中断就不受临界区的
影响,实现零延迟。
3. 实现零延迟的中断可以用来处理需要快速响应的信号。
但是它的使用也有一定限制:
3.1不能调用系统服务。
3.2如果有用到共享变量的话,用户必需通过设置标志或其它方法实现共享变量的保护。
4. 如果这个零延迟的中断处理完紧急事务后,还想要调用系统服务,可以用以下两种方法实现:
4.1设置标志,在其它任务中查询这个标志,然后调用系统服务。
4.2触发一个中断,在中断中调用系统服务。
在实际的项目中,一般需要快速响应,对临界区十几微秒的延迟都无法容忍的信号是很少的。
如果项目中有很多需要快速响应的信号,那选用51单片机也是不合适的,必竞还有中断响应时间。一般会选用性能更强的
MCU、DSP 或 FPGA 来实现。
CosyOS
发表于 2024-5-4 11:57:53
杨为民 发表于 2024-5-4 05:22
(1)“每个RTOS都有它的“标签”或是“特色”,这是该RTOS的安身立命之本。CosyOS 的标签、特色、就是: ...
好的杨老师,我再好好思考一下这个问题,争取突破认知的局限。
但我有一个不解的问题是:
当定时器0运行在“不可屏蔽中断模式3”时,
当定时器0中断发生并开始响应时,
一个用户中断也随之发生,
那么,这个用户中断就要等到定时器0中断最终结束并返回后才能响应,
对于用户中断来说,就没有达到“零中断延迟”的效果啊,
整个定时器0中断从开始响应到结束返回的时间,
就是“系统最大中断响应延迟时间”啊,
难道是我哪里分析出现了纰漏?
请杨老师指教!{:4_196:}
杨为民
发表于 2024-5-4 14:31:14
CosyOS 发表于 2024-5-4 11:57
好的杨老师,我再好好思考一下这个问题,争取突破认知的局限。
但我有一个不解的问题是:
当定时器0运行 ...
(1)在我学的操作系统理论术语中,临界区保护方法分为“关闭中断”的和“不关闭中断”的两大类。“不关闭中断”的操作系统称为“前后台操作系统”。
(2)在“关闭中断”的操作系统中,又分为“关闭总中断”的和“不关闭总中断”的两大类。
(3)在我学的操作系统理论术语中,只要是有多个中断源的,都存在优先级和硬件扫描原因产生的“中断阻塞”现象。
(4)传统CPU的NMI中断肯定阻塞其他任何与它“同时”或者“稍后”发生的任何其他中断,这些其他中断肯定会被NMI中断“延迟”,肯定只会在NMI中断完成后才能进入自己的ISR。
(5)关于“对于用户中断来说,就没有达到“零中断延迟”的效果啊”,首先“零中断延迟”这个词除了本论坛,我没有在其他任何地方看到过(转发的除外)。
我想达没有达到效果,应该问发明“零中断延迟”这个词的本尊。
(6)我在本论坛使用“零中断延迟”这个词,只是作为网络语言使用而不是科学语言,只是表示我的RTOS的临界区保护方法与CosyOS一样是属于“不关闭总中断”的类型。
至于“零中断延迟”这个词的科学定义,我到现在也不清楚。就像我到现在也不知道“牛哄哄”的科学意思,我也很纳闷“牛”为什么要“哄哄”呢?不过我有时还会使用“牛哄哄”这个词。
(7)至于什么是RTOS系统的“系统最大中断响应延迟时间”,uC/OS-II的原著中有讨论(tzz1983网友的移植版程序中有中文的电子版)。
对于STC单片机RTOS的这个指标,我正在上面的楼层征求大家意见的过程中。
也许,对于“不关闭总中断”的RTOS(比如CosyOS),整个定时器0中断从开始响应到结束返回的时间,就是“系统最大中断响应延迟时间”,而不是我在排行榜中给出的“0”。
(8)我认为纰漏出在:只有操作系统上的概念分为“关闭总中断”的和“不关闭总中断”的两大类,而由于存在中断阻塞,根本就不存在“零中断延迟”这种可能,这与任何操作系统无关。