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

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

[复制链接]
  • TA的每日心情
    开心
    9 小时前
  • 签到天数: 136 天

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-3-26 07:51:33 | 显示全部楼层
    来张 OS 切换时, 当前堆栈图, 看的更清楚一些


    无标题.jpg

    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
    发表于 2024-3-26 08:15:49 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-26 08:46 编辑
    杨为民 发表于 2024-3-26 00:56
    (1)“FreeROTS  其实留了个 portYIELD_FROM_ISR() 接口,但移植后port里没实现”

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


    杨老师,这个FreeRTOS移植是个半成品....  转发的时候不说明一下,就不怕别人直接用啊。

    顺带我凭记忆说明一下这个中断切换任务的FreeRTOS版本。
    1.  FreeRTOS 内核版本为:FreeRTOS Kernel V10.5.1
    2. 可能是因为统计任务有个OS应用要用到动态申请内存,所以项目中用的是 heap_4.c (heap_1.c 不支持返还内存)
    3. 做移植时只是当做学习和尝试,浅尝即止. 这个版本和官网上发的版本主要改动是用中断切换任务. 已经做到了即时切换任务。
      基本功能已经做好了, 但文档还有些乱, 需要整理一下. 做的时候只是为了看一下运行结果, 很多地方也还需要优化.
    4. 此版本建议只做参考,如果需要用到其中思想或代码,为保万一,可自行重新移植一遍,然后加入相关功能。

    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-3-26 08:19:08 | 显示全部楼层
    MO/M3 的 PendSv 中断, 号称为 OS而生, 当有 中断在执行时,  PendSv 中断响应处于等待状态.

    等在执行的中断退出后, PendSv 才进入中断, 希望今后的 STC 单片机, 也能有这个功能.
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
    发表于 2024-3-26 08:42:22 | 显示全部楼层
    说两个事情:
    1.    早上查看了一下gentleman楼主的FreeRTOS文档代码。
          退出滴答中断如下图:就是直接返回任务级,不管有没有嵌套,我认为BUG很明显。 无需实例证明。
           捕获.JPG


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

    点评

    所谓的[考题],是 XX 强加于我的, 原来只是列出供大伙开心, 也没考虑到 有人会认真考虑解决, 我想再次强调一下, 本题的两个核心, 1. 关闭总中断, OS 切换任务能正常运行. 2. OS 切换任务的实时性, 越快越好.  详情 回复 发表于 2024-3-26 10:53
    不是无解, 是有解的, 但是, 要看解到什么程度的问题. 最简单方法, 你通过延时 利用 PendSv (优先级最低)切换, 显然可行, 但本题的前提是关闭总中断, 能正常切换, 与上面又予盾, 显然行不通. 所以, 有点脑子急转  详情 回复 发表于 2024-3-26 09:43
    有个思路是 中断嵌套计数 如果进入 定时器0 嵌套计数器>0 则不进行任务调度操作,直接退出中断 不知道可不可行  详情 回复 发表于 2024-3-26 08:50
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

    积分
    2116
     楼主| 发表于 2024-3-26 08:46:01 | 显示全部楼层
    LAOXU 发表于 2024-3-26 07:31
    楼上 tzz1983 提的问题, 我来回答:


    看懂了, 问题在于定时器优先级 变了
    修改后的定时器0 由于 优先级最高

    会打断其他 中断(原来不会)
    调度器把 中断现场存起来了  而不是 任务现场
    切换到了新的任务  
    这显然不符合os的常规逻辑,而打断嵌套中断 还有其他跑飞风险, 这样理解对吗



    =====================================================
    帖子不会删的,本来就是答卷,有错误更好,有错误可以成长








    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

    积分
    2116
     楼主| 发表于 2024-3-26 08:50:02 | 显示全部楼层
    tzz1983 发表于 2024-3-26 08:42
    说两个事情:
    1.    早上查看了一下gentleman楼主的FreeRTOS文档代码。
          退出滴答中断如下图:就是直 ...

    有个思路是  中断嵌套计数
    如果进入 定时器0中断后 嵌套计数器>0
          则不进行任务调度操作,直接退出中断
    不知道可不可行

    点评

    这个思路 我早就考虑过了. 有个问题, 这个中断嵌套, 不是 OS内的 软件模拟高低优先级(其本质依旧是任务级), 而是随机响应的任意中断级中断, 可单级也可多次嵌套, 而且压栈层数根据不同中断是随机的(有N种组合).  详情 回复 发表于 2024-3-26 09:59
    一语命中,只是改动很大哦,最后一个(可以理解为每个中断)退出的中断都要检查之前的中断(包括自己)有没有切换任务的需求,如果有则要代劳。另外中断计数器做起来也是有难度的,别小看这个计数器。  详情 回复 发表于 2024-3-26 09:12
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
    发表于 2024-3-26 09:12:59 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-26 09:21 编辑
    gentleman 发表于 2024-3-26 08:50
    有个思路是  中断嵌套计数
    如果进入 定时器0中断后 嵌套计数器>0
          则不进行任务调度操作,直接退出中 ...

    一语命中,只是改动很大哦,最后一个(可以理解为每个中断)退出的中断时,要检查嵌套链上的所有中断(包括自己)有没有切换任务的需求,如果有则要代劳。
    另外中断嵌套计数器做起来也是有难度的,别小看只是个计数器。

    点评

    没有小看,实现 真的要费好大功夫  详情 回复 发表于 2024-3-26 09:26
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

    积分
    2116
     楼主| 发表于 2024-3-26 09:26:54 | 显示全部楼层
    tzz1983 发表于 2024-3-26 09:12
    一语命中,只是改动很大哦,最后一个(可以理解为每个中断)退出的中断时,要检查嵌套链上的所有中断(包 ...

    没有小看,实现 真的要费好大功夫
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-3-26 09:43:43 | 显示全部楼层
    tzz1983 发表于 2024-3-26 08:42
    说两个事情:
    1.    早上查看了一下gentleman楼主的FreeRTOS文档代码。
          退出滴答中断如下图:就是直 ...

    不是无解, 是有解的,

    但是, 要看解到什么程度的问题.

    最简单方法, 你通过延时 利用 PendSv (优先级最低)切换, 显然可行,

    但本题的前提是关闭总中断, 能正常切换, 与上面又予盾, 显然行不通.

    所以, 有点脑子急转弯, 考虑到这方面, 另一方面又出问题了,

    而且, 本题的要求是, 最后的方案(实施结果), 基本指标性能 等同于 标准 OS

    所以, 不是那么好解决的.

    我就有几个实施方案, 但感觉不是最优.

    点评

    卖个关子,这也是脑筋急转弯  发表于 2024-3-26 09:56
    如果你放弃考核,我可以给你答案,并且是有实例的答案  发表于 2024-3-26 09:49
    回复 支持 反对 送花

    使用道具 举报

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

    [LV.7]常住居民III

    37

    主题

    870

    回帖

    3960

    积分

    荣誉版主

    积分
    3960
    发表于 2024-3-26 09:59:57 | 显示全部楼层
    gentleman 发表于 2024-3-26 08:50
    有个思路是  中断嵌套计数
    如果进入 定时器0中断后 嵌套计数器>0
          则不进行任务调度操作,直接退出中 ...

    这个思路 我早就考虑过了.

    有个问题, 这个中断嵌套, 不是 OS内的 软件模拟高低优先级(其本质依旧是任务级), 而是随机响应的任意中断级中断,

    可单级也可多次嵌套, 而且压栈层数根据不同中断是随机的(有N种组合).

    并且没有任何标志位通知 OS (相当于多个无任何关联的中断模块各自为家, 随机独高效立运行)

    所以, 那个计数器 要做好, 不是那么容易的.

    点评

    完了,LAOXU, 估计又得挨..  发表于 2024-3-26 10:27
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-5-2 12:49 , Processed in 0.081819 second(s), 74 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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