QQ624353765
发表于 2024-5-7 08:17:56
STC单片机程序裸奔能实现的效果
fanxsp
发表于 2024-5-7 08:20:34
QQ624353765 发表于 2024-5-7 08:10
我只想说单片机开发没必要上系统,提高自己的编程逻辑和编程思想
再复杂的程序也能运行自如,论坛上的系统 ...
不是必须的,权衡利蔽,因人而异,根据项目实际情况而定。
13918210822
发表于 2024-5-7 14:01:26
本帖最后由 13918210822 于 2024-5-7 14:05 编辑
QQ624353765 发表于 2024-5-7 08:10
我只想说单片机开发没必要上系统,提高自己的编程逻辑和编程思想
再复杂的程序也能运行自如,论坛上的系统 ...
就说一个延迟等待,就有必要加一个任务调度,我是这么理解。。。
QQ624353765
发表于 2024-5-7 14:10:07
13918210822 发表于 2024-5-7 14:01
就说一个延迟等待,就有必要加一个任务调度,我是这么理解。。。
为什么你们的代码里面delay函数看的那么重要呢?我自从写代码来都没用过delay函数
13918210822
发表于 2024-5-7 14:13:49
QQ624353765 发表于 2024-5-7 08:17
STC单片机程序裸奔能实现的效果
实现的得挺好的,尤其是自定义的UI
加上上位机通讯和我目前准备移植的程序功能就挺类似的。
我想用一个任务调度服务(RTOSCore),因为这样会更好的管理空闲等待
可以让同步更平滑,并不是加了任务调度服务就不用中断了。
你不妨想想看看在一个IO模拟时序的间隙还能处理其他任务的价值(比如计算ADC采样的有效平均)
13918210822
发表于 2024-5-7 15:02:11
fanxsp 发表于 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
这样是否可以操作呢?
fanxsp
发表于 2024-5-7 15:03:59
13918210822 发表于 2024-5-7 15:02
谢谢信任,拜读中。。。
有一点疑惑,想和你请教一下,临界区保护要防止任意任务进入或者其他任务切换
可以的,但是没有关闭的中断,不能调用系统服务。
13918210822
发表于 2024-5-7 15:10:47
本帖最后由 13918210822 于 2024-5-7 16:52 编辑
fanxsp 发表于 2024-5-7 15:03
可以的,但是没有关闭的中断,不能调用系统服务。
在临界区中,调用系统服务。。
具体是哪些服务,服务是否知道调用者处在临界区内状态呢(比如用虚拟寄存器变量记录)
另外,reentrant 对于一个只有256 idata,pdata的MCU来说还是太奢侈,能不能配置为不使用呢?
我还是“理想化”一点, 先从需求定义出发,从你的代码中提取子集。
我先把实际UI-MCU用的设计模式定义出来,然后把操作系统功能子集定义出来,然后看如何匹配功能实现
然后看如何规约成一个精简配置版本的 TaskSvc == RTOSTiny CfgTiny0
fanxsp
发表于 2024-5-7 16:57:17
13918210822 发表于 2024-5-7 15:10
在临界区中,调用系统服务。。
具体是哪些服务,服务是否知道调用者处在临界区内状态呢(比如用虚拟寄存 ...
所有的 API都是系统服务
是在OSDi()中没有关闭的中断,不能调用系统服务
OS不需要 reentrant 函数,但可以支持用户使用reentrant函数
13918210822
发表于 2024-5-9 17:53:54
fanxsp 发表于 2024-5-7 16:57
所有的 API都是系统服务
是在OSDi()中没有关闭的中断,不能调用系统服务
OS不需要 reentrant 函数, ...
也许,一个类似Fiber的支持工具宏,可以在51(128~1K ram, 2k~8k flash)上支持快速切换
如果能控制现场保护的规模,应该有机会控制在5us以下,这样时间片可以设置在100us~500us
也算 rt 级别的 多任务运行环境
我好好想想,查查资料,如果各位有经验,也请多多指点,感谢!