打印
[应用方案]

单片机就那点资源,为啥还要用RTOS?

[复制链接]
443|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zhamatu|  楼主 | 2020-8-25 16:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
对于搞单片机的特别用8051系列工程师来说,谈到单片机的RTOS,很多时候会问一句:“为什么要用RTOS?单片机就这一点资源,使用RTOS能保证效率吗?”

对于这个问题,我会反问:“你用单片机的目的是什么?是为了用单片机的C编程,单片机的汇编编程甚至于用单片机的二进制指令编程?”上个世纪80年代,工程师用二进制指令给Z80编程,现在还有谁在用?现在还有人死抱着汇编不放,但越来越多的人工程师使用C编程(我起初也是使用汇编的),为什么?因为我们的目的是在有限的时间甚至是不充足的时间内把项目保质保量的完成!使用什么工具和方法是次要的(如果你的项目以成本放在第一位,则另当别论,这时,也是要考虑开发时间的)。时间就是金钱啊,一个产品在单片机上增加些许成本是可以接受的。况且,使用8051系列单片机时,单片机资源也常有富余,CPU一般情况也只是空转,这就为它使用RTOS创造了条件。

使用特权

评论回复

相关帖子

沙发
zhamatu|  楼主 | 2020-8-25 16:59 | 只看该作者
那么,使用RTOS的好处呢?我举一个例子吧。假设我们编一个串行通讯程序,通讯协议如下:

数据包长度为NBYTE,起始字节为STARTBYTE1,STARTBYTE2,最后一个字节为检验和,中间字节不可能出现连续出现STARTBYTE1,STARTBYTE2。
第一种方法,在中断中处理协议:
第二种方法,使用队列中断函数:主程序不断调用的函数:
第三种方法,使用RTOS中断函数:


使用特权

评论回复
板凳
zhamatu|  楼主 | 2020-8-25 17:00 | 只看该作者
以下为这几种方法的比较:

可读性和编程容易性方面,第三钟方法最好(如果允许使用goto语句,程序更加简单易读),第二种次之(因为要编队列程序),第一种最差。如果协议更加复杂,这方面更加明显。程序简单易读,自然出错机会小了。

RAM占用方面,第三种方法较少,第二种最多(因为队列占用大量空间),第一种最少。

中断执行时间方面,第三种方法最长,第二种最短,第一种较长。

从功能方面,第三种方法最强,它还可以进行超时处理(虽然例子程序没有),其它方法均不行。

如果数据来的太快,命令处理程序来不及处理,三种方法处理方式不太一样,第一种和第三种方法类似:丢弃以前数据,第二种则是丢弃后到的数据。而且,第二种方法必须等命令处理程序完成后才处理下一个数据包,而第一种和第三种方只需命令处理程序将数据收取后就可处理下一个数据包。也就是说,第一种和第三种与命令处理程序并行处理,第二种方法为串行处理。

使用特权

评论回复
地板
zhamatu|  楼主 | 2020-8-25 17:00 | 只看该作者
现在,一般情况下,开发的效率第一,执行的效率(包括执行时间和资源占用)第二。在这种情况下,降低些许效率换取开发的效率的较大提高,何乐而不为?何况,单个模块的执行的效率高不等于整个程序执行效率高。例如,如果程序需要等待一段时间,一般用程序延时或定时器延时。无论何种方法,CPU不再处理其它工作,效率很低。而用RTOS,等待的时候CPU可以处理其它工作,效率得到提高。

使用特权

评论回复
5
单片小菜| | 2020-9-1 11:51 | 只看该作者
主要是考虑开发的问题,如果对于RTOS比较熟悉的工程师,那么上手任何一款单片机都会很快的。这样就不会过度的依赖于底层架构。

使用特权

评论回复
6
ayb_ice| | 2020-9-2 15:19 | 只看该作者
MCU还真没必要使用RTOS,

使用特权

评论回复
7
看别人照片| | 2020-9-6 07:54 | 只看该作者
单片机还真的没有必要用RTOS,我不明白为什么那么多人追求RTOS?

使用特权

评论回复
8
weifeng90| | 2020-9-18 19:07 | 只看该作者
用不用RTOS得看你的应用,比如你跑以太网,用RTOS就会更好处理些。

使用特权

评论回复
9
guijial511| | 2020-9-18 19:20 | 只看该作者
有利有弊

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

63

主题

504

帖子

1

粉丝