pryprypry 发表于 2018-3-3 01:15:22

发一个自制的RTOS,适合学习和极简开发

本帖最后由 pryprypry 于 2018-3-3 01:19 编辑

下载地址:
github.com/EDI-Systems/M5P1_MuProkaron
整个系统一个文件,源码压缩包2MB以内
仅支持邮箱和信号量,不带其他任何杂七杂八东西
2k ROM占用,128B RAM占用
带用户手册,非常适合初学者
支持Cortex-M,MSP430,MIPS,也支持Linux模拟

和其他RTOS的对比见附件图

*内核对象管理、内存分配、设备框架实际上并不实用,因为深度嵌入式应用常常静态分配它们
*互斥信号量可以用一个线程+一个计数信号量实现
*消息队列可以用一个线程+一个邮箱实现
*GUI,Shell和文件系统要用可以外加,不必作为标准实现
*不常用的架构(如正在死亡的AVR32和凌阳等)用不着支持

本系统主要适合初学者和小型单片机开发,尤其是需要短平快多于需要全功能者。

feverkim 发表于 2018-3-3 01:22:10

拜莫,学习

wicy001 发表于 2018-3-3 08:10:05

M0,stm8支持吗

zyqcome 发表于 2018-3-3 08:11:41

已订阅。。。。。。。。。。

墨逸、 发表于 2018-3-3 08:38:58

mark,如果能实现所说的功能的话是很不错的,在这点上支持楼主!
BUT,楼主发这个出来什么意思呢?
开源?炫耀?还是想出售却不好说?

pryprypry 发表于 2018-3-3 08:52:37

墨逸、 发表于 2018-3-3 08:38
mark,如果能实现所说的功能的话是很不错的,在这点上支持楼主!
BUT,楼主发这个出来什么意思呢?
开源? ...

已经实现完了,这个是个开源贴。主贴有下载链接,前面加上http即可。

pryprypry 发表于 2018-3-3 08:54:58

wicy001 发表于 2018-3-3 08:10
M0,stm8支持吗

M0支持,STM8是8位的不支持。过会开一个贴讲下STM8的状态机操作系统实现,那个更简单些,可以在github.com/EDI-Systems/M2A1_MuSimpron找到。这个是实际上在8位机上实用的基于协程和状态机的操作系统。

墨逸、 发表于 2018-3-3 09:17:01

本帖最后由 墨逸、 于 2018-3-3 09:19 编辑

pryprypry 发表于 2018-3-3 08:54
M0支持,STM8是8位的不支持。过会开一个贴讲下STM8的状态机操作系统实现,那个更简单些,可以在github.co ...

我为我自己的行为道歉,感谢分享

fbwcpu 发表于 2018-3-3 09:44:23

坐等讲解STM8 8位机状态机编程方法。

jack_yu 发表于 2018-3-3 09:58:59

也想学学。谢谢楼主{:smile:}

wq_601840968 发表于 2018-3-3 09:59:07

followed
   

su33691 发表于 2018-3-3 10:01:05

这个不错,感谢楼主分享。

zsmbj 发表于 2018-3-3 10:03:43

看了一下M3 2.6k ROM,1.5k ram,也不小了。还不如用freertos,用的人多。而且成熟。
freertos只开信号量和邮箱开销也很小。

Excellence 发表于 2018-3-3 10:05:10

谢谢分享。对8位机感兴趣。

pryprypry 发表于 2018-3-3 10:06:35

zsmbj 发表于 2018-3-3 10:03
看了一下M3 2.6k ROM,1.5k ram,也不小了。还不如用freertos,用的人多。而且成熟。
freertos只开信号量和 ...

那个是典型值,不是最小配置。这个系统的最小配置的大小在250Byte左右,rom占用可以压到1k以内。整个系统对freertos等其他系统的最大优势不是其体积而是其使用上的简单性,它的工程建立和配置都非常容易,而且移植也要方便,另外配置项少不容易在配置时出错。

graycker 发表于 2018-3-3 10:54:26

厉害,mark下

heyangfengyue 发表于 2018-3-3 11:19:03

卧槽,这个牛逼不得鸟了。谢谢楼主分享!!

yunhuisong 发表于 2018-3-3 11:53:23

mark一下,学习

honami520 发表于 2018-3-3 12:02:08

不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起来简单的话还是有意义的。
就像楼主说的,短平快

