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

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

[复制链接]

该用户从未签到

20

主题

575

回帖

1191

积分

荣誉版主

积分
1191
发表于 2024-3-27 08:02:57 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-27 08:23 编辑
LAOXU 发表于 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 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对 送花

使用道具 举报

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

    [LV.7]常住居民III

    39

    主题

    886

    回帖

    4120

    积分

    荣誉版主

    积分
    4120
    发表于 2024-3-27 08:25:28 | 显示全部楼层
    tzz1983 发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2140

    积分

    荣誉版主

    积分
    2140
     楼主| 发表于 2024-3-27 08:25:30 | 显示全部楼层
    tzz1983 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    575

    回帖

    1191

    积分

    荣誉版主

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

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

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


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


    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    575

    回帖

    1191

    积分

    荣誉版主

    积分
    1191
    发表于 2024-3-27 08:46:19 | 显示全部楼层
    gentleman 发表于 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
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    39

    主题

    886

    回帖

    4120

    积分

    荣誉版主

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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2140

    积分

    荣誉版主

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

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

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


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

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2140

    积分

    荣誉版主

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

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

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








    点评

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

    使用道具 举报

    该用户从未签到

    20

    主题

    575

    回帖

    1191

    积分

    荣誉版主

    积分
    1191
    发表于 2024-3-27 09:08:13 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-27 09:11 编辑
    LAOXU 发表于 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
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-5-5 08:35
  • 签到天数: 143 天

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2140

    积分

    荣誉版主

    积分
    2140
     楼主| 发表于 2024-3-27 09:16:32 | 显示全部楼层
    tzz1983 发表于 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, 2024-5-17 14:57 , Processed in 0.077488 second(s), 67 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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