不请自来,作为一名长期使用STM32单片机进行开发的老司机,来一下这个问题。
首先、STM32是什么?什么是ARM?STM32和ARM关系是什么?
1.STM32 是基于ARM Cortex-M3和M0的单片机,是ARM的一个小子类。
2.ARM处理器是英国Acorn有限公司设计的低功耗成本的第一款RISC微处理器。全称为Advanced RISC Machine。ARM处理器本身是32位设计,但也配备16位指令集,一般来讲比等价32位代码节省达35%,却能保留32位系统的所有优势。
3.从上面的定义来看,STM32其实就是ARM的一种处理器,ARM是统称,
题主把ARM和STM32的概念有点模糊。
其次、为什么无人机不采用ARM+linux方案?
这个问题很有意思,问题出在linux身上。
我们先搞清楚linux是什么?
“Linux是一套免费使用和自由传播的类Unix操作系统,是一个基于POSIX和UNIX的多用户、多任务、支持多线程和多CPU的操作系统。它能运行主要的UNIX工具软件、应用程序和网络协议。它支持32位和64位硬件。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户网络操作系统。Linux操作系统诞生于1991 年10 月5 日(这是第一次正式向外公布时间)。Linux存在着许多不同的Linux版本,但它们都使用了Linux内核。Linux可安装在各种计算机硬件设备中,比如手机、平板电脑、路由器、视频游戏控制台、台式计算机、大型机和超级计算机。
严格来讲,Linux这个词本身只表示Linux内核,但实际上人们已经习惯了用Linux来形容整个基于Linux内核,并且使用GNU工程各种工具和数据库的操作系统。“–来源于百度词条
linux操作系统作为网络操作系统性能非常强大,并发性非常好。但是它作为无人机的方案有一个很致命的问题,那就是它的实时性很差,这由的操作系统的任务调度特性决定的。也许有人会说linux操作系统支持实时调度策略的啊,是表面看是这样的。但是真实情况是不能满足实时要求。
一个致命问题是,linux在用户态支持可抢占调度策略,而在核心态却不支持抢占式调度策略。这样运行在Linux核心态的任务(或系统调用)是不能被其它优先级更高的任务所抢占的,这样就会引起优先级逆转问题。另外,Linux操作系统的中断处理句柄是不可调度的,不能依优先级高低。
此外,我们还关心和任务响应时间相关的时钟精度,以及由于资源共享而带来的优先级逆转问题。linux中硬件时钟中断的默认时间间隔是10ms,所有的软件时钟都是靠硬件来触发的。而简单同步机制(互斥)不支持优先级继承又很可能导致优先级逆转。
而无人机要求时时刻刻在计算无人机当前的姿态,发现姿态和预定目标不一致马上进行姿态矫正,这对系统实时性要求很高。linux的调度策略不能满足无人机实时性的要求,这就是无人机不采用ARM+linux的根本原因。
其他因素
linux系统本身复杂度也是影响项目开发的一个重要因素,移植、学习、维护成本太高
STM32裸机程序程序员可以掌控调度策略,能够根据实际情况调节,灵活度更高
STM32裸机裸机编程,比linux编程复杂度低
如果你有更多观点,欢迎讨论。