介绍一个入门级开源RTOS

星沉地动 2018-08-07 04:17:26
KLite是一个入门级开源RTOS。

以简洁易用为设计目标,旨在降低学习嵌入式操作系统编程入门的难度。

现在支持32位ARM Crotex-M全系列单片机。

移植和使用都比较简单, 核心代码不足1000行, 非常精简, 系统需求只要大约1.5KB ROM 和 0.5KB RAM;

支持优先级抢占, 线程同步与互斥;

适合入门者学习和研究。

更多说明和API文档见开源链接:https://gitee.com/kerndev/klite

...全文
1002 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
lr2131 2018-08-31
  • 打赏
  • 举报
回复
引用 1 楼 SupermanTm 的回复:
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定

非常同意!
lr2131 2018-08-31
  • 打赏
  • 举报
回复
已经好多年不再使用单片机的RTOS了,之前用的多的是UCOS2。
不过很多时候,都是用的自己写的OS,可以跨平台,只要能把定时器驱动起来就可以支持起来。
其实后来才知道,这个也就差不多类似于非抢占式的OS,只要代码写得够优化,逻辑清晰。用惯了它,基本都没什么问题。
根本不比用抢占式的OS差,而且我这个也很灵活,唯一比较麻烦的是,对编程能力确实有一些要求,不适合新手。至少不如UCOS2那样非常容易使用。
Acuity. 2018-08-29
  • 打赏
  • 举报
回复
RT-Thread值得你拥有。
https://blog.csdn.net/qq_20553613/article/details/80008099
xiakyxiong 2018-08-27
  • 打赏
  • 举报
回复
收藏,感谢!
SupermanTm 2018-08-26
  • 打赏
  • 举报
回复
引用 12 楼 qq446252221 的回复:
[quote=引用 8 楼 SupermanTm 的回复:]
[quote=引用 2 楼 qq446252221 的回复:]
[quote=引用 1 楼 SupermanTm 的回复:]
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定

我个人认为抢占式好一些。
一是实时性比较好,如果某个任务耗时很长的话,抢占式还可以保证其它线程得到部分CPU资源,而协作式则会饿死其它任务;
二是资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗;
三是不稳定多是由于应用层代码编写不当导致的,这方便需要编写代码的时候仔细思考;[/quote]
我坚持我的看法,如你提出的几点:

1. “协作式则会饿死其它任务”,这个显然就是编程者应该负起的责任了,你自己的程序自己最清楚,你知道什么时候该归还控制权。

2. “资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗”,这显然是大不一样的,原因很简单,协作式多任务,就各个任务执行的上下文里是不会被打断的,那么程序使用的很多临时空间是根本不需要考虑和别人共享,在任务告一段落时,你知道应该保留那些(这些可以在整体上协调),余下的直接就归还了;而抢占式多任务,任务切换时,OS是无法知道那个任务工作到什么阶段那些能释放那些不能(也可能在临时开销最大的时候抢占了任务),只能把所有的都先保存,这显然增大了资源开销。其实这个从当年Win95取代Win3.1的时候就很看出问题了,Win3.1在4M内存都可以工作得很好,8M内存已经算得上十分流畅了(包括运行当时的Office6.0),而Win95没16M内存根本就活不下去的。

3. 这个不算问题,因为编程者的错误理论上不管什么OS都要完蛋的。

其实可以这么理解,单片机的中断系统就是个很实实在在的“抢占式多任务”系统,但从80年代过来的人都明白,中断服务程序是必须很精简的,很多时候就是读取采样数据然后设个标志,因为这样的系统才会稳定。[/quote]

协作式多任务不会被其它任务打断,这是协作式多任务最大的特色,既是优点也是缺点;
抢占式多任务则刚好相反,某些场合下,的确是需要任务被抢占的,任务被打断也一样既可以是优点也可以是缺点;
两种系统各有优缺点,应该根据不同的应用场景来理性选择使用何种系统。
我认为现在的主流多任务系统还是抢占式的,因为它能适应的应用场合更多一些。

我相信你一定在单片机系统开发上有着非常丰富的经验,只要能顺利完成手上的项目就是最好的结果。

针对你的第2条观点,我也多说几句:
任务内的临时变量都是线程安全的,不用考虑共享的问题;全局变量才需要考虑资源共享的问题。
协作式多任务不会被其它任务打断,但是它会被中断打断,仍然会发生上下文保存。
Win95比Win3.1慢,而且内存消耗高,主要原因并不是因为Win95使用了抢占式系统的原因,而是因为Win3.1运行在实模式,可以对硬件完全访问,而Win95运行在X86的保护模式,应用程序在用户态运行,调用系统API必须要切换到内核态,从而造成很多性能损失。

[/quote]
有见地,强烈推荐这个,并与先生共勉
星沉地动 2018-08-24
  • 打赏
  • 举报
