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

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

[复制链接]
  • 打卡等级:初来乍到
  • 打卡总天数:5
  • 最近打卡:2025-04-30 07:46:22

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 20:30:16 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-26 20:31 编辑

你的这个勾子是不是还没有实际连接函数? 不过没关系,我看懂了.

这个 ISR_Package_CODE(n) 里面的代码还是相差的太多了

我把主要意思一次说一下,代码就靠你自己的揣摩了.

刚才回LAOXU的内容也适合你,"如果是嵌套,正确的操作是返回到之前的那个中断,切换任务将由最后一个将要退出的中断来完成。
因为中断是随机的,由此可推断出,其实是每个中断都要检查是否要切换任务(包括是否有比自己优先级高的嵌套中断提交了切换任务请求)
见这代码:
    if( xTaskIncrementTick() != pdFALSE )    {
        portEND_SWITCHING_ISR();
    }
xTaskIncrementTick() 是有返回值的,这个值代表着是否有更高优先的级任务就绪,如果当时不能切换,就要把这个值传递下去...直到 OSIntNesting==0时,
在嵌套中断链上,如果曾经有中断提出过请求,就要切换任务.否则会丢失一次切换.
这里只是举例,不只是xTaskIncrementTick() ,还有很多OS服务会使新的任务就绪.
uC/OS是用 OSIntExit(); 函数来检索是否需要切换,Free 我不知道除了值传递,还有哪些更好的检查方法,
总之就是每个中断都要检查是否要切换.

之前也说过,用这个方法去解决很麻烦,其实麻烦的还不止是这个,这些都是只要把代码写完了,也就没事了. 

关键是用户体验呀,你现在计划用勾子,也就是改变了用户的习惯使用方式.
但是你如果不用勾子,就得告诉用户,进中断第一件事就是OSIntNesting++, 退出中断时也别忘记调用我给你编好的 xxxx()函数来退出中断!


点评

谢谢兄弟了 钩子函数 实现了的 都在ISR文件夹里 [attachimg]39712[/attachimg] 我最初的想法 是这样 T0 虽然是优先级最高 但只要 T0 在有其他中断时(判断计数器>0)啥都不干 直接返回 那它其实就是 优  详情 回复 发表于 2024-3-26 21:07
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-26 21:07:35 | 显示全部楼层
tzz1*** 发表于 2024-3-26 20:30
你的这个勾子是不是还没有实际连接函数? 不过没关系,我看懂了.

这个 ISR_Package_CODE(n) 里面的代 ...


谢谢兄弟了



钩子函数 实现了的 都在ISR文件夹里





截图202403262049037613.jpg



我最初的想法 是这样
T0 虽然是优先级最高
但只要 T0 在有其他中断时(判断计数器>0)啥都不干 直接返回
那它其实就是 优先级最低

其他一切同官方移植的系统一样,任务也只会在T0里切换,其他中断也不考虑任务切换的问题,这样os就能正常跑起来


那么首要的问题,兄弟一针见血的指出来了
那就是丢tick


其他的内容,我再理解理解
============================
用户体验这个的确解决不了,用户只能向使用库函数一样,使用ISR 文件夹下的 中断函数



点评

好的,我再说简单一点吧, 现在有 三个中断 中断A最先触发 接着中断B触发,嵌套了,B打断了A 再接着中断C触发,又嵌套了,C打断了B 在中断C里调用了一个OS服务,使任务X就绪了,但是由于中断嵌套中,不能现在马  详情 回复 发表于 2024-3-26 21:36
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 21:36:35 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-26 21:46 编辑

好的,我再说简单一点吧,

现在有 三个中断 A B C

首先中断A最先触发
接着中断B触发,嵌套了,B打断了A
再接着中断C触发,又嵌套了,C打断了B
在中断A里调用了一个OS服务,使任务X就绪了(假设X的任务优先级最高),但是由于中断嵌套中,不能现在马上切换任务,运行完后RETI 至任务B
B也不能切换任务,只能返回C
到C了,C检查到 OSIntNesting==0,接下来还要检查A+B+C是否更新了就绪表.
很明显,A更新了就绪表,所以C要进行任务切换.(在这里,C没有使任务就绪,但嵌套链上端的A有,此时由C代替A做任务切换)

这个看懂了吗? 

即然C要检查是否有新的任务就绪,中断又是随机了, 谁也保不准最后一个退出中断的是哪个中断. 即可推断出->所有的中断在退出前都要检查是否要切换任务

点评

仔细想了这个例子 感觉C 后切换任务x还是不对 FreeROTS中 中断级 > 任务级 任务切换不在T0 也得再 最低级的A 退出后 切换 新的想法是 在 嵌套计数器--; 或中断退出后; if 中断计数器 == 0 进行任务切换  详情 回复 发表于 2024-3-27 07:28
应该这样吧 先忽略丢tick 的bug ABC 中断依次进入 中断处理结束 CBA 顺序退出 任务X 再A退出的 下个T0中断内 切换  详情 回复 发表于 2024-3-26 21:58
回复 支持 反对

