找回密码
 立即注册
楼主: gentleman

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-26 22:48:10 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-26 22:52 编辑
gentl*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 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

    楼主威武~

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-26 23:26:06 | 显示全部楼层
tzz1*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:常住居民III
  • 打卡总天数:102
  • 最近打卡:2025-04-17 01:04:20
已绑定手机

6

主题

57

回帖

208

积分

中级会员

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

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:217
  • 最近打卡:2024-11-15 09:12:27

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-27 07:28:29 | 显示全部楼层
tzz1*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 07:37:40 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 07:42 编辑
gentl*** 发表于 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切换任务, 被你搞得有点上头了!!

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 07:46:22 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 07:49 编辑
gentl*** 发表于 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, 2025-5-2 20:43 , Processed in 0.235090 second(s), 122 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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