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

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

[复制链接]

该用户从未签到

63

主题

661

回帖

1万

积分

荣誉版主

积分
10810
发表于 2024-3-26 11:53:48 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-26 12:23 编辑
LAOXU 发表于 2024-3-26 10:53
所谓的[考题],是 XX 强加于我的, 原来只是列出供大伙开心,

也没考虑到 有人会认真考虑解决,

好好学习,天天向上。

相互切磋,共同提高。


相比库函数,STC单片机RTOS事业需要更多的懂指令、懂汇编、懂编译和能实践的人才来参与建设。
期待LAOXU早日在本版块发第一个帖子,
期待LAOXU早日在本版块成为荣誉版主。

回复 支持 反对 送花

使用道具 举报

该用户从未签到

63

主题

661

回帖

1万

积分

荣誉版主

积分
10810
发表于 2024-3-26 12:21:29 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-26 12:22 编辑
LAOXU 发表于 2024-3-26 10:53
所谓的[考题],是 XX 强加于我的, 原来只是列出供大伙开心,

也没考虑到 有人会认真考虑解决,


我想再次强调一下, 本题的两个核心,  

1. 关闭总中断, OS 切换任务能正常运行.
2. OS 切换任务的实时性, 越快越好.


LAOXU,你这个题目其实非常好,斗胆建议修改为:

1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
2.
对于STC单片机RTOS采用什么技术才能保证OS 切换任务的实时性, 越快越好?


由于这个话题可抽象可具体,若是考试题的话大家压力太大,不敢被评分或点评,因此建议你用技术探讨话题的形式单独发贴,发表你的看法、大家一起探讨。
这样我们就可以自由地发表看法,哪怕说错了也就算了,达到交流的目的就行

回复 支持 反对 送花