使用道具 举报 送花

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

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-26 21:53:54 | 显示全部楼层
LAO*** 发表于 2024-3-26 18:21
1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
答: 采用定时器 0 (模式 ...

1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
答: 采用定时器 0 (模式 3) , 才能保证 关闭总中断, OS 切换任务能正常运行.

2. 对于STC单片机RTOS,采用什么技术才能保证OS 切换任务的实时性, 越快越好?
答: 采用定时器 0 (模式 3)  直接切换, 才能保证OS 切换任务的实时性, 最快.



===============================================================================
点评:如果满分是100分,这个答案可得150分。50分的加分是因为这个答案是结合STC单片机实际,用逻辑推理得出的。


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

分析:对于STC单片机,目前关闭总中断后,唯一能够正常产生定时中断的只有采用定时器 0 (模式 3) ,
所以逻辑上说采用定时器 0 (模式 3) , 才能保证 关闭总中断, OS 切换任务能正常运行.


2. 对于STC单片机RTOS,采用什么技术才能保证OS 切换任务的实时性, 越快越好?

分析:假如切换任务的3个步骤的程序已经定下来了,那么如果再通过其他代码来间接调用这些程序,运行这些其他代码必然就要增加时间开销。
所以逻辑上说直接切换, 才能保证OS 切换任务的实时性, 最快.




3.对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行,同时,采用什么技术才能保证OS 切换任务的实时性, 越快越好?
答: 采用定时器 0 (模式 3) 直接切换, 才能保证OS 切换任务的实时性, 最快.

分析:因为答案1和答案2不冲突,
逻辑上说所以将它们结合起来就是既这个又那个的唯一答案


因此对于STC单片机RTOS,采用定时器 0 (模式 3)  和直接切换任务, 既能保证 关闭总中断, OS 切换任务能正常运行,又能保证OS 切换任务的实时性, 最快!
这就是STC8H和STC32G/F系列单片机上的RTOS同时满足两个题目要求的唯一正确答案,这个答案由LAOXU给出了。


点评

杨老师,现在 gentleman 计划用 OSIntNesting 来玩 FreeRTOS, 把FreeRTOS玩成了uC/OS的味道,这可是您的强项啊,接下来好好辅导一下.  详情 回复 发表于 2024-3-26 21:59
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-26 21:58:54 | 显示全部楼层
tzz1*** 发表于 2024-3-26 21:36
好的,我再说简单一点吧,

现在有 三个中断 A B C

应该这样吧  先忽略丢tick 的bug

ABC 中断依次进入
中断处理结束  CBA 顺序退出
任务X 再A退出的 下个T0中断内 切换

点评

(1)你直接学习tzz1983的招数(见我34楼的介绍),抄袭他的答案,他现在是忽悠你的,他自己已经解决了 (2)答案极其简单:在每个中断都规范地加上“退出中断任务切换函数”。这样不管嵌套多少层,多少次,后面嵌  详情 回复 发表于 2024-3-26 22:48
再举一例,A中断,被滴答打断,滴答不切,A也不切,再等一次,直到滴答不嵌套再切吧,反正我也不急,是这样的吧  详情 回复 发表于 2024-3-26 22:08
你这样不是又走了官网那个例子的老路了吗,推到下一个时钟,即然如果,那还改什么. 杨老师发表一下意见  详情 回复 发表于 2024-3-26 22:01
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 21:59:20 | 显示全部楼层
杨*** 发表于 2024-3-26 21:53
1. 对于STC单片机RTOS,关闭总中断, 采用什么技术才能保证OS 切换任务能正常运行?
答: 采用定时器 0 (模 ...

杨老师,现在 gentleman 计划用 OSIntNesting 来玩 FreeRTOS, 把FreeRTOS玩成了uC/OS的味道,这可是您的强项啊,接下来好好辅导一下.
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 22:01:59 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-26 22:03 编辑
gentl*** 发表于 2024-3-26 21:58
应该这样吧  先忽略丢tick 的bug

ABC 中断依次进入

你这样不是又走了官网那个例子的老路了吗,推到下一个时钟,即然如此,那还改什么.
不过你要是觉得只要可以运行就可以的话,这样也行. 只是得取消"实时"二字
杨老师发表一下意见


点评

现在是实验课,同学交流时间  详情 回复 发表于 2024-3-26 22:13
的确是那条路 因为我上个版本存在 嵌套中断的bug,要修的啊 修好bug 再走下一步 兄弟想说啥就 留言吧,其他老师指点也是,我先去睡觉了,明天早早起来看  详情 回复 发表于 2024-3-26 22:07
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2790

积分

荣誉版主

积分
2790
发表于 2024-3-26 22:07:18 | 显示全部楼层
tzz1*** 发表于 2024-3-26 22:01
你这样不是又走了官网那个例子的老路了吗,推到下一个时钟,即然如果,那还改什么.
杨老师发表一下意见
...

的确是那条路

因为我上个版本存在 嵌套中断的bug,要修的啊
修好bug 再走下一步

兄弟想说啥就 留言吧,其他老师指点也是,我先去睡觉了,明天早早起来看

点评

去睡吧  发表于 2024-3-26 22:09
回复 支持 反对

使用道具 举报 送花

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

33

主题

1079

回帖

2319

积分

荣誉版主

积分
2319
发表于 2024-3-26 22:08:23 | 显示全部楼层
gentl*** 发表于 2024-3-26 21:58
应该这样吧  先忽略丢tick 的bug

ABC 中断依次进入

再举一例,A中断,被滴答打断,滴答不切,A也不切,再等一次,直到滴答不嵌套再切吧,反正我也不急,是这样的吧
回复 支持 反对

使用道具 举报 送花

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

105

主题

1215

回帖

1万

积分

荣誉版主

积分
12882
发表于 2024-3-26 22:13:06 | 显示全部楼层
tzz1*** 发表于 2024-3-26 22:01
你这样不是又走了官网那个例子的老路了吗,推到下一个时钟,即然如此,那还改什么.
不过你要是觉得只要可 ...

现在是实验课,同学交流时间
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 20:47 , Processed in 0.328242 second(s), 124 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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