发一个自制的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和凌阳等)用不着支持
本系统主要适合初学者和小型单片机开发,尤其是需要短平快多于需要全功能者。 拜莫,学习 M0,stm8支持吗 已订阅。。。。。。。。。。 mark,如果能实现所说的功能的话是很不错的,在这点上支持楼主!
BUT,楼主发这个出来什么意思呢?
开源?炫耀?还是想出售却不好说? 墨逸、 发表于 2018-3-3 08:38
mark,如果能实现所说的功能的话是很不错的,在这点上支持楼主!
BUT,楼主发这个出来什么意思呢?
开源? ...
已经实现完了,这个是个开源贴。主贴有下载链接,前面加上http即可。 wicy001 发表于 2018-3-3 08:10
M0,stm8支持吗
M0支持,STM8是8位的不支持。过会开一个贴讲下STM8的状态机操作系统实现,那个更简单些,可以在github.com/EDI-Systems/M2A1_MuSimpron找到。这个是实际上在8位机上实用的基于协程和状态机的操作系统。 本帖最后由 墨逸、 于 2018-3-3 09:19 编辑
pryprypry 发表于 2018-3-3 08:54
M0支持,STM8是8位的不支持。过会开一个贴讲下STM8的状态机操作系统实现,那个更简单些,可以在github.co ...
我为我自己的行为道歉,感谢分享 坐等讲解STM8 8位机状态机编程方法。 也想学学。谢谢楼主{:smile:} followed
这个不错,感谢楼主分享。 看了一下M3 2.6k ROM,1.5k ram,也不小了。还不如用freertos,用的人多。而且成熟。
freertos只开信号量和邮箱开销也很小。 谢谢分享。对8位机感兴趣。 zsmbj 发表于 2018-3-3 10:03
看了一下M3 2.6k ROM,1.5k ram,也不小了。还不如用freertos,用的人多。而且成熟。
freertos只开信号量和 ...
那个是典型值,不是最小配置。这个系统的最小配置的大小在250Byte左右,rom占用可以压到1k以内。整个系统对freertos等其他系统的最大优势不是其体积而是其使用上的简单性,它的工程建立和配置都非常容易,而且移植也要方便,另外配置项少不容易在配置时出错。 厉害,mark下 卧槽,这个牛逼不得鸟了。谢谢楼主分享!! mark一下,学习 不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起来简单的话还是有意义的。
就像楼主说的,短平快 牛人!来混个眼熟{:lol:} 好东西啊,越来越多的开源OS出现,好福利啊 这个OS适合短平快开发。 不是有个都江堰 RTOS 么 这个看起来不错。其实在8位,32位上,论坛中的那个小小调度器,也是非常不错的
honami520 发表于 2018-3-3 12:02
不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起 ...
嗯,这个用起来还是挺简单的。OS本身就只有一个文件,路径只要配置一个即可。然后就可以直接使用了,没有那么多bug和配置项要学习 foxpro2005 发表于 2018-3-3 20:14
这个看起来不错。其实在8位,32位上,论坛中的那个小小调度器,也是非常不错的
...
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利用了处理器的硬件中断优先级来实现OS中的优先级(也即一部分任务当成了中断向量来跑)。比那个小小调度器多提供了几个宏,用起来更方便些。可以在github.com/EDI-Systems/M2A1_MuSimpron找到。
这个我还是再开个帖子讲吧 最新的中英文版的手册刚刚更新了。 能开发rtos的都是高手! 下来看下,支持楼主! 高手,支持学习! 厉害,自己写os的越来越多 高手,支持楼主 感谢分享!支持楼主! 拜读了“ MSimpron/kernel.c”。如果task1每次执行要花10ms,而task2需要每5ms执行一次,是否无法实现呢? 本帖最后由 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)来作时间控制?
javenreal 发表于 2018-3-4 15:36
拜读了“ MSimpron/kernel.c”。如果task1每次执行要花10ms,而task2需要每5ms执行一次,是否无法实现呢? ...
可以实现,具体的方法就是使用一个硬件定时器更新某个变量即可,然后在task中扫描这个变量。这个定时器还可以同时用来定期扫描数码管等等(利用中断任务的方式)。这个OS不占定时器的意思是,这个OS没有定时器也可以跑,但是如果需要定时功能的话,可以千方百计和别的功能共用一个定时器,从而不需要独占定时器。另外,很多应用也的确不需要定时器,这个时候就没必要占定时器了。 foxpro2005 发表于 2018-3-4 19:40
看了一下,与小小调度器原理是类似的, 都是以PT为原型的
1. “并且利用了处理器的硬件中断优先级来实现 ...
我的MSimpron由于多提供了那几个宏(实际上就只多这些就可以),即实现了抢占式协程。关于如何用中断实现不同优先级的协程,请看附件中的文章。
学习了,下载看看 一定要试试,支持 lz不是模拟的大神,怎么也搞起编程了? v0.0.6:更新了内存管理模组和其对应的测试向量文件。 v0.0.7:新增了对Cortex-R5的支持。 支持下,正需要短平快的开发 本帖最后由 chewy 于 2018-3-11 14:28 编辑
pryprypry 发表于 2018-3-4 01:32
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利 ...
这个8bit的系统基本上没有内容吧,while1循环里switch? 正在freeRTOS 学习中…… 高手,支持学习! chewy 发表于 2018-3-11 14:20
这个8bit的系统基本上没有内容吧,while1循环里switch?
没错,几乎就是没有内容的。这实际上就是一个基于Switch-case的跳转式状态机。事实证明这是最实用的玩意,我在ATTiny13上用过这玩意。ATTiny13只有64Byte的RAM,用这个能跑出多任务的感觉。这个系统基本上没有任何的开销。 web110 发表于 2018-3-11 22:54
正在freeRTOS 学习中……
我这个比FreeRTOS简单得多,而且中文手册也介绍了RTOS的基本知识,尤其是基本原理和性能分析方面的知识。从我这个开始学的话会容易一些,当然FreeRTOS也不错,支持的架构多。我的仅仅计划支持常见架构,不再支持有些老架构了。 本帖最后由 pryprypry 于 2018-3-15 02:23 编辑
v0.0.8:增加了内建轻量级GUI库的支持,可以轻松在2kB RAM的MCU上做出苹果级别的界面。GUI模组和内存管理的宏不定义就不启用,如果配置文件中无相应的两个配置宏那么则不启用,而且即使启用,也仅仅消耗Flash,不会消耗额外的RAM。因此不破坏系统的轻量性。 本帖最后由 pryprypry 于 2018-3-15 12:12 编辑
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外的RAM,并且如果相关的宏没定义也根本不会被编译,真正做到轻量级。图示界面甚至可以在STM32F030上做出,无需uCGUI、emWin等的内存占用和工程复杂性。
如果图挂了的话,可以到项目的github查看。 大牛,跟着学习{:victory:} pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...
效果不错,要是能来个stm32f030的入门实例那就更好了,感觉自己对任务的分配和跨任务数据的调用摸不着头脑 牛逼,跟着大神学习os 本帖最后由 lidapang 于 2018-3-15 13:12 编辑
厉害,回头再仿真器上玩一把 TonyCai 发表于 2018-3-3 16:52
不是有个都江堰 RTOS 么
已经打酱油了 厉害,试用一下 shower.xu 发表于 2018-3-14 23:13
效果不错,要是能来个stm32f030的入门实例那就更好了,感觉自己对任务的分配和跨任务数据的调用摸不着头 ...
STM32030的工程是基于STM32030F4P6的,就是最常见的那一款。其对应的例子可以在文件夹下找到。后期会出每个单片机的对应的教程,真正拉低编程门槛。 gliet_su 发表于 2018-3-15 00:13
已经打酱油了
dyjos其实还是活着的。那个OS的设计很特别,也很有意思,完全是事件驱动的,在某些场合有奇效。 pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...
GUI 不消耗额外的RAM? 那速度怎么样? 另外能有个windows下的VS 版本就好了 浮华一生 发表于 2018-3-15 19:25
GUI 不消耗额外的RAM? 那速度怎么样?
速度也还好,因为毕竟是不支持窗口裁剪等复杂功能,也仅仅专注于支持扁平化设计,因此速度还是过得去的。至少用在030上面没问题,驱动EPD屏也没问题。 pryprypry 发表于 2018-3-16 09:01
速度也还好,因为毕竟是不支持窗口裁剪等复杂功能,也仅仅专注于支持扁平化设计,因此速度还是过得去的。 ...
哦 只提供绘图算法控件信息还是用户自己保存嘛 对了, 有时间 搞个WINDOWS 下 的VS 版本撒 哈哈 可以模拟linux的意思是兼容linux的api吗?gui不消耗额外的ram是怎么实现的 pryprypry 发表于 2018-3-15 10:30
下面三张图分别是计算器界面示例、系统提供的内建控件和4xFXAA抗锯齿细节效果展示。这些东西全都不消耗额外 ...
牛掰了,还带有控件,这个实用啊,抽时间拜读下 浮华一生 发表于 2018-3-15 20:12
哦 只提供绘图算法控件信息还是用户自己保存嘛 对了, 有时间 搞个WINDOWS 下 的VS 版本撒 ...
嗯,有时间的话会搞一个示例版本,主要就是展示效果。 sanger 发表于 2018-3-15 20:35
可以模拟linux的意思是兼容linux的api吗?gui不消耗额外的ram是怎么实现的
是指在Linux上面运行这个操作系统,把Linux当成了该系统的一种底层架构。GUI不消耗额外的RAM是因为这个GUI的端口设计全部都是RESTful的,内部不保存控件的状态。实际上这种GUI的实用度反而要好,窗口管理器实际上很少用到。 顶一下,一直接RTOS都没有学成 现在有了个新网址,www.rtos.one pryprypry 发表于 2018-3-16 14:37
现在有了个新网址,www.rtos.one
为什么M0的flash占用比MSP430和M3/M4都大呢?
另外感觉要是能出一套030的学习板子实例更好,理解肯定会更深。或者只分享学习板子资料就行了 shower.xu 发表于 2018-3-16 02:48
为什么M0的flash占用比MSP430和M3/M4都大呢?
另外感觉要是能出一套030的学习板子实例更好,理解肯定会更 ...
因为m0的指令集效率比较低,有一堆不支持的指令。m3和m4就好很多了。 目前已经完成了所有的手册更新。刚刚更新了在正点原子板子上的例程,大家可以在Project文件夹下的RVMDK-STM32F767IGT6-ALIENTEK文件夹下找到。其他的正点原子和野火开发板的例子也会逐步上传。 膜拜,膜拜,有打算起个啥名字麽 名字就叫 one 名字的话就叫 one os吧,一个文件的内核,一个小时可上手,一个文档做参考,唯一的一个单文件os honami520 发表于 2018-3-3 12:02
不错。有时候想用点os。但是不熟悉的os又不敢随便用。必须要花好多时间熟悉后才敢用。楼主的这个如果使用起 ...
你这个短平快深深地伤了楼主的自尊心。 楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗 honami520 发表于 2018-3-19 23:40
楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗
新版的库正在更新,还有F7其实也是有点老的库了。大概今明两天更新到最新版本。 honami520 发表于 2018-3-19 23:40
楼主的stm32f405里面的库还是老版本的库。新版的hal库的考虑支持吗
现在对最新hal的支持已经完成了。 六七月份会发布两个重要的物联网平台技术,并且发布官方网站。敬请期待。 pryprypry 发表于 2018-3-21 11:54
现在对最新hal的支持已经完成了。
你这速度真是神速,今晚我就试试看 honami520 发表于 2018-3-21 12:40
你这速度真是神速,今晚我就试试看
嗯。明天或者后天还会发布对Cortex-R4的新支持。 Cortex-R4的支持已经完成,被支持控制器为TMS570LS0432。 不能用在51、PIC、AVR吗? 标记学习 自己写,这就厉害了; 网址打不开,是什么原因? 楼主厉害,学习了 总觉得楼主在浪费时间做事情,尽管我从心底里还是佩服你做这样的事。
当然如果我话我反过来说,楼主就应该比较开心了。
如果用着其它方面,应该能挣不少钱。哈哈 厉害,mark下 zj2003 发表于 2018-3-23 13:57
网址打不开,是什么原因?
网址打不开的话直接用这个吧
https://github.com/EDI-Systems/M5P1_MuProkaron 谢谢分享!收藏备用。 pryprypry 发表于 2018-3-4 01:32
我还有一个更简单的适合4位和8位机的OS,就是和那个调度器类似的原理,而且还可以省下一个定时器,并且利 ...
这个有专门开贴讲下吗?没找到链接,有没有实例的应用? llsenyue 发表于 2018-3-27 18:07
这个有专门开贴讲下吗?没找到链接,有没有实例的应用?
这个其实就是小小调度器的改进版本,可以在https://github.com/EDI-Systems/M2A1_MuSimpron 找到。允许使用系统的硬件优先级运行多个协程。 谢谢分享!厉害。先收藏,准备用在M0上。 第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: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
最近更新了用户手册。
手上有个国产51单片机,16K的flash 512的ram,外围功能很丰富的,现在做的功能比较蛋疼 想着要有操作系统就好了,可惜ram太小 玩不转 收藏。 学习~~ 外部的JS和Lua支持现在可用。这几个库不和系统本身打包,在另外的repo里面。