找回密码
 立即注册
楼主: gent***

【全部暂停】【方向改为完善官方的FreeRTOS】 随时关EA的 FreeRT

[复制链接]

该用户从未签到

63

主题

665

回帖

1万

积分

荣誉版主

积分
10820
发表于 2024-3-26 22:48:10 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-26 22:52 编辑
gentleman 发表于 2024-3-26 21:58
应该这样吧  先忽略丢tick 的bug

ABC 中断依次进入

(1)你直接学习tzz1983的招数(见我34楼的介绍),抄袭他的答案,他现在是忽悠你的,他自己已经解决了

(2)答案极其简单:在每个中断都规范地加上“退出中断任务切换函数”。这样不管嵌套多少层,多少次,后面嵌套进来的中断,(优先级都比第一次中断高才会嵌套进来的),在退出中断任务切换函数中就会检测的嵌套计数大于1,就会什么事都不做退出
等退出嵌套又到了第一层中断时,这时已经没有中断嵌套了,自然退出中断任务切换函数就会正确地进行任务切换了
(3)当初STC的FreeRTOS把系统节拍放在定时器0中断是对的,理由见LAOXU的答案其次如果定时器0工作在不可屏蔽中断模式再加上是中断最高优先级
试问其他那个中断能够打断它?谁都不能打断系统节拍中断,又怎么会“丢TICK”呢?

点评

谢谢杨老师,学生是学习 中断嵌套计数器 的部分代码 在freeRTOS 中重新映射了中断函数, 添加中断嵌套计数器,使用中断函数钩子的方法 修复 中断嵌套时, 任务调度器直接 返回任务级的bug 有关中断内 切换任务的部  详情 回复 发表于 2024-3-27 09:55
杨老师,我冤枉呀,我没有忽悠他,这种事情我才做不出来呢 我是让他每个中断退出都检查呀,只是他急于交卷,不乐意去做呀. 其实呢,如果是作为学生交卷,可以给及格了. 但从逻辑上来讲,是不合格的,他这样做  详情 回复 发表于 2024-3-26 22:59
回复 支持 反对 送花

使用道具 举报

该用户从未签到

20

主题

551

回帖

1127

积分

荣誉版主

积分
1127
发表于 2024-3-26 22:59:49 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-26 23:14 编辑
杨为民 发表于 2024-3-26 22:48
(1)你直接学习tzz1983的招数(见我34楼的介绍),抄袭他的答案,他现在是忽悠你的,他自己已经解决了

...

杨老师,我冤枉呀,我没有忽悠他,这种事情我才做不出来呢
我是让他每个中断退出前都检查呀,
OSIntExit()都拿出来举例了,只是他急于交卷,不乐意去做呀.

其实呢,如果是作为学生交卷,可以给及格了.

但从逻辑上来讲,是不合格的,他这样做..
假设有个中断和滴答同步,永远在滴答中断前面一点触发(最坏的情况,是可能发生的)
滴答因为嵌套不能切换,其它中断又不乐意切换,结果就...没有结果了


丢TICK是您没看仔细,他前面代码直接RETI了

点评

一针见血, 同感! 用户中断在滴答中断前面一点触发, 然后, 让子弹飞出地球~~~  发表于 2024-3-27 08:33
(1)“丢TICK是您没看仔细,他前面代码直接RETI了” STC FreeRTOS的移植部分的代码每一行我都看了,没有问题。 (2)至于本帖主修改在1楼的程序,我没有必要看。因为如果作为LAOXU题目的考卷,0分。LAOXU没打分是  详情 回复 发表于 2024-3-26 23:26
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
  • +1

    楼主威武~

回复 支持 反对 送花

使用道具 举报

该用户从未签到

63

主题

665

回帖

1万

积分

荣誉版主

积分
10820
发表于 2024-3-26 23:26:06 | 显示全部楼层
tzz1983 发表于 2024-3-26 22:59
杨老师,我冤枉呀,我没有忽悠他,这种事情我才做不出来呢
我是让他每个中断退出前都检查呀,OSIntExit() ...

(1)“丢TICK是您没看仔细,他前面代码直接RETI了”

STC FreeRTOS的移植部分的代码每一行我都看了,没有问题。
(2)至于本帖主修改在1楼的程序,我没有必要看。因如果作为LAOXU题目的考卷,0分。LAOXU没打分是手下留情,我点赞他是因为他的勇气:不耻下问

点评

想确定一下你的方案, 1. OS系统用几个中断源 , 是 1个(T0), 还是 2个(增加 1个 PendSv 中断) ? 2. 用户用了 N个中断, 是否 每一个都要加(进入中断嵌套计数器, 退出中断任务切换函数)?  详情 回复 发表于 2024-3-27 06:13
回复 支持 反对 送花