supercoo 发表于 2018-3-3 13:07:41

牛人!来混个眼熟{:lol:}

duxingkei 发表于 2018-3-3 14:20:54

好东西啊,越来越多的开源OS出现,好福利啊

guolun 发表于 2018-3-3 15:13:33

这个OS适合短平快开发。

TonyCai 发表于 2018-3-3 16:52:57

不是有个都江堰 RTOS 么

foxpro2005 发表于 2018-3-3 20:14:12

这个看起来不错。其实在8位,32位上,论坛中的那个小小调度器,也是非常不错的

pryprypry 发表于 2018-3-4 01:29:54

honami520 发表于 2018-3-3 12:02
不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起 ...

嗯,这个用起来还是挺简单的。OS本身就只有一个文件,路径只要配置一个即可。然后就可以直接使用了,没有那么多bug和配置项要学习

pryprypry 发表于 2018-3-4 01:32:40

foxpro2005 发表于 2018-3-3 20:14
这个看起来不错。其实在8位,32位上,论坛中的那个小小调度器,也是非常不错的
...

我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利用了处理器的硬件中断优先级来实现OS中的优先级(也即一部分任务当成了中断向量来跑)。比那个小小调度器多提供了几个宏,用起来更方便些。可以在github.com/EDI-Systems/M2A1_MuSimpron找到。
这个我还是再开个帖子讲吧

pryprypry 发表于 2018-3-4 09:59:33

最新的中英文版的手册刚刚更新了。

wjb444 发表于 2018-3-4 10:20:23

能开发rtos的都是高手!

eddia2012 发表于 2018-3-4 13:40:09

下来看下,支持楼主!

javenreal 发表于 2018-3-4 13:50:49

高手,支持学习!

fengyunyu 发表于 2018-3-4 15:04:43

厉害,自己写os的越来越多

zhcj66 发表于 2018-3-4 15:08:10

高手,支持楼主

t35720864 发表于 2018-3-4 15:29:25

感谢分享!支持楼主!

javenreal 发表于 2018-3-4 15:36:31

拜读了“ MSimpron/kernel.c”。如果task1每次执行要花10ms,而task2需要每5ms执行一次,是否无法实现呢?

foxpro2005 发表于 2018-3-4 19:40:41

本帖最后由 foxpro2005 于 2018-3-4 19:45 编辑

pryprypry 发表于 2018-3-4 01:32
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利 ...

看了一下,与小小调度器原理是类似的, 都是以PT为原型的

1. “并且利用了处理器的硬件中断优先级来实现OS中的优先级(也即一部分任务当成了中断向量来跑)。”
坐等大神详解,感谢!

2. “比那个小小调度器多提供了几个宏,用起来更方便些。”
眼比较拙,没看到是哪几个

是指这个吗?
#define INT_TASK_BEGIN(X)    switch(X){
#define INT_YIELD()          return;
#define INT_TASK_END() };


3. 正好楼上所说, 如果不用定时器, A任务执行要每10ms调度一次,B任务要每5ms调度一次, 是否要在 大while中加入 delay_ms(1)来作时间控制?

pryprypry 发表于 2018-3-5 01:57:34

javenreal 发表于 2018-3-4 15:36
拜读了“ MSimpron/kernel.c”。如果task1每次执行要花10ms,而task2需要每5ms执行一次,是否无法实现呢? ...

可以实现,具体的方法就是使用一个硬件定时器更新某个变量即可,然后在task中扫描这个变量。这个定时器还可以同时用来定期扫描数码管等等(利用中断任务的方式)。这个OS不占定时器的意思是,这个OS没有定时器也可以跑,但是如果需要定时功能的话,可以千方百计和别的功能共用一个定时器,从而不需要独占定时器。另外,很多应用也的确不需要定时器,这个时候就没必要占定时器了。

pryprypry 发表于 2018-3-5 02:14:17

foxpro2005 发表于 2018-3-4 19:40
看了一下,与小小调度器原理是类似的, 都是以PT为原型的

1. “并且利用了处理器的硬件中断优先级来实现 ...

我的MSimpron由于多提供了那几个宏(实际上就只多这些就可以),即实现了抢占式协程。关于如何用中断实现不同优先级的协程,请看附件中的文章。


lovemini 发表于 2018-3-5 06:50:04

学习了,下载看看

cyq001 发表于 2018-3-5 10:41:04

一定要试试,支持