使用道具 举报

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

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
     楼主| 发表于 2024-3-26 12:33:09 | 显示全部楼层
    杨为民 发表于 2024-3-26 00:56
    (1)“FreeROTS  其实留了个 portYIELD_FROM_ISR() 接口,但移植后port里没实现”

    是的,所以在官方范例 ...

    谢谢杨老师指导

    学生仿照该例,尝试去设计中断嵌套计数器 来修复bug

    点评

    我给你提几个建议: 1. 不要再花精力到用最高优先级切换任务,这个没有性能提升优势,反而是可预测的响应下降。 2. 研究方向仍为最低优先级切换任务。加中断嵌套计数器,可适用于FreeRTOS。对你进一步了解OS切换过  详情 回复 发表于 2024-3-26 13:36
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    551

    回帖

    1127

    积分

    荣誉版主

    积分
    1127
    发表于 2024-3-26 13:36:47 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-26 13:41 编辑
    gentleman 发表于 2024-3-26 12:33
    谢谢杨老师指导

    学生仿照该例,尝试去设计中断嵌套计数器 来修复bug

    我给你提几个建议:
    1. 不要再花精力到用最高优先级切换任务,这个没有性能提升优势,反而是可预测的响应下降。
    2. 研究方向仍为最低优先级切换任务。加中断嵌套计数器,可适用于FreeRTOS。对你进一步了解OS切换过程也很有好处。
    但你得有心里准备,FreeRTOS本身不存在中断嵌套计数器,加了以后,不但改动范围大,并且使用规则也可能要更改。
    (比如以前是直接用中断,现在可能要在进入中断后给嵌套计数器加1,退出中断也要求用户有额外的操作,很不友好)
    3. 最好是,改用中断切换任务,不需要额外加嵌套计数器就能实现所有功能,用户体验也基本保持不变。
    FreeRTOS原本就是用中断切换任务的,如果在STC上也改用中断切换任务,则可在改动较少的情况下,轻易实现中断内即时切换任务。弥补官网例子的不足。
    (我估计STC官方的例子是不愿意额外多用一个中断源)


    祝你一切顺利。

    点评

    谢谢兄弟建议 加了计数器,中断要额外跳转一次 好像的确有影响。 我尝试写一下,不懂再来问  详情 回复 发表于 2024-3-26 14:10
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
     楼主| 发表于 2024-3-26 14:10:59 | 显示全部楼层
    tzz1983 发表于 2024-3-26 13:36
    我给你提几个建议:
    1. 不要再花精力到用最高优先级切换任务,这个没有性能提升优势,反而是可预测的响应 ...

    谢谢兄弟建议


    加了计数器,中断要额外跳转一次
    好像的确有影响。


    我先尝试写一下计数器,不懂再来问
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-3-26 16:15:02 | 显示全部楼层
    tzz1983
    就是开个玩笑,活跃一下,也没什么大错。你说“没有任何标志位通知 OS” 嵌套计数器本身就是通知呀  

    ============================================

    我还没学到这, 是否 现在的 OS  规定, 用户的每个中断中, 都需要加个 嵌套计数器 ?

    这有这样, 才能通知 OS , 请帮忙确认, 谢谢 .

    点评

    只有中断切任务的OS是不需要嵌套计数器的, 比如FreeRTOS的设计中,就没有嵌套计数器. 中断切换任务的原理是,PendSv为最低优先中断, 除PendSv之外的中断如果想要切换任务,就触发PendSv中断, 退出当前中断后才能进入Pen  详情 回复 发表于 2024-3-26 16:41
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    551

    回帖

    1127

    积分

    荣誉版主

    积分
    1127
    发表于 2024-3-26 16:41:18 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-26 17:26 编辑
    LAOXU 发表于 2024-3-26 16:15
    tzz1983
    就是开个玩笑,活跃一下,也没什么大错。你说“没有任何标志位通知 OS” 嵌套计数器本身就是通知 ...

    只用中断切任务的OS是不需要嵌套计数器的, 比如FreeRTOS的设计中,就没有嵌套计数器.
    中断切换任务的原理是,PendSv为最低优先中断, 除PendSv之外的中断如果想要切换任务,就触发PendSv中断, 退出当前中断后才能进入PendSv中断, 也就是说, 除了PendSv以外,别的中断只是提交请求,没有真的切换(延时切换,由PendSv代劳). 所以中断切换任务永远不会发生嵌套问题,硬件自动搞定了.用中断的方式就和没有OS一样.
    uC/OS出现的年份早一些,支持更多的切换方式,本身源码就包含嵌套计数器, 有两个目的,一是防止嵌套中断时直接返回任务级. 二是,OS可以由此知道当前代码是否为中断例程,OS服务针对此有不同的处理方式.
    从嵌套的中断直接返回任务是严重的BUG,如果是M3, 你将会被硬件Faults伺候

    函数切换任务的本质是用代码操作直接跳转到另一个任务。
    在中断里用函数切换任务,分两种情况,如果是嵌套,正确的操作是返回到之前的那个中断,切换任务将由最后一个将要退出的中断来完成。
    如果不是嵌套中断,则自已就是最后退出的那个中断,可以直接切换任务。
    通过判断嵌套计数器非0值来判断当前是否为嵌套中断

    点评

    兄弟参考了你好多代码 这样处理有问题吗 现在os跑起来了 在想一个合适的 嵌套中断例子去测试 改入口 [attachimg]39686[/attachimg] 计数器加/减 出入栈 [attachimg]39682[/attachimg] 带参数#define [attachim  详情 回复 发表于 2024-3-26 17:16
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
     楼主| 发表于 2024-3-26 17:16:09 | 显示全部楼层
    本帖最后由 gentleman 于 2024-3-26 17:27 编辑
    tzz1983 发表于 2024-3-26 16:41
    只用中断切任务的OS是不需要嵌套计数器的, 比如FreeRTOS的设计中,就没有嵌套计数器.
    中断切换任务的原理是 ...

    兄弟参考了你好多代码  这样处理有问题吗
    现在os跑起来了


    在想一个合适的 嵌套中断例子去测试
    改入口
    截图202403261712371689.jpg

    计数器加/减  出入栈
    freeRTOS 中的portRESTORE_CONTEXT();  只有出栈内容
    截图202403261709159703.jpg
    带参数#define
    截图202403261713095411.jpg


    定时器0中断 存在1个/多个中断就直接退出
    无其他中断正常调度
    截图202403261711004776.jpg

    用上次的关EA的任务测试可以运行
    多级嵌套的测试例子还在想
    截图202403261726081241.jpg


    点评

    首先指出第一个BUG: [attachimg]39694[/attachimg] 只要嵌套就直接退出???? OS 滴答不用跑了? 只要嵌套就丢TICK ?? 正确的做法应该是除了不切换任务,别的都需要. 代码还没下载,这样搞得我好累呀 你自  详情 回复 发表于 2024-3-26 19:27
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    开心
    6 天前
  • 签到天数: 137 天

    [LV.7]常住居民III

    37

    主题

    872

    回帖

    3992

    积分

    荣誉版主

    积分
    3992
    发表于 2024-3-26 17:36:02 | 显示全部楼层
    理解了, 是选项, 现在基本不用,  

    点评

    这次 不存在理论上的 bug了吗  详情 回复 发表于 2024-3-26 17:46
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    29

    主题

    558

    回帖

    2128

    积分

    荣誉版主

    积分
    2128
     楼主| 发表于 2024-3-26 17:46:25 | 显示全部楼层
    LAOXU 发表于 2024-3-26 17:36
    理解了, 是选项, 现在基本不用,

    这次 不存在理论上的 bug了吗

    点评

    和我的理解没什么差异. 中断中 不用中断嵌套计数器, 本质是用户中断没有通知 os 任务切换放在最低级没问题, 如放在最高级, 就有一大堆问题等着攻克.  详情 回复 发表于 2024-3-26 18:37
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-9 18:17 , Processed in 0.087003 second(s), 76 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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