搜索
bottom↓
回复: 22

【开源】 AntOS 针对51内核开发的轻量型RTOS

[复制链接]

出0入75汤圆

发表于 2021-5-26 23:51:56 | 显示全部楼层 |阅读模式
本帖最后由 泽文i 于 2021-5-27 00:36 编辑

简介:

我一共设计了三个版本,第一个版本是类似linux的线程管理方式,抢占式内核,采用更现代化的双数据循环链表来作为基本数据结构编写的,结果效率比较低,任务调度要0.3ms。

第二版是合作式调度内核,任务切换很快,只需要25us。但是对POSIX的标准支持不够好,而且实时性也不是很好,不过适合数据量吞吐高的场景(但是51基本不会做这类事)。

第三个版本,就是我现在写的,优化的抢占式内核。增加对POSIX的支持,提高对上层应用程序的移植性。


AntOS 采用面向对象的管理策略编写,静态内存管理办法,极简内核。 抢占式调度,支持线程初始化传参、最大允许创建30个任务。
在8051上跑RTOS,学习的意义要大于实际应用(所以不要杠我),因此我开发了一个尽可能全面有用的RTOS,并把整个开发过程记录下来。

整个开发过程,我会记录在知识星球,方便整理,你可以在我的微信群或者加知识星球,来赞助和支持AntOS的开发。


创建线程的demo示例:








示波器抓一下波形:




硬件我使用的是STC8H,系统时钟频率 44M,示波器看了一下两个线程的调度时间,只需要35us


开发进度:

我会贴在评论区,以帖子盖楼的形式展现。


获取源码方式:

内核部分,只完成了线程相关的基础操作,IPC通讯机制还在开发,所以暂时不全面公开源码。


由于我是利用考研间隙,来编写的这个RTOS,主要是专业课就是操作系统,因此我写RTOS是为了练手。


为了方便,我就把相关资料,都放在知识星球了,感兴趣你可以加入。



如果你想获取最新的源码,以及更多的RTOS相关的知识,可以加入知识星球。

同时在这里,可以帮助你解决8051-ELL库相关的问题,提供更完善的技术支持。





如果你只是感兴趣,想了解了解,可以加QQ群。

微信群由于7天会失效,所以放在评论区,不定时开放加知识星球的免费名额,建议关注。



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入75汤圆

 楼主| 发表于 2021-5-27 00:10:36 | 显示全部楼层
本帖最后由 泽文i 于 2021-5-27 00:12 编辑

【开发日志】 - 内核篇

1.完成面向对象管理框架的设计,主要有内核对象的容器设计、对象的创建、初始化、删除等操作。
2.实现内核线程组件的控制块内存管理,采用静态管理办法,节约资源。
3.完善线程基本操作的API,主要有创建(静态)、删除、让出、挂起、恢复、休眠等操作。线程有:运行态、就绪态、阻塞态(挂起态)三种基本运行状态。


注:

可以通过知识星球获取AntOS的源码,等到IPC通信机制实现以后,会在gitee和github上开源。

源码采用中英文互补注释,格式规范,使用UTF-8格式编码,兼容性更好,支持Vascode协同开发。

出0入1209汤圆

发表于 2021-5-27 00:17:14 | 显示全部楼层
放群号违规了吧

出0入75汤圆

 楼主| 发表于 2021-5-27 00:25:38 | 显示全部楼层
kitten 发表于 2021-5-27 00:17
放群号违规了吧

是吗,我不是很清楚哎,如果违规了,我及时删除。

出0入75汤圆

 楼主| 发表于 2021-5-27 00:37:54 | 显示全部楼层
kitten 发表于 2021-5-27 00:17
放群号违规了吧

我之前发过帖子,没有问题呀。想了解的可以加一下,不强制要求,哈哈哈。

出0入442汤圆

发表于 2021-5-27 07:40:28 来自手机 | 显示全部楼层
51进一次中断都要不了300ns吧?你这线程切换太重了。。我riscv专门研发的微内核切换一次才3us,fpga主频36mhz,支持线程创建删除等待mutex等少数posix兼容api。

出0入93汤圆

发表于 2021-5-27 09:31:09 | 显示全部楼层
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差。除非像某些人一样一看到RTOS就想到uc/OS,那确实只具有学习意义。N年以前我还在用51时,除了简单的还在前后台外,几乎都使用了RTX51Tiny,虽然这只是个协作式OS。为了回您这个帖子,我今天又跑了下Keil自带的RTX51Tiny例程Ex1,自增的long改为unsigned char三个任务占用27.2字节RAM 562字节ROM。然而这个是时间片轮询的没用到延时,没什么卵用。干掉时间片改用延时,变成占用26.1字节RAM 584字节ROM。如果还嫌大那还有ProtoThread。

当然了,在51上跑OS,我认为除了RTX51Tiny外,其他的占有率都比较艰难了,包括RTX51Tiny的大哥RTX51Full。说句题外话,你这个44MHz时标红的35us调度时间,折合1540个时钟周期,我不知道该怎么评价,我一般使用1ms定时器,你这个调度就占用了1/28,还那么高频率,几乎是无法容忍的。