marshallemon 发表于 2018-3-5 10:42:30

lz不是模拟的大神,怎么也搞起编程了?

pryprypry 发表于 2018-3-9 02:25:39

v0.0.6:更新了内存管理模组和其对应的测试向量文件。

pryprypry 发表于 2018-3-11 07:22:06

v0.0.7:新增了对Cortex-R5的支持。

psl_87 发表于 2018-3-11 12:22:58

支持下,正需要短平快的开发

chewy 发表于 2018-3-11 14:20:02

本帖最后由 chewy 于 2018-3-11 14:28 编辑

pryprypry 发表于 2018-3-4 01:32
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利 ...

这个8bit的系统基本上没有内容吧,while1循环里switch?

web110 发表于 2018-3-11 22:54:53

正在freeRTOS 学习中……

joelin97 发表于 2018-3-11 23:32:42

高手,支持学习!

pryprypry 发表于 2018-3-15 02:17:15

chewy 发表于 2018-3-11 14:20
这个8bit的系统基本上没有内容吧,while1循环里switch?

没错,几乎就是没有内容的。这实际上就是一个基于Switch-case的跳转式状态机。事实证明这是最实用的玩意,我在ATTiny13上用过这玩意。ATTiny13只有64Byte的RAM,用这个能跑出多任务的感觉。这个系统基本上没有任何的开销。

pryprypry 发表于 2018-3-15 02:20:32

web110 发表于 2018-3-11 22:54
正在freeRTOS 学习中……

我这个比FreeRTOS简单得多,而且中文手册也介绍了RTOS的基本知识,尤其是基本原理和性能分析方面的知识。从我这个开始学的话会容易一些,当然FreeRTOS也不错,支持的架构多。我的仅仅计划支持常见架构,不再支持有些老架构了。

pryprypry 发表于 2018-3-15 02:22:08

本帖最后由 pryprypry 于 2018-3-15 02:23 编辑

v0.0.8:增加了内建轻量级GUI库的支持,可以轻松在2kB RAM的MCU上做出苹果级别的界面。GUI模组和内存管理的宏不定义就不启用,如果配置文件中无相应的两个配置宏那么则不启用,而且即使启用,也仅仅消耗Flash,不会消耗额外的RAM。因此不破坏系统的轻量性。

pryprypry 发表于 2018-3-15 10:30:55

本帖最后由 pryprypry 于 2018-3-15 12:12 编辑

下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外的RAM,并且如果相关的宏没定义也根本不会被编译,真正做到轻量级。图示界面甚至可以在STM32F030上做出,无需uCGUI、emWin等的内存占用和工程复杂性。
如果图挂了的话,可以到项目的github查看。

ifus 发表于 2018-3-15 11:41:57

大牛,跟着学习{:victory:}

shower.xu 发表于 2018-3-15 12:13:48

pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...

效果不错,要是能来个stm32f030的入门实例那就更好了,感觉自己对任务的分配和跨任务数据的调用摸不着头脑

沙漠之鹰 发表于 2018-3-15 12:25:58

牛逼,跟着大神学习os

lidapang 发表于 2018-3-15 13:00:10

本帖最后由 lidapang 于 2018-3-15 13:12 编辑

厉害,回头再仿真器上玩一把

gliet_su 发表于 2018-3-15 13:13:23

TonyCai 发表于 2018-3-3 16:52
不是有个都江堰 RTOS 么

已经打酱油了

makathy 发表于 2018-3-15 14:19:22

厉害,试用一下

pryprypry 发表于 2018-3-16 01:10:51

shower.xu 发表于 2018-3-14 23:13
效果不错,要是能来个stm32f030的入门实例那就更好了,感觉自己对任务的分配和跨任务数据的调用摸不着头 ...

STM32030的工程是基于STM32030F4P6的,就是最常见的那一款。其对应的例子可以在文件夹下找到。后期会出每个单片机的对应的教程,真正拉低编程门槛。

pryprypry 发表于 2018-3-16 01:11:30

gliet_su 发表于 2018-3-15 00:13
已经打酱油了

dyjos其实还是活着的。那个OS的设计很特别,也很有意思,完全是事件驱动的,在某些场合有奇效。

浮华一生 发表于 2018-3-16 08:25:58

pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...

GUI 不消耗额外的RAM? 那速度怎么样?

浮华一生 发表于 2018-3-16 08:35:21

另外能有个windows下的VS 版本就好了

