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

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

[复制链接]

该用户从未签到

61

主题

623

回帖

1万

积分

荣誉版主

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

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

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

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

点评

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

使用道具 举报

该用户从未签到

61

主题

623

回帖

1万

积分

荣誉版主

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

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

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

使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

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

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








    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
    发表于 2024-3-25 20:26:49 | 显示全部楼层
    本帖最后由 tzz1983 于 2024-3-25 20:32 编辑
    gentleman 发表于 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 送花

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

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

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

    点评

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

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

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

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

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

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

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

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

    点评

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

    使用道具 举报

  • TA的每日心情

    2024-4-24 08:59
  • 签到天数: 17 天

    [LV.4]偶尔看看III

    0

    主题

    8

    回帖

    98

    积分

    注册会员

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

    使用道具 举报

  • TA的每日心情
    奋斗
    前天 08:47
  • 签到天数: 142 天

    [LV.7]常住居民III

    29

    主题

    559

    回帖

    2116

    积分

    荣誉版主

    积分
    2116
     楼主| 发表于 2024-3-25 21:21:47 | 显示全部楼层
    tzz1983 发表于 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
    回复 支持 反对 送花

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

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

    但移植后port里没实现

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

    使用道具 举报

    该用户从未签到

    19

    主题

    519

    回帖

    1646

    积分

    荣誉版主

    积分
    1646
    发表于 2024-3-25 21:31:10 | 显示全部楼层
    gentleman 发表于 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, 2024-5-2 09:50 , Processed in 0.072208 second(s), 65 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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