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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 08:02:57 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 08:23 编辑
LAO*** 发表于 2024-3-27 07:11
tzz1983

2.    本主题的[考题],我心中已经有个答案,只是我已经放弃答题了(弃权都不可再答)。

我的答案是:
论坛内熊仔大神早就移植好的 uC/OS-II @STC8

捕获.JPG

https://www.stcaimcu.com/forum.php?mod=viewthread&tid=3934&extra=page%3D1


该移植的特征:
1. 所有任务切换都是使用代码切换.
2. 全程有完整的中断嵌套处理, 绝不会出现嵌套的中断直接返回任务的情况. 把滴答改为最高优先级也不会出错。
3. 他对所有中断处理都是一视同仁的, t0也没什么不同,只不过是在t0中断里加了OSTimeTick()功能;用来用作OS滴答。

在该移植的基础上, 只要把滴答中断提升至模式3, 其它不用任何更改, 即可实现关EA后仍可运行OS, 不信你自己可以去试一下。

同样的思维,也可用于STC32G



点评

举例说明,无需上自己的例子。回答正确,满分!  详情 回复 发表于 2024-3-27 10:17
没有达到我心中的目标. 你在任务中关中断没问题. 但是, 假如在某中断中关EA, 再执行 长时间的 PRINTF , 最后开EA, 退出中断. 在这个过程中, OS能进行切换吗? 如何切换? 请继续补充.  详情 回复 发表于 2024-3-27 08:25
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-27 08:25:28 | 显示全部楼层
tzz1*** 发表于 2024-3-27 08:02
我的答案是:
论坛内熊仔大神早就移植好的 uC/OS-II @STC8

没有达到我心中的目标.

你在任务中关中断没问题.

但是, 假如在某中断中关EA, 再执行 长时间的 PRINTF , 最后开EA, 退出中断.
在这个过程中, OS能进行切换吗? 如何切换?

请继续补充.

点评

期待LAOXU自己答出自己题目得满分答案:LAOXU推出自己移植的或者自己研发得STC单片机RTOS! 我预祝LAOXU早日完成这个壮举,让我们对他刮目相看。  详情 回复 发表于 2024-3-27 10:21
这样是可以切换的 解释: 在中断里关中断, 中断已经发生! 然后被滴答嵌套, 滴答中断返到原来的中断, 由最后一个即将退出的中断 在退出中断前会切换任务. 熊仔正是这样做的, 而且这也是用代码切换任务时标准的UCOS  详情 回复 发表于 2024-3-27 09:08
这样是可以的, 只是你被绕进去了, (接下来如果没有明确指出我错误地方,我就不回答了,我要忙工作了) 解释: 在中断里关中断, 中断已经发生! 然后被滴答嵌套, 滴答中断返到然来的中断, 由最后一个即将退出的中断 在  详情 回复 发表于 2024-3-27 08:35
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-27 08:25:30 | 显示全部楼层
tzz1*** 发表于 2024-3-27 07:46
"FreeROTS中  中断级 > 任务级
任务切换不在T0  也得再 最低级的A 退出后 切换"

C 跑完了 不跑中断B  跑任务X
中断B呢 不管了吗,还是跑完X回来跑B          
之前的确没遇到  这种,官方移植FreeRTOS那条路 不存在有中断不跑 跑任务的













点评

不好意思, 确实是我晕头了, 就是ABC说不清楚, 怪不得你看不懂, 确实是我写错了 我再重新编辑一下, 红色地方是更改过的. 现在有 三个中断 A B C 首先中断A最先触发 接着中断B触发,嵌套了,B打断了A 再  详情 回复 发表于 2024-3-27 08:46
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 08:35:51 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 09:07 编辑
LAO*** 发表于 2024-3-27 08:25
没有达到我心中的目标.

你在任务中关中断没问题.

这样是可以切换的, 只是你被绕进去了, (接下来如果没有明确指出我错误地方,我就不回答了,我要忙工作了)


解释: 在中断里关中断, 中断已经发生!   然后被滴答嵌套, 滴答中断返到原来的中断, 由最后一个即将退出的中断 在退出中断前会切换任务. 熊仔正是这样做的, 而且这也是用代码切换任务时标准的UCOSII的做法, 即每个中断退出前都会检查是否要切换任务.
这一点也是楼主正在思考的问题.


回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 08:46:19 | 显示全部楼层
gentl*** 发表于 2024-3-27 08:25
C 跑完了 不跑中断B  跑任务X
中断B呢 不管了吗,还是跑完X回来跑B         
之前的确没遇到  这种,官 ...

不好意思, 确实是我晕头了, 就是ABC说不清楚, 怪不得你看不懂, 确实是我写错了

我再重新编辑一下, 红色地方是更改过的.


现在有 三个中断 A B C

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



顺序  A-B-C-B-A-(退出A+切换任务)

点评

这就没有疑问了,感觉距离完美的答卷走了一半了 兄弟先忙,这个不急的  详情 回复 发表于 2024-3-27 08:54
回复 支持 反对

使用道具 举报 送花

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

54

主题

1327

回帖

5395

积分

荣誉版主