pryprypry 发表于 2018-3-16 09:01:19

浮华一生 发表于 2018-3-15 19:25
GUI 不消耗额外的RAM? 那速度怎么样?

速度也还好,因为毕竟是不支持窗口裁剪等复杂功能,也仅仅专注于支持扁平化设计,因此速度还是过得去的。至少用在030上面没问题,驱动EPD屏也没问题。

浮华一生 发表于 2018-3-16 09:12:12

pryprypry 发表于 2018-3-16 09:01
速度也还好,因为毕竟是不支持窗口裁剪等复杂功能,也仅仅专注于支持扁平化设计,因此速度还是过得去的。 ...

哦 只提供绘图算法控件信息还是用户自己保存嘛      对了, 有时间 搞个WINDOWS 下 的VS 版本撒   哈哈

sanger 发表于 2018-3-16 09:35:40

可以模拟linux的意思是兼容linux的api吗?gui不消耗额外的ram是怎么实现的

star_tale 发表于 2018-3-16 09:40:26

pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...

牛掰了,还带有控件,这个实用啊,抽时间拜读下

pryprypry 发表于 2018-3-16 10:02:25

浮华一生 发表于 2018-3-15 20:12
哦 只提供绘图算法控件信息还是用户自己保存嘛      对了, 有时间 搞个WINDOWS 下 的VS 版本撒   ...

嗯,有时间的话会搞一个示例版本,主要就是展示效果。

pryprypry 发表于 2018-3-16 10:03:33

sanger 发表于 2018-3-15 20:35
可以模拟linux的意思是兼容linux的api吗?gui不消耗额外的ram是怎么实现的

是指在Linux上面运行这个操作系统,把Linux当成了该系统的一种底层架构。GUI不消耗额外的RAM是因为这个GUI的端口设计全部都是RESTful的,内部不保存控件的状态。实际上这种GUI的实用度反而要好,窗口管理器实际上很少用到。

mcusun2000 发表于 2018-3-16 13:55:57

顶一下,一直接RTOS都没有学成

pryprypry 发表于 2018-3-16 14:37:47

现在有了个新网址,www.rtos.one

shower.xu 发表于 2018-3-16 15:48:20

pryprypry 发表于 2018-3-16 14:37
现在有了个新网址,www.rtos.one

为什么M0的flash占用比MSP430和M3/M4都大呢?
另外感觉要是能出一套030的学习板子实例更好,理解肯定会更深。或者只分享学习板子资料就行了

pryprypry 发表于 2018-3-16 23:33:30

shower.xu 发表于 2018-3-16 02:48
为什么M0的flash占用比MSP430和M3/M4都大呢?
另外感觉要是能出一套030的学习板子实例更好,理解肯定会更 ...

因为m0的指令集效率比较低,有一堆不支持的指令。m3和m4就好很多了。

pryprypry 发表于 2018-3-18 02:52:21

目前已经完成了所有的手册更新。刚刚更新了在正点原子板子上的例程,大家可以在Project文件夹下的RVMDK-STM32F767IGT6-ALIENTEK文件夹下找到。其他的正点原子和野火开发板的例子也会逐步上传。

捷胜 发表于 2018-3-18 18:06:47

膜拜,膜拜,有打算起个啥名字麽

pryprypry 发表于 2018-3-19 13:48:24

名字就叫 one

pryprypry 发表于 2018-3-19 13:49:45

名字的话就叫 one os吧,一个文件的内核,一个小时可上手,一个文档做参考,唯一的一个单文件os

沉默胜过白金 发表于 2018-3-19 14:22:50

honami520 发表于 2018-3-3 12:02
不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起 ...

你这个短平快深深地伤了楼主的自尊心。

honami520 发表于 2018-3-19 23:40:51

楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗

pryprypry 发表于 2018-3-19 23:45:04

honami520 发表于 2018-3-19 23:40
楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗

新版的库正在更新,还有F7其实也是有点老的库了。大概今明两天更新到最新版本。

pryprypry 发表于 2018-3-21 11:54:40

honami520 发表于 2018-3-19 23:40
楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗

现在对最新hal的支持已经完成了。

pryprypry 发表于 2018-3-21 11:56:04

六七月份会发布两个重要的物联网平台技术,并且发布官方网站。敬请期待。

honami520 发表于 2018-3-21 12:40:42

