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

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

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

    [LV.7]常住居民III

    39

    主题

    902

    回帖

    4318

    积分

    荣誉版主

    积分
    4318
    发表于 2024-3-27 12:53:32 | 显示全部楼层
    gentleman 发表于 2024-3-27 11:44
    把球踢回来了是吧

    这么整我也反对,都装好了干嘛还自己去装

    老古董 的 51 可以实现,

    STC的定时器装载, 自动化程度太高了

    等几天我空下来, 帮你写一个吧

    随午写的不一定能符合 STC定时器的脾气, 要上机测试后才能保证可行.

    可能中间增加的附加代码有点多
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    66

    主题

    714

    回帖

    1万

    积分

    荣誉版主

    积分
    10975
    发表于 2024-3-27 12:55:11 | 显示全部楼层
    本帖最后由 杨为民 于 2024-3-27 12:56 编辑
    tzz1983 发表于 2024-3-27 12:17
    闻道有先后,术业有专攻.
    什么宗不宗师的, 江山代有人才出
    像 LAOXU 和 gentleman 这样勤学爱问的才俊,  ...

    回顾你在这个论坛里的经历,就一个字,

    (1)uC/OS-II移植到STC32G上是你在熊仔前面开源到这个论坛的,熊仔照抄了你的方案,做成了一个完整的系统。
    (2)FreeRTOS移植的新技术方案,你开源放在我的帖子里就不管了,到现在才又被拿出来。这个新方案是可行的,而且你也验证过了,你可以自己发出来征求大家的意见,形成一个新的FreeRTOS在STC单片机上的移植版
    你还玩,结果很大可能是别人超过你了。
    (3)你的新的UCOS2移植版里采用的两项RTOS先进技术:分开堆栈和管理全部中断,这是STM32F什么的主流的RTOS技术,你已经在STC机上实现了,已经验证了,然后就丢给大家玩吗?
    (4)现在LAOXU已经在学习你的先进技术了,你自己不想进一步,还只想做个吃瓜群众吗
    (5)不像别人吃蜘蛛,你已经两次吃到螃蟹了,你还玩吗?还㩐下个机会吗?我告诉你,没有了。
    (6)另外两个主流RTOS可以用到STC单片机上的先进技术已经被CosyOS实现了,就是系统功能统一调用和调用队列管理。同样是用硬中断切换任务,你实现的技术已经远不如他了。

    点评

    杨老师: 我在这里"原创极简的51MCU专用RTOS TinyRTOS51"吃到了好甜的瓜.体验过才明白,原来甜瓜比螃蟹好吃太多了!以后别想忽悠我了  发表于 2024-3-31 21:48
    感谢杨老师对我的激励和批评,批评的对, 我确实是比较贪玩了. 今后尽量改正. FreeRTOS那个版本确实接近尾声了, 只缺最后的严谨验证(其实已经没什么毛病). 搁浅在这, 是因为两个原因: 1. 我平常都在用uC/OS. 2. F  详情 回复 发表于 2024-3-27 13:20
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    580

    回帖

    1229

    积分

    荣誉版主

    积分
    1229
    发表于 2024-3-27 13:20:23 | 显示全部楼层
    杨为民 发表于 2024-3-27 12:55
    回顾你在这个论坛里的经历,就一个字,玩:

    (1)uC/OS-II移植到STC32G上是你在熊仔前面开源到这个论坛的 ...

    感谢杨老师对我的激励和批评,批评的对, 我确实是比较贪玩了. 今后尽量改正.

    FreeRTOS那个版本确实接近尾声了,  只缺最后的严谨验证(其实已经没什么毛病).

    搁浅在这, 是因为两个原因:
    1. 我平常都在用uC/OS.
    2. FreeRTOS的源码我打算以后有空再安排时间熟悉.
    如果说自己都不是很熟悉就拿出来,那可能是要闹笑话的.

    至于什么超越不超越的,  那个没关系, 我希望别人超越我, 让我可以轻松吃瓜.
    我有瓜也会拿出来大家一起吃.


    看情况吧, 如果说下半年还没有人把FreeRTOS完善, 我就来操作一下, 这样安排时间也比较充裕
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 19:03
  • 签到天数: 144 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2164

    积分

    荣誉版主

    积分
    2164
     楼主| 发表于 2024-3-27 16:46:01 | 显示全部楼层
    LAOXU的梦想就交由他自己完成吧
    楼主后面研究方向变为  优化官方移植的FreeRTOS
    实现缺失的 中断内切换任务接口taskYIELD_FROM_ISR()
    随时关EA的需求看情况
    是狗尾续貂 还是画龙点睛  大家拭目以待

    点评

    方向对了,是否接受改为额外PendSv 中断做任务切换? 两种方法: 1. 还是你之前的方法. 难易度你已经体验到了. 2. 改为额外PendSv 中断做任务切换, 难易程度: 简单,改动很少.  详情 回复 发表于 2024-3-27 16:55
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    580

    回帖

    1229

    积分

    荣誉版主

    积分
    1229
    发表于 2024-3-27 16:55:39 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-27 16:59 编辑
    gentleman 发表于 2024-3-27 16:46
    LAOXU的梦想就交由他自己完成吧
    楼主后面研究方向变为  优化官方移植的FreeRTOS
    先 实现缺失的 中断内切换 ...

    方向对了,是否接受改为额外PendSv 中断做任务切换?

    两种方法:
    1. 还是你之前的方法. 难易度你已经体验到了.
    2. 改为额外PendSv 中断做任务切换, 难易程度: 简单,改动很少.

    两种方法性能相差不多, 对比最终效果:  代码切换任务用户体验稍差.  需要用户使用勾子或用户自己在中断里额外添加OS服务.  中断切换体验稍好, 缺点是额外用一个中断源

    点评

    PendSv 吗,这个 看情况吧 我要过两天才开始的 不懂再来问兄弟  详情 回复 发表于 2024-3-27 17:18
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 19:03
  • 签到天数: 144 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2164

    积分

    荣誉版主

    积分
    2164
     楼主| 发表于 2024-3-27 17:18:37 | 显示全部楼层
    tzz1983 发表于 2024-3-27 16:55
    方向对了,是否接受改为额外PendSv 中断做任务切换?

    两种方法:

    PendSv 吗,这个 看情况吧
    我要过两天才开始的


    不懂再来问兄弟





    点评

    基本上这个意思,可不可以优化你自己想办法. 把滴答改回最低优先, 再套上这个代码基本上就成了, 效率高不  详情 回复 发表于 2024-3-27 22:35
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    1

    主题

    166

    回帖

    771

    积分

    高级会员

    积分
    771
    发表于 2024-3-27 17:25:42 | 显示全部楼层
    不是很理解,如果在中断嵌套的高优级里直接切换任务,那低优先级中断的优先级就降到比任务还低了,这么做真的好玩吗。

    点评

    LAOXU 的梦想不知道 我和tzz1983兄弟 讨论的是中断内 如果唤醒高优先级任务就 标记 退出最后一层中断进任务 目前官方移植版 要再退出中断 的下一个tick进入t0中断再切换  详情 回复 发表于 2024-3-27 17:35
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    昨天 19:03
  • 签到天数: 144 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2164

    积分

    荣誉版主

    积分
    2164
     楼主| 发表于 2024-3-27 17:35:19 | 显示全部楼层
    本帖最后由 gentleman 于 2024-3-27 17:36 编辑
    fanxsp 发表于 2024-3-27 17:25
    不是很理解,如果在中断嵌套的高优级里直接切换任务,那低优先级中断的优先级就降到比任务还低了,这么做真 ...

    LAOXU 的梦想不知道



    我和tzz1983兄弟  讨论的是中断内  如果唤醒高优先级任务就  标记  等待退出最后一层中断进任务
                              目前官方移植版 要再退出最后一层中断后 进入t0中断再切换
    回复 支持 反对 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    1 小时前
  • 签到天数: 186 天

    [LV.7]常住居民III

    1

    主题

    166

    回帖

    771

    积分

    高级会员

    积分
    771
    发表于 2024-3-27 17:42:40 | 显示全部楼层
    gentleman 发表于 2024-3-27 17:35
    LAOXU 的梦想不知道

    对啊,这个才是正常思路
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    20

    主题

    580

    回帖

    1229

    积分

    荣誉版主

    积分
    1229
    发表于 2024-3-27 22:35:43 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-27 22:44 编辑

    gentleman 发表于 2024-3-27 17:18
    PendSv 吗,这个 看情况吧
    我要过两天才开始的



    void vTaskSwitchContext( void );

    #define _ISR_Package_CODE(n)                                                                                  \
    void ISR_Handler_##n (void)                                                                                   \
    {                                                                                                             \
        __asm{ISR_Handler##n:}              /*汇编标号*/                                                          \
        portSAVE_CONTEXT();                 /*寄存器入栈*/                                                        \
        OSIntNesting++;                                                                                           \
        EA=1;                                                                                                     \
        ISR_Handler_Hook##n();              /*app勾子*/                                                           \
        EA=0;                                                                                                     \
        OSIntNesting--;                                                                                             \
        if(OSIntNesting==0);                                                                                             \
        {                                                                                             \
            __asm   { MOV   DR0,DR60    } /*SP保存到任务控制块   */                                                 \
            __asm   { MOV   DR4,pxCurrentTCB    }                                                                   \
            __asm   { MOV   @WR6+0x2,WR2        }                                                                   \
                                                                                                                    \
            vTaskSwitchContext();  /*更新  pxCurrentTCB*/                                                             \
                                                                                                                    \
            __asm   { MOV   DR4,pxCurrentTCB    }  /*读取新任务的SP*/                                                 \
            __asm   { MOV   WR2,@WR6+0x2        }                                                   \
            __asm   { MOV   DR60,DR0    }                                                           \      
        }                                                                                           \
        portRESTORE_CONTEXT();             /* 出栈,开中断,返回 */                                      \
        EA=1;                                                                                       \
        __asm{RETI}                                                                                 \
        if(pxCurrentTCB);     /* 声明变量 */                                                               \
    }


    基本上这个意思,可不可以优化你再想一下.
    把滴答改回最低优先, 改回低优先后, 滴答也得 
    OSIntNesting++
    套上这个代码去试试, 估计可以成!

    点评

    只在中断切任务 不需要倒 可以RETI 不过还有个 任务内切任务 这个也不能RETI呀 兄弟应该之前没试这部分吧 我觉得还是要倒一下,谢谢兄弟了。  详情 回复 发表于 2024-3-28 09:14
    感觉有点不对 任务堆栈 和中断堆栈 不一样的 需要 pop堆栈 按照ECALL 的格式重新push 而且直接RETI 也回不到任务吧 还是格式不一样的问题 要push 一个给RETI 用的 中断堆栈部分 RETI后 再ERET 才能返回正确的  详情 回复 发表于 2024-3-28 08:24
    回复 支持 反对 送花

    使用道具 举报

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

    本版积分规则

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

    GMT+8, 2024-6-1 09:24 , Processed in 0.094627 second(s), 66 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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