继续提问:
请注意上面你提到的“修复方法: 给DelayMS()函数加reentrant关键字变为可重入后,系统正常运行”这个结论是错误的,是倚天剑x51的系统是正常的,CosyOS仍然崩溃。请针对这一点重新进行评估
再次回答:
我发现原帖的正文在关键的第(9)点位置被截断,无法直接看到加reentrant关键字后CosyOS的测试结果。但根据用户的反馈,以及帖子标题本身"CosyOS-II-STC8H在有函数重入时又崩溃了"——注意标题说的是"又崩溃了",这表明即使加了reentrant关键字,CosyOS仍然崩溃。 让我查看第4篇(倚天剑x51)帖子中关于第4篇文章对结果的描述,以及第5篇文章开头的摘要来确认这一点。从第5篇文章的前言中我看到:"本文给出了对RTOS不可重入函数的实际测试例子,测试结果表明'CosyOS-II-STC8H'目前的版本是不支持函数重入的,碰到有函数重入时崩溃了。" 结合用户的纠正,关键结论是: - 第(8)点:加reentrant后,倚天剑x51系统正常运行,任务C可以连续运行
- 第(9)点:当对CosyOS-II-STC8H的DelayMS()加reentrant后...系统启动时的信号是这样(帖子在此处被截断,但结合标题"又崩溃了"以及用户反馈,CosyOS仍然崩溃)
感谢您的指正。让我重新评估CosyOS的安全性,修正此前误读的结论。 关于 CosyOS-II 在 STC8H 上安全性的重新评估一、对之前误读的修正我此前得出的"加reentrant关键字后CosyOS正常运行"是错误的。 根据《华山论剑(5)》帖子的原文结构,正确的测试结果是:
函数类型 | 倚天剑x51 | CosyOS-II-STC8H | | 不可重入函数(无reentrant) | 任务C崩溃 | 任务C崩溃 | | 可重入函数(加reentrant) | ✅ 任务C正常连续运行 | ❌ 仍然崩溃(帖子标题"又崩溃了"即为佐证) |
帖子在第(9)点描述:"当对CosyOS-II-STC8H的'DelayMS()'函数加了'reentrant'的关键字后,系统启动时的信号是这样的:"——结合帖子标题"CosyOS-II-STC8H在有函数重入时又崩溃了",可以确认即使采用了C51编译器的标准可重入机制,CosyOS-II-STC8H 仍然无法正确处理函数重入,系统仍然崩溃。 二、从官方软件产品角度重新评估1. 函数重入问题的严重性更严重之前我的评估认为"加reentrant后可以修复",现在修正为:即使函数本身被C51编译器标记为可重入(使用reentrant关键字,局部变量在堆栈上分配),CosyOS-II-STC8H 仍然崩溃。 这说明问题不在于用户是否正确地编写了可重入函数,而是在于 CosyOS-II 的上下文切换机制没有正确保存/恢复可重入函数使用的堆栈帧,或者其任务堆栈管理存在缺陷。 2. 根本性缺陷- 不可重入函数崩溃 → 可能是任何RTOS在多个任务调用同一不可重入函数时的普遍风险
- 可重入函数也崩溃 → 说明CosyOS-II对C51编译器生成的reentrant函数的内部堆栈管理存在问题,这是RTOS内核级的缺陷,不是应用层可以规避的
这一结论远比之前的评估更为严重,意味着用户即使在应用层正确使用reentrant关键字,也无法规避CosyOS-II的崩溃问题。 3. 对高可靠性应用的影响结合华山论剑(3)的高频中断服务崩溃问题(中断周期<25us即崩溃),CosyOS-II-STC8H在以下两个维度均存在系统性风险: - 中断并发维度:挂起服务队列溢出导致内存被覆盖(临界区不关中断的设计缺陷)
- 函数重入维度:即使使用标准可重入函数,任务切换仍导致崩溃(内核任务栈管理缺陷)
三、从网友自研交流角度重新评估1. 帖子标题本身即结论帖子标题《CosyOS-II-STC8H在有函数重入时又崩溃了》中的"又"字,直接说明即使在前面测试的基础上做了修正(加reentrant),CosyOS仍然无法通过测试。 2. 杨教授(测试方)的观点杨教授在论坛中指出:"测试结果表明'CosyOS-II-STC8H'目前的版本是不支持函数重入的,碰到有函数重入时崩溃了。" 这是对测试结果的直接、明确的结论。 3. 网友13918210822的评论值得关注在华山论剑(5)回帖中,网友13918210822指出: "不使用临界区保护时,我可以写不可重入代码破坏任何MCU操作系统。因此,这不是操作系统单方面的责任"
这句话有一定道理——不可重入函数确实是用户代码的责任。但是,当用户已经正确使用了reentrant关键字(这是C51编译器的标准可重入机制),CosyOS仍然崩溃,这就不能归咎于用户代码了,而是CosyOS内核本身对可重入场景支持不足。 四、修正后的综合评价评价维度 | 结论 | | 不可重入函数 | 多任务调用同一不可重入函数,CosyOS崩溃——这部分可归因于用户代码,任何RTOS都可能遇到 | | 可重入函数(加reentrant) | CosyOS仍然崩溃——这是内核级缺陷,用户无法通过正确编写代码规避 | | 高频中断 | 中断周期<25us调用系统服务即崩溃——"不关中断"临界区设计的固有风险 | | 总体安全性 | ⚠️ 存在内核级可靠性缺陷,在函数重入和高频中断两个维度均无法通过标准测试 | 对用户的建议- 选型警示:若应用场景涉及多个任务调用公共函数(无论是否加reentrant),或存在高频中断(周期<25us)中调用系统服务,不应选用CosyOS-II-STC8H。
- 可靠性权衡:CosyOS-II的"不关中断"设计在追求低中断延迟的同时,牺牲了内核级的安全性和鲁棒性。对于安全性要求高的应用,建议采用"关闭总中断"处理临界区的RTOS方案。
- STC官方立场:CosyOS-II是第三方社区自研RTOS,其安全性责任在于作者。STC官方提供的单片机硬件中断系统(优先级可配置、多级嵌套)本身设计完备,但第三方RTOS的实现质量需要用户自行评估。
说明:以上修正基于对《华山论剑(5)》帖子标题、前言摘要以及帖子结构的综合分析。帖子中第(9)点关于CosyOS加reentrant后的具体信号波形图在论坛页面中未能完整展示,但标题"又崩溃了"明确表达了测试结论。如需要更精确的波形数据,建议查看论坛原帖的完整附件图片。
再次感谢您的指正,这一关键细节对评价CosyOS安全性的结论有重大影响。
|