pryprypry 发表于 2018-3-21 11:54
现在对最新hal的支持已经完成了。

你这速度真是神速,今晚我就试试看

pryprypry 发表于 2018-3-22 00:06:58

honami520 发表于 2018-3-21 12:40
你这速度真是神速,今晚我就试试看

嗯。明天或者后天还会发布对Cortex-R4的新支持。

pryprypry 发表于 2018-3-22 03:14:39

Cortex-R4的支持已经完成,被支持控制器为TMS570LS0432。

yjbin 发表于 2018-3-22 08:43:40

不能用在51、PIC、AVR吗?

wushifeng 发表于 2018-3-22 09:30:10

标记学习      

zhenhuajiang 发表于 2018-3-22 15:02:27

自己写,这就厉害了;

zj2003 发表于 2018-3-23 13:57:43

网址打不开,是什么原因?

ju2320601 发表于 2018-3-23 22:35:37

楼主厉害,学习了

相由心生 发表于 2018-3-23 22:52:52

总觉得楼主在浪费时间做事情,尽管我从心底里还是佩服你做这样的事。
当然如果我话我反过来说,楼主就应该比较开心了。
如果用着其它方面,应该能挣不少钱。哈哈

tarchen 发表于 2018-3-23 23:04:43

厉害,mark下

pryprypry 发表于 2018-3-24 00:01:05

zj2003 发表于 2018-3-23 13:57
网址打不开,是什么原因?

网址打不开的话直接用这个吧
https://github.com/EDI-Systems/M5P1_MuProkaron

zlutian 发表于 2018-3-24 10:33:31

谢谢分享!收藏备用。

llsenyue 发表于 2018-3-27 18:07:12

pryprypry 发表于 2018-3-4 01:32
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利 ...

这个有专门开贴讲下吗?没找到链接,有没有实例的应用?

pryprypry 发表于 2018-3-28 23:08:44

llsenyue 发表于 2018-3-27 18:07
这个有专门开贴讲下吗?没找到链接,有没有实例的应用?

这个其实就是小小调度器的改进版本,可以在https://github.com/EDI-Systems/M2A1_MuSimpron 找到。允许使用系统的硬件优先级运行多个协程。

yanyanyan168 发表于 2018-3-29 10:25:12

谢谢分享!厉害。先收藏,准备用在M0上。

eduhf_123 发表于 2018-3-29 22:50:12

第360行的void RMP_Unlock_Sched(void)函数中,如下的代码片段是否有问题?
      if(RMP_Sched_Pend!=0)
      {
            /* Reset the count and trigger the context switch */
            RMP_Sched_Pend=0;
            _RMP_Yield();
      }
      RMP_UNMASK_INT();
是否应该改成下面这样?
      if(RMP_Sched_Pend!=0)
      {
            /* Reset the count and trigger the context switch */
            RMP_Sched_Pend=0;
            RMP_UNMASK_INT();
            _RMP_Yield();
      }
      else
      {
             RMP_UNMASK_INT();
      }
否则,被调度器选中的线程是否就会在RMP_MASK_INT();的状态下执行了?

pryprypry 发表于 2018-3-31 04:21:22

本帖最后由 pryprypry 于 2018-3-31 04:22 编辑

eduhf_123 发表于 2018-3-29 22:50
第360行的void RMP_Unlock_Sched(void)函数中,如下的代码片段是否有问题?

是否应该改成下面这样?


这个是没有问题的。因为RMP_Yield会触发PendSV,而此时中断是关闭的。当中断开启的时候,PendSV的响应就会开始,所以先触发PendSV之后再开启中断是完全没有问题的。这些代码都由测试文件在至少6种架构上测试过,是没有问题的。

pryprypry 发表于 2018-3-31 04:25:47

最近更新了用户手册。

chewy 发表于 2018-4-3 01:55:20

pryprypry 发表于 2018-3-31 04:25
最近更新了用户手册。

手上有个国产51单片机,16K的flash 512的ram,外围功能很丰富的,现在做的功能比较蛋疼 想着要有操作系统就好了,可惜ram太小 玩不转

wt19891114 发表于 2018-4-3 14:26:55

收藏。 学习~~

pryprypry 发表于 2018-4-6 04:13:06

外部的JS和Lua支持现在可用。这几个库不和系统本身打包,在另外的repo里面。
页: [1] 2 3
查看完整版本: 发一个自制的RTOS,适合学习和极简开发