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

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

[复制链接]
  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5499

积分

荣誉版主

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

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

老古董 的 51 可以实现,

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

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

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-13 00:05:49

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13008
发表于 2024-3-27 12:55:11 | 显示全部楼层
本帖最后由 杨为民 于 2024-3-27 12:56 编辑
tzz1*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-05-28 09:08:49

34

主题

1094

回帖

2450

积分

荣誉版主

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

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

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

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

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

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


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

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

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

点评

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-05-28 09:08:49

34

主题

1094

回帖

2450

积分

荣誉版主

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

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

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

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

点评

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

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

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

两种方法:

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


不懂再来问兄弟





点评

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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-06-17 08:16:09

1

主题

185

回帖

2009

积分

金牌会员

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

点评

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

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

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

LAOXU 的梦想不知道



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

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:542
  • 最近打卡:2025-06-17 08:16:09

1

主题

185

回帖

2009

积分

金牌会员

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

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

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:13
  • 最近打卡:2025-05-28 09:08:49

34

主题

1094

回帖

2450

积分

荣誉版主

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

gentl*** 发表于 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, 2025-6-18 07:47 , Processed in 0.175498 second(s), 120 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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