使用道具 举报

  • TA的每日心情
    慵懒
    半小时前
  • 签到天数: 64 天

    [LV.6]常住居民II

    4

    主题

    37

    回帖

    170

    积分

    注册会员

    积分
    170
    发表于 2024-3-26 23:53:47 | 显示全部楼层
    本帖最后由 李皇谛 于 2024-3-26 23:55 编辑
    soma 发表于 2024-3-25 11:38
    关中断定时器0还会工作就这意思吗

    定时器0工作在模式3的时候,开ET0中断就会直接将T0升格到NMI(Non-Maskable Interrupt)中断。
    NMI中断就是“不可屏蔽中断”(ARM或者STM32的说明文档也说了),升级到NMI中断之后,哪怕你关了EA和ET0都会导致定时器0中断继续挂号,直到单片机复位。
    想要让定时器0不再影响NMI中断,只能将定时器停止。
    STC存在的意义?
    凡夫俗子也能创造弑神诛仙的奇迹。
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3996

    积分

    荣誉版主

    积分
    3996
    发表于 2024-3-27 06:13:05 | 显示全部楼层
    杨为民 发表于 2024-3-26 23:26
    (1)“丢TICK是您没看仔细,他前面代码直接RETI了”

    STC FreeRTOS的移植部分的代码每一行我都看了,没有 ...

    想确定一下你的方案,
    1.  OS系统用几个中断源 , 是 1个(T0), 还是 2个(增加 1个 PendSv 中断) ?
    2. 用户用了 N个中断, 是否 每一个都要加(进入中断嵌套计数器,  退出中断任务切换函数)?

    点评

    我采用的是你的最佳方案,150分的方案  详情 回复 发表于 2024-3-27 10:11
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3996

    积分

    荣誉版主

    积分
    3996
    发表于 2024-3-27 06:40:47 | 显示全部楼层
    3, 切换是否要等待全部用户中断(中断嵌套计数器为0时)退出时才执行?
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3996

    积分

    荣誉版主

    积分
    3996
    发表于 2024-3-27 07:11:49 | 显示全部楼层
    tzz1983

    2.    本主题的[考题],我心中已经有个答案,只是我已经放弃答题了(弃权都不可再答)。
      LAOXU考官不要认为此题难解或无解,让子弹再飞一会。

    --------------------------------------------------------------------

    子弹飞够了。能否公布你的答案?

    点评

    我的答案是: 论坛内熊仔大神早就移植好的 uC/OS-II @STC8 [attachimg]39742[/attachimg] https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3934&extra=page%3D1 该移植的特征: 1. 所有任务切换都是使用代  详情 回复 发表于 2024-3-27 08:02
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    5 天前
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
     楼主| 发表于 2024-3-27 07:28:29 | 显示全部楼层
    tzz1983 发表于 2024-3-26 21:36
    好的,我再说简单一点吧,

    现在有 三个中断 A B C

    仔细想了这个例子

    感觉C 后切换任务x还是不对


    FreeROTS中  中断级 > 任务级
    任务切换不在T0  也得再 最低级的A 退出后 切换


    新的想法是 在  嵌套计数器--; 或中断退出后;
    if  中断计数器 == 0 进行任务切换


    丢tick 的问题,也有个想法,但要看t0 模式3是否支持 手动装初值验证



    截图202403270722261985.jpg

    点评

    "FreeROTS中 中断级 > 任务级 任务切换不在T0 也得再 最低级的A 退出后 切换" 这个说法是对的, 前提是如果是用额面的中断源切换任务, 而不是你现在的最高优先级TICK, 总的来说就是现在你这东西改的有点不伦不类了  详情 回复 发表于 2024-3-27 07:46
    对,你说对了,是在C切换,( 最后一个退出中断的那断) 上面说C是我的笔误,表达错误,我自己也没发现表达错了  详情 回复 发表于 2024-3-27 07:37
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    551

    回帖

    1127

    积分

    荣誉版主

    积分
    1127
    发表于 2024-3-27 07:37:40 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-27 07:42 编辑
    gentleman 发表于 2024-3-27 07:28
    仔细想了这个例子

    感觉C 后切换任务x还是不对

    对,你说对了,是在C切换,( 最后一个退出中断的那断)

    上面说C是我的笔误,表达错误,我自己也没发现表达错了


    "

    现在有 三个中断 A B C

    首先中断A最先触发
    接着中断B触发,嵌套了,B打断了A
    再接着中断C触发,又嵌套了,C打断了B
    在中断A里调用了一个OS服务,使任务X就绪了(假设X的任务优先级最高),但是由于中断嵌套中,不能现在马上切换任务,运行完后RETI 至任务B
    B也不能切换任务,只能返回C
    到C了,C检查到 OSIntNesting==0,接下来还要检查A+B+C是否更新了就绪表.
    很明显,A更新了就绪表,所以C要进行任务切换.(在这里,C没有使任务就绪,但嵌套链上端的A有,此时由C代替A做任务切换)"

    又看了一下,我没错呀,是C切换任务, 被你搞得有点上头了!!

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    551

    回帖

    1127

    积分

    荣誉版主

    积分
    1127
    发表于 2024-3-27 07:46:22 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-27 07:49 编辑
    gentleman 发表于 2024-3-27 07:28
    仔细想了这个例子

    感觉C 后切换任务x还是不对

    "FreeROTS中  中断级 > 任务级
    任务切换不在T0  也得再 最低级的A 退出后 切换"


    这个说法是对的, 前提是如果是用额面的中断源切换任务, 而不是你现在的最高优先级TICK, 总的来说就是现在你这东西改的有点不伦不类了.

    还有一种就是即将退出中断的前一刻,用代码切换任务, (切换+退出中断)一起处理

    接下来你自己研究吧, 这东西还得靠自己悟透

    点评

    C 跑完了 不跑中断B 跑任务X 中断B呢 不管了吗,还是跑完X回来跑B 之前的确没遇到 这种,官方移植FreeRTOS那条路 不存在有中断不跑 跑任务的  详情 回复 发表于 2024-3-27 08:25
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-10 01:41 , Processed in 0.086034 second(s), 76 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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