找回密码
 立即注册
查看: 340|回复: 19

STC单片机 uC/OS-II核心技术(13):写(或移植)个 OS系统, 关总中断,不影响OS系统运行

[复制链接]

该用户从未签到

61

主题

622

回帖

1万

积分

荣誉版主

积分
10812
发表于 2024-3-24 12:03:27 | 显示全部楼层 |阅读模式
本帖最后由 杨为民 于 2024-3-31 11:26 编辑

LAOXU在《这是LAOXU关于临界区保护和函数可重入的测试题,欢迎大家来测试自己学的怎么样》(https://www.stcaimcu.com/forum.p ... =7384&extra=&page=1
帖子的第69楼出了个高难度的题目,我特开此贴来回答他的问题,大家先交流,我的回答将在2楼给出。
==== 原始题目 ================================
下面是LAOXU题目原文:
我是没本事给 X老师出测试题.
既然大家讨论的这么热烈, 我不出点有些难度的题, 对不起大家了.
这里的大虾都是 OS专家, 我就出个 OS方面的题吧 !
记得 X老师说过: 关了 中断EA, OS就不能工作了.
也有网友说过: 中断是 OS的灵魂, 关闭 EA, OS魂都没了, 还能干啥?
我这道题就是反向思维, 写(或移植)个 OS系统, 离开 EA, 即无论用户何时何地关中断, 都不能影响 OS系统的运行.
欢迎大家参与讨论, 来点真正的干货, 让 STC论坛, 拥有足够的含金量, 别老喝水, 不嫌肚子涨吗?
==== 提高题目 ===================================
LAOXU又在该贴第74楼又补充到
要让你们 OS大虾出马, 当然要有点难度的.
再解释一下, 用户使用任何中断, 开关中断, 都与本 OS 无关,
OS的使用与性能, 与现在的通用级 OS标准, 无什么差别,
仅仅强调的是, 用户开关中断, 对 OS无影响, OS该于啥还是干啥.


==== 再次提高要求题目 =====================================
LAOXU对我的第一次答卷:
《挑战者x51(3):不使用任何中断的uC/OS-II移植版》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4506

评判为不及格,说是初学者玩具,在本贴第12楼明确提出要有中断, 嘀嗒时钟:

题目的要求是: OS的使用与性能, 现在的通用级 OS标准, 什么差别,
答卷里, 连半个中断都没有, 嘀嗒时钟如何实现?  一个没有嘀嗒时钟的 OS, 能叫 OS吗?

和现在通用级 OS标准, 差的远呢~~~
作为初学者的玩具可以.

==== 我的答复 ====================
谢谢LAOXU不但看了考试卷子,还能够仔细看我的代码,然后才做出了公正的评判。
下面是我的补考卷子:
挑战者x51(4):零中断延迟的uC/OS-II的STC32G移植版》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4600) 2023年10月11日
卷子的简介见2楼

以上是我的补考答卷,请LAOXU给我一个机会,通过补充考试,最好是分数高一点。

回复 送花

使用道具 举报

该用户从未签到

61

主题

622

回帖

1万

积分

荣誉版主

积分
10812
 楼主| 发表于 2024-3-24 12:03:44 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-25 01:14 编辑

LAOXU出的“有些难度的题”其实是我早就解决的问题,结果见我2023年10月4日的帖子:
挑战者x51(3):不使用任何中断的uC/OS-II移植版》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4506
2023年10月4日
帖子的简介如下:
一、梦想照亮现实
(1)有个人说:“我有一个梦”,然后那个梦就实现了。有个网友有个理想:

对于单片机应用中断是最重要的实时响应技术手段。我理解他理想的RTOS系统是:
如果一个硬件中断的条件成立,就应该让该中断立刻发生,实现实时响应。
具体地说,对于STC32G单片机,理想的RTOS系统在任何时候都不应该关闭总中断(EA=0),哪怕关闭的极短的时间也不行,因为这个极短的关闭总中断的时间就成了限制RTOS系统的实时响应时间的上限。
(2)根据前文介绍的中断外任务切换方法,笔者认为V1.20版本的“挑战者x51 uC/OS-II移植版”已经实现了这个理想。
二、不使用任何中断的uC/OS-II移植版
(3)在前文范例的基础上,笔者删去了挑战者x51 V1.10版本中的与中断有关的程序,形成了V1.20版本,形成了本文的范例。


==== 补考卷子 ====================
谢谢LAOXU不但看了考试卷子,还能够仔细看我的代码,然后才做出了公正的评判。
下面是我的补考卷子:
挑战者x51(4):零中断延迟的uC/OS-II的STC32G移植版》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4600) 2023年10月11日

