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

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

[复制链接]
  • 打卡等级:偶尔看看II
  • 打卡总天数:24
  • 最近打卡:2025-06-13 00:05:49

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13006
发表于 2024-3-25 20:10:30 | 显示全部楼层
gentl*** 发表于 2024-3-25 19:53
有点巧了

学生就是觉得 定时器0 也是中断

我个人觉得FreeRTOS的这个STC移植版本有些仓促了,好像还有些没有完成,我也在等更新,这是我后面没有继续写如何RTOS编程文章的主要原因。

比如临界区保护方法也只是简单地关闭总中断,比如如何在定时器0以外的其他中断中切换任务(比如一个外部中断发生时唤醒挂起的任务)也没有简明的介绍。
比如你的这个想法,我直观觉得没有那么简单,需要试了才知道。
因此希望楼主和tzz1983坛友能去试试,并且把试的经验和试成功的方法发在这个帖子里,介绍给大家

点评

看来还是要实测 感觉是能实现,但可能存在什么风险(比如 频繁进入中断 造成异常之类的) 晚上先不弄了,谢谢杨老师  详情 回复 发表于 2024-3-25 20:26
回复 支持 反对

使用道具 举报 送花

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

115

主题

1223

回帖

1万

积分

荣誉版主

积分
13006
发表于 2024-3-25 20:13:27 | 显示全部楼层
gentl*** 发表于 2024-3-25 19:53
有点巧了

学生就是觉得 定时器0 也是中断

