杨为民
发表于 2023-9-19 23:24:14
熊仔 发表于 2023-9-19 22:36
1,通过对比,就Task_A稍微不一样。
增加Delay_MS(50); // 50毫秒
测试竟然可以工作,但是长时间工 ...
“结论:方法0有bug,不能用”
自从给了测试程序,好像我们的观点倒了个个,你是想证明“任务切换的核心部分必须在关闭总中断的保护下进行”吗?
熊仔
发表于 2023-9-20 08:49:56
一,我昨晚也想到了你说的中断触发切换方式不用关中断的情况,是因为这个触发的中断属于高优先级,其他中断不能打断。这种高优先级的中断切换实时性稍微差点。
二,一个实时抢占式操作系统的重要指标是“实时抢占”,这个“实时抢占”主要表现在中断抢占,也就是说高优先级的中断优先,才能执行紧急事件。比如一个外部信号触发中断,必须先紧急处理。
举一个例子,常用的串口中断,比如通讯波特率是10M,也就是一个字节1us,如果系统关闭中断时间超过1us,肯定出错。导致数据丢失。
移植到stc32的ucos,上下文切换部分是1us多点。这个软中断优先级设为最低,仅仅是在保护系统重要的2条变量中关闭中断的。关闭中断的这个时间也就不到1us。如果串口总的优先级设为更高,就可以实时抢占cpu,处理串口接收数据。
当然还有一个 解决方案是降低波特率。这里只是举例说明实时抢占的重要性。
三,移植到STC8和STC32的ucos对比,STC8的ucos实时性差太多了。后期再研究下,提高这个实时性。
熊仔
发表于 2023-9-20 09:03:59
杨老师提出这个方法0,我弄了例子证明了不能工作,杨老师应该回应这个问题。要不就是方法0不行。
我的例子很简单,不是刁钻例子,开启中断就出问题了。
杨为民
发表于 2023-9-20 10:25:11
本帖最后由 杨为民 于 2023-9-20 10:31 编辑
熊仔 发表于 2023-9-20 09:03
杨老师提出这个方法0,我弄了例子证明了不能工作,杨老师应该回应这个问题。要不就是方法0不行。
我的例子 ...
期待你的证明你自己的移植版用方法0不行的例子,而不是证明别人的移植程序不行的例子。如果你宣布放弃你的移植版,那么只剩挑战者的,我自然去找他啦
(1)照着范例编一个不出错的程序,及格。
(2)自己根据要求编一个不出错的程序,良好。
(3)自己根据测试要求编一个肯定出错的程序,优秀。
(4)要想对自己移植的或者研制的提供给别人做平台使用的RTOS负责,就一定要优秀
熊仔
发表于 2023-9-20 10:43:58
杨为民 发表于 2023-9-20 10:25
期待你的证明你自己的移植版用方法0不行的例子,而不是证明别人的移植程序不行的例子。如果你宣布放弃你的 ...
声明下我的移植版不支持方法0,也没有提供方法0。任务切换的软件中断里面,关键的两条语句必须关中断处理。
方法0是杨老师出来的,是否正确呢?我测试不成功,不能通过我的例子。具体原因不去探究。
熊仔
发表于 2023-9-20 11:06:04
方法0测试不成功的例子杨老师已经提供了。
不需要再提供了。
两个移植版本内核基本是一样的。
方法0,啥都不做保护,估计没人认可。系统安全最重要。
杨为民
发表于 2023-9-20 11:07:52
本帖最后由 杨为民 于 2023-9-20 11:09 编辑
熊仔 发表于 2023-9-20 09:03
杨老师提出这个方法0,我弄了例子证明了不能工作,杨老师应该回应这个问题。要不就是方法0不行。
我的例子 ...
你的逻辑我很奇怪:
(1)我已经用你的锅你的灶最好地证明了:“方法0不行”,还不够吗?还需要用挑战者的例子来证明这个结论?你的地位比他低吗?下面是我的原文:
“(5)下面是对熊仔网友移植的UCOSII-STC32G进行无临界区保护测试的结果:
很不幸,在大约32秒后翻车了。”而且是有图有真相!
(2)你的翻车已经证明“方法0不行”,已经足够了,我还需要别人的翻车来证明吗?你还需要别人的翻车来证明吗?
(3)“方法0不行”这个结论成立,就意味着我的“任务切换的核心必须在临界区保护下进行”这个论断成立,也就是用事实证明了我的“已经有了在临界区保护下进行任务切换的需要”的论断成立了。
(4)我当然知道、认为和肯定“方法0不行”的这个结论,问题是按照逻辑学,你承认我的那两个论断吗?如果你不承认,你只要“方法0不行”,你也讲讲你的道理
熊仔
发表于 2023-9-20 11:28:26
本帖最后由 熊仔 于 2023-9-20 11:30 编辑
(3)“方法0不行”这个结论成立,就意味着我的“任务切换的核心必须在临界区保护下进行”这个论断成立,也就是用事实证明了我的“已经有了在临界区保护下进行任务切换的需要”的论断成立了。
“任务切换的核心必须在临界区保护下进行”这个论断,貌似没有人不同意吧,谁推翻了?
我一直同意这个结论。原来搞这么多就是证明这个结论正确啊。
所以我才说了任务切换的软件中断里面,关键的两条语句必须关中断处理。也就是“任务切换的核心必须在临界区保护下进行”。
熊仔
发表于 2023-9-20 11:39:49
回到这个帖子的主题惊天大BUG之二:任务切换用软中断时RTOS系统不需要任何关闭总中断的临界区保护
我还以为杨老师脑洞大开,搞了一个方法0.
看来我误解了。原来只是证明关键语句必须临界保护。
目前移植的ucos关键语句都是临界保护的,没有bug。所以主题有问题,被人误以为系统有bug。
熊仔
发表于 2023-9-20 11:43:13
(1)根据笔者很早以前对RTOS的研究表明,当RTOS系统采用软中断指令进行任务切换的时候,RTOS系统本身是不需要任何关闭总中断的临界区保护方法的,系统包含的关闭总中断的临界区保护方法只是提供给用户做特殊用途的。为此我论坛上面的两个移植版本进行了测试,果然如此。
杨老师第一条就说这个,这个又是啥意思?我都懵逼了。看这条说明,还真以为方法0是正确的。
那是你的软件中断是最高优先级,其他中断不能打断吧。