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

最小“非抢占”系统调度服务的必须功能--理念讨论贴,小白发贴,欢迎各位高手及小白

[复制链接]
  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-5-7 08:17:56 | 显示全部楼层
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-7 08:20:34 | 显示全部楼层
QQ6243*** 发表于 2024-5-7 08:10
我只想说单片机开发没必要上系统,提高自己的编程逻辑和编程思想
再复杂的程序也能运行自如,论坛上的系统 ...

不是必须的,权衡利蔽,因人而异,根据项目实际情况而定。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-5-7 14:01:26 | 显示全部楼层
本帖最后由 13918210822 于 2024-5-7 14:05 编辑
QQ6243*** 发表于 2024-5-7 08:10
我只想说单片机开发没必要上系统,提高自己的编程逻辑和编程思想
再复杂的程序也能运行自如,论坛上的系统 ...

就说一个延迟等待,就有必要加一个任务调度,我是这么理解。。。

借用RTOS_Tiny文档中的任务状态歉意图说明

借用RTOS_Tiny文档中的任务状态歉意图说明
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:434
  • 最近打卡:2025-05-01 20:16:58
已绑定手机

229

主题

328

回帖

1471

积分

金牌会员

积分
1471
发表于 2024-5-7 14:10:07 | 显示全部楼层
139182*** 发表于 2024-5-7 14:01
就说一个延迟等待,就有必要加一个任务调度,我是这么理解。。。

为什么你们的代码里面delay函数看的那么重要呢?我自从写代码来都没用过delay函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-5-7 14:13:49 | 显示全部楼层
QQ6243*** 发表于 2024-5-7 08:17
STC单片机程序裸奔能实现的效果

实现的得挺好的,尤其是自定义的UI

加上上位机通讯和我目前准备移植的程序功能就挺类似的。

我想用一个任务调度服务(RTOSCore),因为这样会更好的管理空闲等待

可以让同步更平滑,并不是加了任务调度服务就不用中断了。

你不妨想想看看在一个IO模拟时序的间隙还能处理其他任务的价值(比如计算ADC采样的有效平均)


回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-5-7 15:02:11 | 显示全部楼层
fan*** 发表于 2024-5-7 07:48
这个是最新版,有增加一些新功能,准备过一段时间上传。

谢谢信任,拜读中。。。

有一点疑惑,想和你请教一下,临界区保护要防止任意任务进入或者其他任务切换
是否可以只禁止使用任务切换(比如禁止任务切换用的小中断,又或者虽然进了任务切换用的小中断,但是不切换原路返回,从而实际的保护临界区),这样避免切总中断使能EA

也就是Cosy之前宣传的不关总中断的0用户中断延迟--让其他中断正常发生

至于ISR去干涉OS的临界区,只能说驱动不干驱动的事情,让我们一起鄙视他。。。

#define OSEnterCritical()   \
    do \
        {  \
                OSDi();   \
                OSEnterSum++; \
    } while(0)
                                       
#define OSExitCritical()    \
    do \
        {  \
                if(--OSEnterSum == 0) OSEi(); \
    } while (0)
希望 OSDi/OSEi, 只停任务切换中断或者切换行为,而不操作EA

这样是否可以操作呢?
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-7 15:03:59 | 显示全部楼层
139182*** 发表于 2024-5-7 15:02
谢谢信任,拜读中。。。

有一点疑惑,想和你请教一下,临界区保护要防止任意任务进入或者其他任务切换

可以的,但是没有关闭的中断,不能调用系统服务。
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-5-7 15:10:47 | 显示全部楼层
本帖最后由 13918210822 于 2024-5-7 16:52 编辑
fan*** 发表于 2024-5-7 15:03
可以的,但是没有关闭的中断,不能调用系统服务。

在临界区中,调用系统服务。。

具体是哪些服务,服务是否知道调用者处在临界区内状态呢(比如用虚拟寄存器变量记录)


另外,reentrant 对于一个只有256 idata,pdata的MCU来说还是太奢侈,能不能配置为不使用呢?

我还是“理想化”一点, 先从需求定义出发,从你的代码中提取子集。

我先把实际UI-MCU用的设计模式定义出来,然后把操作系统功能子集定义出来,然后看如何匹配功能实现

然后看如何规约成一个精简配置版本的 TaskSvc == RTOSTiny CfgTiny0

回复 支持 反对

使用道具 举报 送花

  • 打卡等级:以坛为家II
  • 打卡总天数:501
  • 最近打卡:2025-05-01 14:43:21

1

主题

183

回帖

1863

积分

金牌会员

积分
1863
发表于 2024-5-7 16:57:17 | 显示全部楼层
139182*** 发表于 2024-5-7 15:10
在临界区中,调用系统服务。。

具体是哪些服务,服务是否知道调用者处在临界区内状态呢(比如用虚拟寄存 ...

所有的 API  都是  系统服务
是在OSDi()中没有关闭的中断,不能调用系统服务
OS不需要 reentrant 函数,但可以支持用户使用reentrant函数
回复 支持 反对

使用道具 举报 送花

  • 打卡等级:初来乍到
  • 打卡总天数:1
  • 最近打卡:2025-03-10 16:08:45

6

主题

131

回帖

666

积分

高级会员

积分
666
发表于 2024-5-9 17:53:54 | 显示全部楼层
fan*** 发表于 2024-5-7 16:57
所有的 API  都是  系统服务
是在OSDi()中没有关闭的中断,不能调用系统服务
OS不需要 reentrant 函数, ...

也许,一个类似Fiber的支持工具宏,可以在51(128~1K ram, 2k~8k flash)上支持快速切换

如果能控制现场保护的规模,应该有机会控制在5us以下,这样时间片可以设置在100us~500us

也算 rt 级别的 多任务运行环境 

我好好想想,查查资料,如果各位有经验,也请多多指点,感谢!
回复 支持 反对

使用道具 举报 送花

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

本版积分规则

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

GMT+8, 2025-5-2 06:47 , Processed in 0.144946 second(s), 116 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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