回复
引用 8 楼 SupermanTm 的回复:
[quote=引用 2 楼 qq446252221 的回复:]
[quote=引用 1 楼 SupermanTm 的回复:]
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定

我个人认为抢占式好一些。
一是实时性比较好,如果某个任务耗时很长的话,抢占式还可以保证其它线程得到部分CPU资源,而协作式则会饿死其它任务;
二是资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗;
三是不稳定多是由于应用层代码编写不当导致的,这方便需要编写代码的时候仔细思考;[/quote]
我坚持我的看法,如你提出的几点:

1. “协作式则会饿死其它任务”,这个显然就是编程者应该负起的责任了,你自己的程序自己最清楚,你知道什么时候该归还控制权。

2. “资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗”,这显然是大不一样的,原因很简单,协作式多任务,就各个任务执行的上下文里是不会被打断的,那么程序使用的很多临时空间是根本不需要考虑和别人共享,在任务告一段落时,你知道应该保留那些(这些可以在整体上协调),余下的直接就归还了;而抢占式多任务,任务切换时,OS是无法知道那个任务工作到什么阶段那些能释放那些不能(也可能在临时开销最大的时候抢占了任务),只能把所有的都先保存,这显然增大了资源开销。其实这个从当年Win95取代Win3.1的时候就很看出问题了,Win3.1在4M内存都可以工作得很好,8M内存已经算得上十分流畅了(包括运行当时的Office6.0),而Win95没16M内存根本就活不下去的。

3. 这个不算问题,因为编程者的错误理论上不管什么OS都要完蛋的。

其实可以这么理解,单片机的中断系统就是个很实实在在的“抢占式多任务”系统,但从80年代过来的人都明白,中断服务程序是必须很精简的,很多时候就是读取采样数据然后设个标志,因为这样的系统才会稳定。[/quote]

协作式多任务不会被其它任务打断,这是协作式多任务最大的特色,既是优点也是缺点;
抢占式多任务则刚好相反,某些场合下,的确是需要任务被抢占的,任务被打断也一样既可以是优点也可以是缺点;
两种系统各有优缺点,应该根据不同的应用场景来理性选择使用何种系统。
我认为现在的主流多任务系统还是抢占式的,因为它能适应的应用场合更多一些。

我相信你一定在单片机系统开发上有着非常丰富的经验,只要能顺利完成手上的项目就是最好的结果。

针对你的第2条观点,我也多说几句:
任务内的临时变量都是线程安全的,不用考虑共享的问题;全局变量才需要考虑资源共享的问题。
协作式多任务不会被其它任务打断,但是它会被中断打断,仍然会发生上下文保存。
Win95比Win3.1慢,而且内存消耗高,主要原因并不是因为Win95使用了抢占式系统的原因,而是因为Win3.1运行在实模式,可以对硬件完全访问,而Win95运行在X86的保护模式,应用程序在用户态运行,调用系统API必须要切换到内核态,从而造成很多性能损失。

raax 2018-08-22
  • 打赏
  • 举报
回复
感谢分享。。
Jacky_Lu 2018-08-22
  • 打赏
  • 举报
回复
ucos 可以将 复杂的要求 变成一个个 简单的任务
习惯了 ucos 就不想裸奔
SupermanTm 2018-08-18
  • 打赏
  • 举报
回复
引用 2 楼 qq446252221 的回复:
[quote=引用 1 楼 SupermanTm 的回复:]
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定

我个人认为抢占式好一些。
一是实时性比较好,如果某个任务耗时很长的话,抢占式还可以保证其它线程得到部分CPU资源,而协作式则会饿死其它任务;
二是资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗;
三是不稳定多是由于应用层代码编写不当导致的,这方便需要编写代码的时候仔细思考;[/quote]
我坚持我的看法,如你提出的几点:

1. “协作式则会饿死其它任务”,这个显然就是编程者应该负起的责任了,你自己的程序自己最清楚,你知道什么时候该归还控制权。

2. “资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗”,这显然是大不一样的,原因很简单,协作式多任务,就各个任务执行的上下文里是不会被打断的,那么程序使用的很多临时空间是根本不需要考虑和别人共享,在任务告一段落时,你知道应该保留那些(这些可以在整体上协调),余下的直接就归还了;而抢占式多任务,任务切换时,OS是无法知道那个任务工作到什么阶段那些能释放那些不能(也可能在临时开销最大的时候抢占了任务),只能把所有的都先保存,这显然增大了资源开销。其实这个从当年Win95取代Win3.1的时候就很看出问题了,Win3.1在4M内存都可以工作得很好,8M内存已经算得上十分流畅了(包括运行当时的Office6.0),而Win95没16M内存根本就活不下去的。

3. 这个不算问题,因为编程者的错误理论上不管什么OS都要完蛋的。

其实可以这么理解,单片机的中断系统就是个很实实在在的“抢占式多任务”系统,但从80年代过来的人都明白,中断服务程序是必须很精简的,很多时候就是读取采样数据然后设个标志,因为这样的系统才会稳定。
Jacky_Lu 2018-08-14
  • 打赏
  • 举报