一、引  言
(1)通常包括uC/OS-II在内的单片机上的RTOS都使用关闭总中断作为对临界资源和临界过程的保护方法,但是这种方法会影响RTOS系统的实时性。
在单片机RTOS中任务控制块(TCB)是最重要的临界资源,控制各个任务的状态。在单片机RTOS中进行任务调度是最重要的临界过程,它根据系统和用户的要求对RTOS的临界资源进行读写操作。
处于对操作系统可靠性的要求,要求对这些临界资源的操作必须是独占地连续地进行,因此关闭总中断是一种最简单的方法,可以确保临界区内的程序连续地被执行。
在临界区中关闭总中断执行程序的时候,任何中断都会被阻塞不能发生,这个中断延迟时间就成了RTOS系统的实时响应时间上限。
因此对于一个RTOS系统,这个中断延迟时间越小越好,最好为零。
(2)STC32G/F是STC最新的32位单片机系列,片上的大量高速设备可以在很多领域得到应用。片上众多的高速设备都需要中断的支持,中断源的数量已经超过60个。基于80251的中断机制,除个别中断外,总中断(EA)一个标志位,控制着这些所有这些中断的使能,如果在临界区中关闭总中断,则所有硬件中断都会被阻塞不能发生,如果这时发生同步/异步通讯中断请求,则可能产生通讯错误。
因此对于STC32G单片机RTOS系统,关闭总中断的时间越小越好,最好任何时候都不关闭总中断。
(3)挑战者x51-UCOS2 V3.10是uC/OS-II在STC32G单片机上移植版。其设计目标是:
在RTOS的所有内核中都不涉及对总中断标志“EA”的操作,在整个单片机运行过程中,挑战者x51系统都不会关闭总中断,实现零中断延迟,适用于对系统实时性及中断响应速度有很高要求的场。
(4)为了展示移植版的特色,判断移植版是否达到移植目标,移植版必须配有一些可以在实际单片机上运行的范例程序。
为了展示挑战者x51移植版是否达到所有内核函数全局不关总中断(零中断延迟)的目标,本文提供了三个范例,这三个范例都使用了定时器0的模式3不可屏蔽中断来作为挑战者x51实时操作系统的节拍器
第一个范例显示了任何时候不关闭系统中断的效果,第二个范例显示了关闭总中断并不影响定时器0的不可屏蔽中断和RTOS的任务调度,第三个范例显示了在移植版中使用加锁/解锁的临界区保护方法不影响任何中断的发生。

回复 支持 反对 送花

使用道具 举报

该用户从未签到

61

主题

622

回帖

1万

积分

荣誉版主

积分
10812
 楼主| 发表于 2024-3-24 12:05:02 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-24 12:08 编辑