积分
5395
发表于 2024-3-27 08:49:13 | 显示全部楼层
关于 丢TICK 脉冲,

是由于响应中断后才计数器清0 造成的, 不同优先级的响应延时时间不同, 那怕 T0(模式3), 进入中断也需要时间, 也有误差, 只不过误差小一点.

彻底解决这个问题, 其实很简单, 只是 tzz1983 又要说我向老姚提建议了.

罢了, 冒着被 tzz1983 批评的风险,

咱多说一句, 只要在定时器装载时 , 不是 MOV (定时常数 --> T0), 而是 ADD , 即, (定时常数 + T0 --> T0) ,

一切问题都迎刃而解, 定时器永远不丢TICK 脉冲, 与优选级无关, 假如老姚把 STC定时器改成这样, 那就是世上最完美的定时器

点评

我这里丢tick 是 存在其他中断 进入T0时 直接退出导致的 tzz1983 网友 给出的解决方法 时T0 滴答后在退出 我倒是有其他想法,能实现再说,需要定时器支持手动重载  详情 回复 发表于 2024-3-27 09:04
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-27 08:54:00 | 显示全部楼层
tzz1*** 发表于 2024-3-27 08:46
不好意思, 确实是我晕头了, 就是ABC说不清楚, 怪不得你看不懂, 确实是我写错了

我再重新编辑一下, 红色地 ...

这就没有疑问了,感觉距离完美的答卷走了一半了


兄弟先忙,这个不急的
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-27 09:04:10 | 显示全部楼层
LAO*** 发表于 2024-3-27 08:49
关于 丢TICK 脉冲,

是由于响应中断后才计数器清0 造成的, 不同优先级的响应延时时间不同, 那怕 T0(模式3) ...

我这里丢tick  是 存在其他中断 进入T0时  直接退出导致的
tzz1983 网友 给出的解决方法 时T0 滴答后在退出
我倒是有其他想法,能实现再说,需要定时器支持手动重载








点评

不好意思, 目前 STC的 定时器不支持常规的手动装载(与标准 51不兼容). 即 定时器运行时, 无法装载, 需停止定时器运行才能装载, 辅助指令一多, 你不一定能达到理想的修正值(除非你把定时器优先级设为最高) 这样的话  详情 回复 发表于 2024-3-27 09:21
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-27 09:08:13 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 09:11 编辑
LAO*** 发表于 2024-3-27 08:25
没有达到我心中的目标.

你在任务中关中断没问题.

这样是可以切换的

解释: 在中断里关中断, 中断已经发生!   然后被滴答嵌套, 滴答中断返到原来的中断, 由最后一个即将退出的中断 在退出中断前会切换任务.

熊仔正是这样做的, 而且这也是用代码切换任务时标准的UCOSII的做法, 即每个中断退出前都会检查是否要切换任务.

尔, 补充一下: 才发现你是不是逻辑错了(自先矛盾), 中断里关中断, 然后你还想切换?  肯定是要等到中断完了退出时才能切换任务呀。
即然是中断完退出时再切换任务, 那又无关是否开中断了, 都已经在中断里了, 退出前切任务就可以了.
就算你之后再也不开EA, 那也是你的应用中断不能触发, T0还是可以触发, 那时候T0就不是嵌套, 自己可以切换任务.  所以中断随变你关.


点评

不是我自相予盾, 这是我奋斗的目标 任何时候, 关中断, 都不影响 OS运行(能正常切换). 事实上, 这个问题我还在思考, 有几个方案, 但都不是很理想. 杨老师的方案, 和我的方案大部分相同(是我的简化版). 我跟杨老  详情 回复 发表于 2024-3-27 09:53
做一定是要继续做的 做中断内切换任务 可能要过两天 其实认真一下还是有收获的,把FreeRTOS的中断嵌套计数器搞完了,os也能跑起来  详情 回复 发表于 2024-3-27 09:32
其实我一直想说 考题存在这个矛盾 用户程序 使用中断 中断中关了EA 用户自己都不正常了 ,还想OS正不正常 使用中断 中断外关EA 应该是考核的内容 不使用中断 那  详情 回复 发表于 2024-3-27 09:16
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-27 09:16:32 | 显示全部楼层
tzz1*** 发表于 2024-3-27 09:08
这样是可以切换的

解释: 在中断里关中断, 中断已经发生!   然后被滴答嵌套, 滴答中断返到原来的中断, 由 ...

其实我一直想说 考题存在这个矛盾

用户程序 使用中断      中断中关了EA    用户自己都不正常了 ,还想OS正不正常
              使用中断      中断外关EA       应该是考核的内容
              不使用中断   那不还是玩具OS吗         

点评

不过你现在可以继续做,做实时切换任务. 用不用最高优先级不用管, 改回用低优先快得很  发表于 2024-3-27 09:26
这本来就是闹着玩的,我在回复杨老师时不是说了吗,用最高优滴答性能是只退不进,谁让你们认真来的,我也对你说了不要这么玩,没意义  发表于 2024-3-27 09:20
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-3 08:16 , Processed in 0.257253 second(s), 108 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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