回复
ucos 推荐

稳定 及时
worldy 2018-08-14
  • 打赏
  • 举报
回复
单片机系统,实际上不需要什么OS
星沉地动 2018-08-13
  • 打赏
  • 举报
回复
引用 3 楼 FILLMOREad 的回复:
个人觉得RT-Thread也不错阿,而且文档资料也很丰富https://www.rt-thread.org/document/site/

还有uC/OS,RTX,freeRTOS都很不错。
RTThreadIoTOS 2018-08-10
  • 打赏
  • 举报
回复
个人觉得RT-Thread也不错阿,而且文档资料也很丰富https://www.rt-thread.org/document/site/
星沉地动 2018-08-08
  • 打赏
  • 举报
回复
引用 1 楼 SupermanTm 的回复:
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定

我个人认为抢占式好一些。
一是实时性比较好,如果某个任务耗时很长的话,抢占式还可以保证其它线程得到部分CPU资源,而协作式则会饿死其它任务;
二是资源耗用和协作式几乎是一样的,协作式也有任务栈的内存消耗;
三是不稳定多是由于应用层代码编写不当导致的,这方便需要编写代码的时候仔细思考;
SupermanTm 2018-08-07
  • 打赏
  • 举报
回复
觉得在嵌入式系统最好还是用协作多任务系统,抢占式的资源耗用大,而且也会导致不稳定
JAVA学习要点 一、关于Java 1、Java的三种体系: J2SE 用于桌面开发,低端商务开发(Java to Standard Edition) ; J2ME 用于移动电话、电子消费品、嵌入式开发(Java to Micro Edition) ; J2EE 企业级解决方案的开发,基于WEB的开发等,(Java to Enterprise Edition) ; 2、Java的特点: 序号 语言角度 学习角度 1 比C++简单,放弃了对指针的使用; 入门迅速,容易学; 2 目前最好的网络编程语言; 编写更少、更好的代码; 3 开放式先进的技术,可移植性强; 更快的开发程序 4 完全的OO(面向对象,单根结构) 的跨平台语言; 用纯Java编写的程序可以避免平台相关性; 5 分布式开发,支持多线程,可靠安全健壮; 一次编写,处处运行,可以更容易的发布软件; 3、主要的开源网站: ①www.Java.net ②www.apache.org ③www.sourceforge.net ④www.theserverside.com ⑤www.javaworld.com ⑥ www.chinalab.com 4、其他技术问题: 序号 特征 1 目前国内比较流行的技术组合:spring(www.springframework.com) + hibernate技术,还有webservice +XML技术; 2 J2EE的相关技术:EJB,SEVILET,JSP等; 3 源文件(*.java) --------->类文件(*.class) --------->java虚拟机(JVM) 编译器 解释器 4 应用程序层 Java应用程序 Java平台层 Java虚拟机 操作系统层 UNIX WINDOWS RTOS 硬件层 SPARC X86 MIPSPPC 二、面向对象的特征 序号 特征 1 面向对象的三个原则 封装性 封装的基本单元是类(class),类是一个抽象的逻辑结构,而类的对象是一个真实的物理实体;类的目的是封装复杂性,在类内部存在隐藏实现复杂性机制; 封装(encapsulation) 的两个好处: 模块化:可以独立于其他对象的源代码进行编写和维护,可以很容易的将对象在系统中传递; 隐藏信息:其他对象可以通过本对象的一个公共接口进行通信而不影响其他对象; 继承性 继承是一个对象获得另一个对象的属性的过程,继承机制是一个对象成为一个更具通用类的一个特定实例成为可能,避免了代码的重复编写; 多态性 (重载overload,方法名相同、参数的个数不同、参数的类型不同、返回的类型不同和覆盖override) ;多态性就是“一种接口,多种方法”,可以为一组相关的动作设计一个通用的接口,其实类的函数的重载就是一种多态的体现; 4 引入抽象编程的思想; 类的封装就是一种抽象思想
Pandax是Go语言开源的企业级低代码物联网平台开发框架,基于go-restful+Vue3.0+TypeScript+vite3+element-Plus的前后端分离开发。支持设备管控,规则链,云组态,可视化大屏,报表设计器,表单设计器,代码生成器,监控视频接入等功….zip所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用!有问题请及时沟通交流。 基于STM32、ESP8266、PHP、QT、应用软件开发、系统软件开发、移动应用开发、网站开发C++、Java、python、web、C#、单片机、EDA、proteus、RTOS、包括计算机硬件、服务器、网络设备、存储设备、移动设备、LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等、数据集、大数据分析、人工智能、机器学习等各种项目 项目具有较高的学习借鉴价值,也适用于小白学习入门进阶。当然也可作为毕设项目、课程设计、大作业、初期项目立项演示等。如果基础还行,或者热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。欢迎下载,沟通交流,互相学习,共同进步!

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