此楼文字来自《这是LAOXU关于临界区保护和函数可重入的测试题,欢迎大家来测试自己学的怎么样》(https://www.stcaimcu.com/forum.p ... p;extra=&page=8
的帖子第71楼的网友“tzz1983”的答复

问:关了中断EA, OS就不能工作了.
答:目前本坛三个常见的RTOS  "FreeRTOS, uCOS, CosyOS" 都依赖中断切换任务。 其中FreeRTOS or STC32G12K128 官方简洁可靠版V1.0.2 ,是基于时钟滴答切换任务。

问:中断是 OS的灵魂, 关闭 EA, OS魂都没了, 还能干啥?
答:中断不仅是OS的灵魂,不使用OS时也同样如此。
中断是一切设计多样性的源泉,同时也是MCU硬件组成部分的重要构件。
现有的OS高度依赖中断,关闭EA会使OS瘫痪。
没有中断时祼机能干的事很多,但枯燥,性能大打折扣。

问:我这道题就是反向思维, 写(或移植)个 OS系统, 离开 EA, 即无论用户何时何地关中断, 都不能影响 OS系统的运行.”
答:比较简单,OS核心就是切换任务,用函数功能代码替代中断可切换任务(主动切换),即可达到OS彻底离开中断的目的。
但是这个没有意义,如问2所说,没有灵魂,没有性能。
打个简单的比方吧,你问STC能不能做出没有中断功能的MCU型号,STC回答你->能! 但会去做吗?
回复 支持 反对 送花

使用道具 举报

该用户从未签到

61

主题

622

回帖

1万

积分

荣誉版主

积分
10812
 楼主| 发表于 2024-3-24 12:05:41 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-24 12:19 编辑


此楼文字来自《这是LAOXU关于临界区保护和函数可重入的测试题,欢迎大家来测试自己学的怎么样》(https://www.stcaimcu.com/forum.p ... =7384&extra=&page=8
的帖子第73楼的网友“fanxsp”的答复


确实如此,我个人理解,不用太纠结于是否关中断这样的问题,该关还得关。其实是否关中断不是本质,问题的本质是系统对异步信号响应的延时时间的长短问题。就算你不关中断,重入的问题还是存在,你也要有相应的措施来处理,这些措施也一样会造成响应的延时,相对而言,关中断可能还会更简单一些。
回复 支持 反对 送花

使用道具 举报

该用户从未签到

19

主题

517

回帖

1632

积分

荣誉版主

积分
1632
发表于 2024-3-24 16:50:14 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-24 16:54 编辑

拱火一把:

如标题,此题太难,我自愿放弃答题机会!

接下来谈坛内最有可能获此殊荣的就是属资深教授 杨老师 了,加油!

CosyOS大侠,内功也是深不可测,大有可为,很有可能率先斩敌于马下。

还有黑马出现吗,大家拭目以待。

点评

谢谢!不过最大的可能是考生的答卷交了,出题的考官溜了。 这是一个有意义的题目,虽然实用的场合很少(考官从未见过),但是这种理论上的探讨有助于我们深入地掌握STC单片机上的RTOS。 所以考官来不来不重要,我  详情 回复 发表于 2024-3-24 17:29
我就不参与了,你们聊,我要忙写ppt了  发表于 2024-3-24 17:13
回复 支持 反对 送花

使用道具 举报

该用户从未签到

61

主题

622

回帖

1万

积分

荣誉版主

积分
10812
 楼主| 发表于 2024-3-24 17:29:47 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-24 17:30 编辑
tzz1983 发表于 2024-3-24 16:50
拱火一把:

如标题,此题太难,我自愿放弃答题机会!

谢谢!不过最大的可能是考生的答卷交了,出题的考官溜了


这是一个有意义的题目虽然实用的场合很少(考官从未见过),但是这种理论上的探讨有助于我们深入地掌握STC单片机上的RTOS。
所以考官来不来不重要,我及不及格不重要,重要的是对系统中断和用户中断在RTOS中的地位、作用和使用方法这一主题大家一起来交流,一起来提高。
欢迎大家提问和探讨。


我也出个小题目大家来交流:对于STC的STC8H和STC32G/F两个系列的单片机,关闭了总中断后,如何让RTOS的系统节拍中断仍然运行?
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    开心
    8 小时前
  • 签到天数: 131 天

    [LV.7]常住居民III

    37

    主题

    867

    回帖

    3934

    积分

    荣誉版主

    积分
    3934
    发表于 2024-3-24 17:35:40 | 显示全部楼层
    拜读了大作 <挑战者x51(3):不使用任何中断的uC/OS-II移植版>

    题目的要求是: OS的使用与性能, 与现在的通用级 OS标准, 无什么差别,

    小声地请教一下, 嘀嗒时钟呢? 任务中我需要用到软件计时.

    点评

    “小声地请教一下, 嘀嗒时钟呢? 任务中我需要用到软件计时.” 谢谢考官的质询,不用小声,大声问,大家一起讨论。其实你问的我想很多网友都想知道。 这个问题也是我6楼的问题,我就先回答了: (1)对于STC的STC8H  详情 回复 发表于 2024-3-24 18:09
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    慵懒
    2023-12-12 11:44
  • 签到天数: 1 天

    [LV.1]初来乍到

    13

    主题

    38

    回帖

    287

    积分

    中级会员

    积分
    287
    发表于 2024-3-24 17:41:35 | 显示全部楼层
    不是有个不可屏蔽中断吗

    点评

    是的,可惜LAOXU不知道,他也是白问了  详情 回复 发表于 2024-3-24 18:10
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10812
     楼主| 发表于 2024-3-24 18:09:11 | 显示全部楼层
    本帖最后由 杨为民 于 2024-3-24 18:11 编辑
    LAOXU 发表于 2024-3-24 17:35
    拜读了大作

    题目的要求是: OS的使用与性能, 与现在的通用级 OS标准, 无什么差别,


    “小声地请教一下, 嘀嗒时钟呢? 任务中我需要用到软件计时.”
    谢谢考官的质询,不用小声,大声问,大家一起讨论。其实你问的我想很多网友都想知道。

    这个问题也是我6楼的问题,我就先回答了:
    (1)对于STC的STC8H和STC32G/F两个系列的单片机,定时器0都有一个不可屏蔽中断的模式3,关闭了总中断后,定时器0的中断是不可屏蔽的。所以只需要将定时器0中断作为系统节拍中断,让定时器0工作在模式3上,这时候不管是否关闭总中断,RTOS的系统节拍中断都能正常运行,而整个RTOS也就正常运行了。
    定时器0模式3.jpg

    (2)对于ARM和RISC-V单片机,我使用的和了解的常见型号,它们都有不可屏蔽中断的定时器,在它们上面也完全可以实现你考题要求的RTOS.
    (3)逆向证明:在Unix、Windows和Linux操作系统中也有临界区保护的问题呀?谁听说过它们是用“关闭总中断”来作为“临界区保护方法”的?
    所以你脑筋再多转一个弯,就不会出这道“送分题”给我了。

    感谢关照,希望以后多出点送分题,让我回回考高分,次次得100

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    61

    主题

    622

    回帖

    1万

    积分

    荣誉版主

    积分
    10812
     楼主| 发表于 2024-3-24 18:10:41 | 显示全部楼层
    alanding 发表于 2024-3-24 17:41
    不是有个不可屏蔽中断吗

    是的,可惜LAOXU不知道,他也是白问了

    回复 支持 反对 送花

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|深圳国芯人工智能有限公司 ( 粤ICP备2022108929号-2 )

    GMT+8, 2024-4-27 15:01 , Processed in 0.090674 second(s), 73 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表