fanxsp
发表于 2024-5-6 21:03:16
13918210822 发表于 2024-5-6 20:38
那我想你的作品应该基本满足我的需求,具体如何配置,我要学习一下
我考虑在 STC8H1K08上跑一个机箱前面 ...
在STC8H1K08上跑起来,完全没有问题,用消息队列来实现串口通讯协议,也是相当方便的。
tzz1983
发表于 2024-5-6 21:10:38
本帖最后由 tzz1983 于 2024-5-6 21:12 编辑
13918210822 发表于 2024-5-6 14:56
是有向你们学习,缩减一个功能子集的想法
但是,理论知识储备不够,想得到大家的指点,哪些才是最基础的 ...
你的需求, 是比较合适用 RTOSTiny,RTOSTiny基本上已经把51压榨到了极限, 切换效率很高的.
作者说只用协作式时, 代码仅850字节左右. 开抢占时, 也就1K多代码.
别被RTOS吓到, 那么多的C文档, 想当然就会以为很大,
其实, 通过适当的裁剪以后, 不太的, 也不会占用很多资源.
关键是它好用呀, 就像你说的, 用一个OSTimeDly() 代替无效的 _nop_()循环, 可以节省多少资源?
再者就是这个任务断点继续, 比起祼机的状态机, 不要舒服太多, 习惯了跟本就放不下!
小型RTOS都不会占用太多的资源, 我用数据来说明一下RTOS的资源占用情况:
uC/OS:
仅用基本功能时也就5KB左右的代码, 对于64KB的51机型来说, 毫无压力.
DATA=30, XDATA=1K左右, 对于8K的51机型来说也没有压力.
OS自身的CPU占用率, 合理的设置可以降低到 1%以内.
RTOSTiny:
我编译了一下例程:CODE=1404DATA=42XDATA=63这么低的RTOS还有谁?
相信CosyOS只用基本功能时代码量也不高, 否则那就是裁剪做的不够到位.
因为他的代码开了很多测试功能, 我没有去尝试.
当然了, 不论多少, RTOS总会一些资源占用, 如果说小鱼小虾也是肉的话, 那就不怎么好跟话了.
总结, 当你真的了解RTOS后, 就是发现, RTOS的弊端跟本不是什么占用资源.
RTOS最大的弊端就是比祼机的入门门槛稍高了些,需要一定的时间去理解和熟悉!
13918210822
发表于 2024-5-6 21:31:41
本帖最后由 13918210822 于 2024-5-6 21:36 编辑
tzz1983 发表于 2024-5-6 21:10
你的需求, 是比较合适用 RTOSTiny,RTOSTiny基本上已经把51压榨到了极限, 切换效率很高的.
作者说只用协 ...
纯国产的Cosy应该是功能相对多一些
Ti51"替我要“应该是更轻量,在看代码中。。。
你移植的uC/OS理论上更成熟,相对应的介绍文档也很多,不过要更多的资源,稍后再学习
想用几天时间把代码移植到Ti51上去, LCD1602操作,ADC操作(按键事件),串口协议解析都有一些代码量,所以850字节的确很符合想象。我估计 用上Fanxsp的RTOSTiny51有机会压缩在4~8K以内。
如果放开1点,用STC8H1K17应该uC/OS也能用,不过我要熟悉一下RTOS
51跑操作系统的确还是比较神奇,SOC上多用LinuxBSP, 51则是只用过前后台。
你们已经走在前面开个几个副本,我看看能不能进去实际杀几个怪:)
我对自己还有一个要求,就是边用边理解,能不能把使用RTOS后的设计模式归纳清楚
谢谢了!
13918210822
发表于 2024-5-6 21:52:22
fanxsp 发表于 2024-5-6 21:03
在STC8H1K08上跑起来,完全没有问题,用消息队列来实现串口通讯协议,也是相当方便的。 ...
修改了tinyrtos51cfg.h
/*任务 */
/* OSTASKS+OSBINSEMS+OSSEMS+OSEFLAGS+OSMSGQS < 256 */
#define OSTASKS 4 // 任务数 ID: 0~OSTASKS-1
#define OSMETHOD 0 // 调度模式 0-协作式 1-抢先式
编译后,大小和内存占用没有改变(Program Size: data=42.0 xdata=63 const=0 code=1404),是否还要修改一些地方?
fanxsp
发表于 2024-5-6 22:01:15
本帖最后由 fanxsp 于 2024-5-6 22:08 编辑
13918210822 发表于 2024-5-6 21:52
修改了tinyrtos51cfg.h
OSMETHOD设为0就是协作式为1 就是抢先式。这个例程 还有调用任务挂起、任务恢复,代码会略大一些。
13918210822
发表于 2024-5-6 22:07:51
fanxsp 发表于 2024-5-6 22:01
OSMETHOD设为0就是协作式为1 就是抢先式
这个我猜测如是。
只是修改这个选项后,重新编译,obj大小没有变化
增加了 REMOVEUNUSED链接选项也没有改变
fanxsp
发表于 2024-5-6 22:11:45
本帖最后由 fanxsp 于 2024-5-6 22:14 编辑
13918210822 发表于 2024-5-6 22:07
这个我猜测如是。
只是修改这个选项后,重新编译,obj大小没有变化
你的编译器,是什么版本的?优化等级多少? 我试了一下,我的有变化啊
13918210822
发表于 2024-5-7 04:30:13
fanxsp 发表于 2024-5-6 22:11
你的编译器,是什么版本的?优化等级多少? 我试了一下,我的有变化啊
请帮忙看一下我的选项是否要调整,对比“有变化的”用的版本和选项应该是多少?
你提到的"例子中,任务挂起和恢复,代码稍大一点“是否可以条件编译,如何进行?
谢谢
fanxsp
发表于 2024-5-7 07:48:05
本帖最后由 fanxsp 于 2024-5-7 07:50 编辑
13918210822 发表于 2024-5-7 04:30
请帮忙看一下我的选项是否要调整,对比“有变化的”用的版本和选项应该是多少?
你提到的"例子中,任务 ...
这个是最新版,有增加一些新功能,准备过一段时间上传。
QQ624353765
发表于 2024-5-7 08:10:27
我只想说单片机开发没必要上系统,提高自己的编程逻辑和编程思想
再复杂的程序也能运行自如,论坛上的系统对我来说没有任何资源可用,在我眼里纯浪费单片机资源
想实现多任务也就几百行代码,抢占式任务就写在中断里。