CosyOS 发表于 2024-5-3 11:38:58

本帖最后由 CosyOS 于 2024-5-3 14:16 编辑

fanxsp 发表于 2024-5-3 11:11
我的系统没有提供这种方法,只能是在不可屏蔽中断中不调用系统服务。因为不可屏蔽中断的目的就是为了快速 ...
我的意思不是说要你在“不可屏蔽中断中”等待,
而是说,
计数器为假,说明当前不在临界区中,你就可以执行服务;
计数器为真,说明当前正在临界区中,你就不能执行服务,只做一个标志位,
然后中断该退出就退出。

等最终临界区退出时,查询这个标志位,如果为真,就清零,并执行相应的服务。

这就是 CosyOS “中断挂起服务”的思想啊!不能立即执行的服务就挂起到临界区中执行。
当然,CosyOS 是中断中调用的大部分服务都直接挂起到PendSV中执行,
没有做是否可在本地直接执行的判断,稍有区别。

fanxsp 发表于 2024-5-3 11:51:12

本帖最后由 fanxsp 于 2024-5-3 11:53 编辑

CosyOS 发表于 2024-5-3 11:38
我的意思不是说要你在“不可屏蔽中断中”等待,
而是说,
计数器为假,说明当前不在临界区中,你就可以执 ...
这个是一样的啊,因为这个中断的响应时间都被延迟了一个临界区的时间,关中断的话,响应时间也是延迟一个临界区的时间。从中断响应时间上看,没有什么区别。

CosyOS 发表于 2024-5-3 12:08:14

fanxsp 发表于 2024-5-3 11:51
这个是一样的啊,因为这个中断的响应时间都被延迟了一个临界区的时间,关中断的话,响应时间也是延迟一个 ...

首先,我说的这个方法,未必是杨老师的意思,杨老师可能另有深意。
单从我说的这个方法来说,可以提供给你参考。
因为它能够让你在不可屏蔽中断中执行服务啊?不管是直接执行还是间接(挂起)执行。
但这个方法也仅限只有一个NMI,如果是多个NMI,该方法还需改进、调整。

fanxsp 发表于 2024-5-3 12:20:24

本帖最后由 fanxsp 于 2024-5-3 12:24 编辑

CosyOS 发表于 2024-5-3 12:08
首先,我说的这个方法,未必是杨老师的意思,杨老师可能另有深意。
单从我说的这个方法来说,可以提供给 ...
我是这样理解,对于中断响应时间,我们关心的不是每一次中断的响应时间,而是最大的中断响应时间。如果按上述方法,那不可屏蔽中断的某一次中断响应时间也许会快一些,但是最大响应时间和关中断是一样的,所以没有太大意义。增加这些服务,系统又变复杂了。我是希望,尽可能的精简。

CosyOS 发表于 2024-5-3 14:11:00

本帖最后由 CosyOS 于 2024-5-3 14:19 编辑

fanxsp 发表于 2024-5-3 12:20
我是这样理解,对于中断响应时间,我们关心的不是每一次中断的响应时间,而是最大的中断响应时间。如果按 ...
我提出这个方法,只是在试图分析杨老师说的是不是这个意思?
在“嵌套的临界区”的前提下,实现在不可屏蔽中断中执行服务。
至于该方法好不好,是否适用,就是另外一回事了。

我只是在说,有这样一种方法。
正如 CosyOS 也并未采用此方法。


fanxsp 发表于 2024-5-3 15:07:17

CosyOS 发表于 2024-5-3 14:11
我提出这个方法,只是在试图分析杨老师说的是不是这个意思?
在“嵌套的临界区”的前提下,实现在不可屏蔽 ...

好的,明白了

杨为民 发表于 2024-5-3 19:40:52

本帖最后由 杨为民 于 2024-5-3 20:15 编辑

五一节快乐。