不是我的,是tzz1983的帖子《FREERTOS中断里切换任务》(https://www.stcaimcu.com/forum.php?mod=viewthread&tid=581
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

积分
2800
发表于 2024-3-25 20:26:31 | 显示全部楼层
杨*** 发表于 2024-3-25 20:10
我个人觉得FreeRTOS的这个STC移植版本有些仓促了,好像还有些没有完成,我也在等更新,这是我后面没有继 ...

看来还是要实测
感觉是能实现,但可能存在什么风险(比如 频繁进入中断 造成异常之类的)
晚上先不弄了,谢谢杨老师








回复 支持 反对

使用道具 举报 送花

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

34

主题

1094

回帖

2450

积分

荣誉版主

积分
2450
发表于 2024-3-25 20:26:49 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-25 20:32 编辑
gentl*** 发表于 2024-3-25 19:53
有点巧了

学生就是觉得 定时器0 也是中断

我回翻了一下帖子,当时我是这么问的: 
内核是会在每次节拍的时候切换任务,但是如果我在别的中断中,激活了一个高优先级的任务(比如说xSemaphoreGiveFromISR( xBinarySemaphore, &xHigherPriorityTaskWoken );然后跟据igherPriorityTaskWoken的值来确定是否要进行任务切换,), 但是,在这里,如果我要切换任务, 却不知道应该怎么操作了,是调哪个函数呢?这是我的疑问.如果这里给了信号量,却没有主动切换任务, 就像您刚才说的那样, 只能等到时钟节拍时才能自动切换任务了, 但是这样并不实时,我想应该有一种方法可以退出中断以后马上做切换任务的动作"
答帖管理是zhp, 答:
您好,关于您提出的问题,我提供一点个人的理解供您参考
FreeRTOS中提供的任务切换只有两种方式:抢占式和时间片轮询式
时间片轮询式:任务的切换会在主循环中的IDLE进程中进行切换,在当前任务放弃CPU控制权之前,其它任何高优先级的进程都无法抢占CPU
抢占式:每个时间片结束后,在节拍中断中选择优先级最高的任务进行切换,注意此时的任务是在中断中直接切换的,就像您所说中断没退出就切换到任务中去了
若要在其它中断中切换切换任务不能直接调用vPortYield或者taskYIELD,堆栈会乱掉。
如果您确实要在其它非节拍中断中强行切换任务,可参考范例中的vTimer0ISR中的代码"

答案关键字: "如果您确实要在其它非节拍中断中强行切换任务,可参考范例中的vTimer0ISR中的代码",可见,如果要这么做,需要我自己去实现.

原帖参考:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=581&page=1#pid3150

我在印象中,中断->调用OS服务激活一个任务(假设这个任务优先级比当前执行的任务高)-> 退出中断后,立即切换至高优先级任务. 这才是正常的实时切换.
但是: 现在是 中断->调用OS服务激活一个任务(假设这个任务优先级比当前执行的任务高)-> 退出中断后,等到时钟滴答到,时钟滴答找到最高优先就绪,并在退出中断时切换.还是有些区别,就是实时性相差一个时钟滴答,其它问题不大.

前年年底的时候,我也玩过几天FreeRTOS,自己做了一移植,并且也自己实现了即时切换任务,不过后续没有应用,也就凉在一旁了.
代码我也发出来过,就在杨老师的回帖里.
代码链接:https://www.stcaimcu.com/forum.php?mod=viewthread&tid=4506&page=1#pid30426

我最近没有计划重温FreeRTOS,并且对这个问题也不是很在意.我提出来,只是说有空的版主可以关注一下这个问题, 但是没有必要为我解决什么问题.





点评

好,谢谢老师,我再学习一下  详情 回复 发表于 2024-3-25 20:30
1 喜欢他/她就送朵鲜花吧,赠人玫瑰,手有余香!
回复 支持 1 反对 0

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

积分
2800
发表于 2024-3-25 20:30:19 | 显示全部楼层
tzz1*** 发表于 2024-3-25 20:26
我回翻了一下帖子,当时我是这么问的: 
"内核是会在每次节拍的时候切换任务,但是如果我在别的中断中,激 ...

好,谢谢老师,我再学习一下

点评

客气了,不用叫我老师,叫兄弟,或朋友 ^-^  发表于 2024-3-25 20:43
回复 支持 反对

使用道具 举报 送花

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

34

主题

1094

回帖

2450

积分

荣誉版主

积分
2450
发表于 2024-3-25 20:51:46 | 显示全部楼层
本帖最后由 tzz1983 于 2024-3-25 20:53 编辑
gentl*** 发表于 2024-3-25 19:46
我明白老师的意思了

这个中断内切换接口实现起来 要注意什么吗

要注意什么好像倒是没有,这个功能应该是标准OS功能,只不过这里被和谐了而已.

我是这样认为:把"定时器0中断函数 的内容(入栈,取任务,改sp指针,出栈,RETI, ERET)都搬过去"单独弄个调用,这样应该是可以的,就是细节上还得加工一下.

前年的时候,我在关注用中断切换任务,所以没有做这个测试. 

说来也巧,我现在做的uC/OS中断切换任务,源码其实来自我早时移植的FreeRTOS.

点评

FreeROTS 其实留了个 portYIELD_FROM_ISR() 接口 但移植后port里没实现  详情 回复 发表于 2024-3-25 21:21
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:偶尔看看III
  • 打卡总天数:32
  • 最近打卡:2024-06-30 08:14:43

0

主题

5

回帖

152

积分

注册会员

积分
152
发表于 2024-3-25 20:56:36 | 显示全部楼层
如果STC32有RT-thread的版本就更好了,对我们新手很友好了
回复 支持 反对

使用道具 举报 送花

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

29

主题

722

回帖

2800

积分

荣誉版主

积分
2800
发表于 2024-3-25 21:21:47 | 显示全部楼层
tzz1*** 发表于 2024-3-25 20:51
要注意什么好像倒是没有,这个功能应该是标准OS功能,只不过这里被和谐了而已.

我是这样认为:把"定时 ...

FreeROTS  其实留了个 portYIELD_FROM_ISR() 接口

但移植后port里没实现

点评

(1)“FreeROTS 其实留了个 portYIELD_FROM_ISR() 接口,但移植后port里没实现” 是的,所以在官方范例里的ISR的编程模式大多数中断仍然停留在裸机编程的形式,没有说明,也没有做任何RTOS处理,这样的中断实际工  详情 回复 发表于 2024-3-26 00:56
你要去偿试吗,这个估计要判断中断嵌套,我对FreeRTOS是真忘的差不多了,不知道FreeRTOS有没有现成的中断嵌套计数器.如果没有,那做起来可能还不简单.小心点,别踩雷  详情 回复 发表于 2024-3-25 21:31
对呀,标准OS服务本来就是实时切换任务,说多了,还以为我无理取闹,我只是不想花这个精力,要是自己去弄,早就好了  详情 回复 发表于 2024-3-25 21:24
回复 支持 反对

使用道具 举报 送花

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

34

主题

1094

回帖

2450

积分

荣誉版主

积分
2450
发表于 2024-3-25 21:24:43 | 显示全部楼层
gentl*** 发表于 2024-3-25 21:21
FreeROTS  其实留了个 portYIELD_FROM_ISR() 接口

但移植后port里没实现

对呀,标准OS服务本来就是实时切换任务,说多了,还以为我无理取闹,我只是不想花这个精力,要是自己去弄,早就好了
回复 支持 反对

使用道具 举报 送花

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

34

主题

1094

回帖

2450

积分

荣誉版主

积分
2450
发表于 2024-3-25 21:31:10 | 显示全部楼层
gentl*** 发表于 2024-3-25 21:21
FreeROTS  其实留了个 portYIELD_FROM_ISR() 接口

但移植后port里没实现

你要去偿试吗,这个估计要判断中断嵌套,我对FreeRTOS是真忘的差不多了,不知道FreeRTOS有没有现成的中断嵌套计数器.如果没有,那做起来可能还不简单.小心点,别踩雷

点评

好像也是,容易的话,之前移植的大神早就弄了  详情 回复 发表于 2024-3-25 21:34
这么麻烦吗  详情 回复 发表于 2024-3-25 21:32
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-6-17 20:27 , Processed in 0.132157 second(s), 110 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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