泽文i 发表于 2021-5-26 23:51:56

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

本帖最后由 泽文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天会失效,所以放在评论区,不定时开放加知识星球的免费名额,建议关注。



泽文i 发表于 2021-5-27 00:10:36

本帖最后由 泽文i 于 2021-5-27 00:12 编辑

【开发日志】 - 内核篇

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


注:

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

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

kitten 发表于 2021-5-27 00:17:14

放群号违规了吧

泽文i 发表于 2021-5-27 00:25:38

kitten 发表于 2021-5-27 00:17
放群号违规了吧

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

泽文i 发表于 2021-5-27 00:37:54

kitten 发表于 2021-5-27 00:17
放群号违规了吧

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

wye11083 发表于 2021-5-27 07:40:28

51进一次中断都要不了300ns吧?你这线程切换太重了。。我riscv专门研发的微内核切换一次才3us,fpga主频36mhz,支持线程创建删除等待mutex等少数posix兼容api。

takashiki 发表于 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,还那么高频率,几乎是无法容忍的。

cloudboy 发表于 2021-5-27 09:58:35

开源了,但是没有完全开源

cheng-8yang 发表于 2021-5-27 10:07:32

成熟免费的RTOS太多了,,,,

泽文i 发表于 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.以上两处,基本占据了大部分上下文切换的时间。

泽文i 发表于 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,还是比较艰难的。

泽文i 发表于 2021-5-27 11:21:05

takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

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

wye11083 发表于 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。

泽文i 发表于 2021-5-27 13:49:45

cheng-8yang 发表于 2021-5-27 10:07
成熟免费的RTOS太多了,,,,

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

泽文i 发表于 2021-5-27 13:50:19

cloudboy 发表于 2021-5-27 09:58
开源了,但是没有完全开源

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

泽文i 发表于 2021-5-27 14:46:11

takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

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

单片稽 发表于 2021-5-27 17:52:15

cheng-8yang 发表于 2021-5-27 10:07
成熟免费的RTOS太多了,,,,

笑死我了 哈哈哈

oner 发表于 2021-5-27 18:00:12

可以参考Small RTOS51,也是针对8051的抢占式RTOS,写得很好,而且开源,我用过,稳定没毛病。

泽文i 发表于 2021-5-27 18:06:47

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

好的大佬!

hellowolf 发表于 2021-5-27 19:23:31

厉害了,年轻人
年轻人,加油啊

泽文i 发表于 2021-5-29 09:46:46

takashiki 发表于 2021-5-27 09:31
在8051上跑RTOS,我认为实际意义还是很大的。即使是AT89C2051这类才2kB Flash的片子,跑RTOS效果也未必会差 ...

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

eddia2012 发表于 2021-6-9 07:24:54

楼主,有开源资料可以下载吗?

泽文i 发表于 2021-6-23 09:32:31

eddia2012 发表于 2021-6-9 07:24
楼主,有开源资料可以下载吗?

看我的另外一个帖子,已经开源了!!!
页: [1]
查看完整版本: 【开源】 AntOS 针对51内核开发的轻量型RTOS