(1)其实我的想法很简单:我不明白为什么要用4us=250KHz的系统节拍频率来验证一个RTOS是否可以正常工作在“不可屏蔽中断模式3”?只是想请楼主介绍一下他怎么想的。
(2)另外:本论坛的哪一个(包括楼主的)RTOS的系统节拍频率在250KHz时还能正常工作(当然是在模式0)?请各位本尊自己亲自去试试,反正我自己的无论自编或者移植都不能!
(3)既然我自己的RTOS系统节拍频率在250KHz(模式0)时不能够正常工作,那么我是不是可以得出结论:STC单片机的任何一个定时器的模式0都不能应用于我的RTOS?显然不能!
(4)系统节拍定时器选择模式什么肯定是本尊的权利,每个本尊都有自己的考虑。所以我是想与各位本尊和网友交流一下,听听你们的想法:

如果你们RTOS采用“不可屏蔽中断模式3”在技术上是可行的话,你们的RTOS会不会采用模式3?如果不采用是有什么顾虑吗?

(5)我看到各位的RTOS在定时器工作在模式0的时候选择了系统节拍频率是1KHz,那么大家觉得对于我的RTOS的模式3系统节拍频率应该选择多少?



杨为民 发表于 2024-5-3 20:06:37

fanxsp 发表于 2024-5-3 12:20
我是这样理解,对于中断响应时间,我们关心的不是每一次中断的响应时间,而是最大的中断响应时间。如果按 ...

楼主:我是这样理解,对于中断响应时间,我们关心的不是每一次中断的响应时间,而是最大的中断响应时间。如果按上述方法,那不可屏蔽中断的某一次中断响应时间也许会快一些,但是最大响应时间和关中断是一样的



我赞同你这个说法:
(1)首先我采用不可屏蔽中断模式3的原因中一点都不包括提高任何一次中断响应时间,而且你的结论“最大响应时间和关中断是一样的”是正确的。
现在我理解一点你为什么要将节拍频率提高到250KHz了。

(2)在排行榜中按一次中断的响应时间来排名我知道是不公平的,至少要给出“最大的中断响应时间”的指标,然后用“平均中断响应时间”来排名。但是,我不知道对于CosyOS这类“不关闭总中断”的RTOS,如何测试它的“最大的中断响应时间”的指标。
(3)楼主觉得用RTOS系统测试程序运行中“最大关闭总中断的时间”来作为“最大的中断响应时间”的指标行不行?


tzz1983 发表于 2024-5-3 20:06:51

本帖最后由 tzz1983 于 2024-5-3 20:09 编辑

这个不可屏中断,原理是非常简单的.
我第一版移植的uCOS-II,切换任务过程就是允许被中断的.
当时还引起了不小的争论.

现在来描术一下原理:
1. 为了容易理解,先假设不可屏蔽中断的中断代码什么也没做,
就是执行了几个_nop_(), 此时的不可屏蔽中断的行为可以理解为:
转到中断后占用了几个CPU时钟, 然后就返回了.
这个对OS或者任何应用没有影响吧? 不就是相当于暂停了一下吗?

2. 现在又假设在不可屏蔽中断的中断代码里做了很多活,
比如说执行了P2翻转, 然后更新了自己的计数值重载值. 再然后又把SYS时钟从外部晶振调到了内部IRC,(频率不变))
不管不可屏蔽中断里做了多少活, 只要是不和OS相关就没有问题, 中断返回时, 所有的上下文都会恢复到中断前的模样(编译器保证).
OS得以继续执行代码, 和1所说一样的道理!

杨为民 发表于 2024-5-3 20:11:23

tzz1983 发表于 2024-5-3 20:06
这个不可屏中断,原理是非常简单的.
我第一版移植的uCOS-II,切换任务过程就是允许被中断的.
当时还引起了不 ...

本尊你觉得用RTOS系统测试程序运行中“最大关闭总中断的时间”来作为你移植的RTOS的“最大的中断响应时间”的指标行不行?
页: 2 3 4 5 6 7 8 9 10 11 [12] 13 14 15 16 17 18 19 20 21
查看完整版本: 原创极简的51-MCU专用RTOS TinyRTOS51