出30入54汤圆

发表于 2021-5-27 09:58:35 | 显示全部楼层
开源了,但是没有完全开源

出130入30汤圆

发表于 2021-5-27 10:07:32 | 显示全部楼层
成熟免费的RTOS太多了,,,,

出0入75汤圆

 楼主| 发表于 2021-5-27 11:12:59 来自手机 | 显示全部楼层
takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

感谢大佬真诚相待的回复!

OS上下文切换慢的原因。由如下:

1.由于SP指针寻址范围只有8位,只能把线程堆栈保存在XRAM,运行时时再切换到系统栈(RAM),这是第一大消耗时间的地方,尤其是线程内函数调用多时。

2,我在处理线程优先级调度算法时,做了很多处理。但是这也是非常消耗时间的地方。

3.以上两处,基本占据了大部分上下文切换的时间。

出0入75汤圆

 楼主| 发表于 2021-5-27 11:15:05 来自手机 | 显示全部楼层
wye11083 发表于 2021-5-27 07:40
51进一次中断都要不了300ns吧?你这线程切换太重了。。我riscv专门研发的微内核切换一次才3us,fpga主频36m ...

我在阅读C51翻译成反汇编的代码,发现大多数代码,都依赖A R0~R7 DPTR 这些寄存器,但是对比ARM和RISCV,代码密度和执行效率完全没有可比性。

这也是比较无奈的地方,所以想在51上实现一个完善的RTOS,还是比较艰难的。

出0入75汤圆

 楼主| 发表于 2021-5-27 11:21:05 来自手机 | 显示全部楼层
takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...


我再研究研究,不先往下写别的模块,看看怎么优化调度时间,欢迎加群讨论。

出0入442汤圆

发表于 2021-5-27 12:26:05 来自手机 | 显示全部楼层
本帖最后由 wye11083 于 2021-5-27 12:28 编辑
泽文i 发表于 2021-5-27 11:15
我在阅读C51翻译成反汇编的代码,发现大多数代码,都依赖A R0~R7 DPTR 这些寄存器,但是对比ARM和RISCV, ...


你可以考虑固定线程状态表,中断时把寄存器存进去。我就是这么实现的,缺点是不能中断嵌套,否则状态会乱。优点是极度省ram,4个线程一共才用600字节的sram和2kb的flash。所以要达到最佳响应只能使劲压缩中断处理时间。

还有,单片机应用我觉得抢占意义不大,毕竟紧急的任务就丢给中断了,线程用round robin足矣。然后加上mutex和event就差不多够使了。指望51这个体量做抢占必要性不充分。毕竟不比最新的pc,切换一次线程才几百ns。

出0入75汤圆

 楼主| 发表于 2021-5-27 13:49:45 来自手机 | 显示全部楼层
cheng-8yang 发表于 2021-5-27 10:07
成熟免费的RTOS太多了,,,,

比不了比不了,我的目的是学习

出0入75汤圆

 楼主| 发表于 2021-5-27 13:50:19 来自手机 | 显示全部楼层
cloudboy 发表于 2021-5-27 09:58
开源了,但是没有完全开源

大佬稍等,我把资料整理好就开源!

出0入75汤圆

 楼主| 发表于 2021-5-27 14:46:11 来自手机 | 显示全部楼层
takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

我准备在优先级查找算法入手,在现在的架构下,这里还有很大的操作空间,我想到的是查表法。

出0入0汤圆

发表于 2021-5-27 17:52:15 | 显示全部楼层
cheng-8yang 发表于 2021-5-27 10:07
成熟免费的RTOS太多了,,,,

笑死我了 哈哈哈

出0入4汤圆

发表于 2021-5-27 18:00:12 | 显示全部楼层
可以参考Small RTOS51,也是针对8051的抢占式RTOS,写得很好,而且开源,我用过,稳定没毛病。

出0入75汤圆

 楼主| 发表于 2021-5-27 18:06:47 | 显示全部楼层
oner 发表于 2021-5-27 18:00
可以参考Small RTOS51,也是针对8051的抢占式RTOS,写得很好,而且开源,我用过,稳定没毛病。 ...

好的大佬!

出0入8汤圆

发表于 2021-5-27 19:23:31 | 显示全部楼层
厉害了,年轻人
年轻人,加油啊

出0入75汤圆

 楼主| 发表于 2021-5-29 09:46:46 来自手机 | 显示全部楼层
takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

大佬,我大概算了一下,在STC16上面跑AntOS,应该只需要6us

出0入0汤圆

发表于 2021-6-9 07:24:54 来自手机 | 显示全部楼层
楼主,有开源资料可以下载吗?

出0入75汤圆

 楼主| 发表于 2021-6-23 09:32:31 | 显示全部楼层
eddia2012 发表于 2021-6-9 07:24
楼主,有开源资料可以下载吗?

看我的另外一个帖子,已经开源了!!!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-29 15:14

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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