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

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

[复制链接]
  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

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

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

好好学习,天天向上。

相互切磋,共同提高。


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

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看I
  • 打卡总天数:16
  • 最近打卡:2025-04-30 08:41:32

105

主题

1215

回帖

1万

积分

荣誉版主

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

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


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

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


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

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


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

回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

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

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

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


祝你一切顺利。

点评

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

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

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

谢谢兄弟建议


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


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

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

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

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

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

点评

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

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 16:41:18 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-26 17:26 编辑
LAO*** 发表于 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
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-26 17:16:09 | 显示全部楼层
本帖最后由 gentleman 于 2024-3-26 17:27 编辑
tzz1*** 发表于 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
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家I
  • 打卡总天数:312
  • 最近打卡:2025-03-11 13:20:13

54

主题

1327

回帖

5395

积分

荣誉版主

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

点评

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

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

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

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

点评

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

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:41 , Processed in 0.130137 second(s), 113 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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