无人机操作系统

主流飞控的嵌入式实时内核依据软件架构、接口标准、兼容性等划分为两大类:类Unix如NuttX等,微内核类如FreeRTOS和uCOSii等。

实时主要是指具备高优先级任务抢占低优先级任务的能力,调度延迟以系统时钟量级来计。

类Unix、微核本质是调度器,由一些线性数据结构实现对任务线程的管理。而ROS本质是多进程Socket通信中间件。

类Unix操作系统

PC端Unix操作系统启动之后呈现出进程树和文件系统树,进程树表达所有进程之间都具有亲缘关系,而文件系统树表达文件系统路径之间的挂载关系。

NuttX是类Unix嵌入式实时操作系统,因为处理器架构不同,又限于资源压力,相比于Linux,它对机制实现做了一些简化。NuttX支持8bit到64bit微处理器环境,支持POSIX/ANSI标准的任务控制、命名管道、计数信号量、信号、互斥量以及文件系统等机制,下面是NuttX架构图

图片

NuttX支持用户线程和内核线程,而不具有Linux意义下的进程概念。取而代之的是NuttX线程组,包括一个主任务线程和由主线程创建的pthreads,线程组线程彼此共享资源如环境变量、文件描述符、文件流、sockets等。

NuttX上有task的概念,task是一种特殊的pthread,和pthread资源共享程度相比,task有一定独立度。对于线程/任务控制,NuttX提供了VxWorks与POSIX风格的API,实现最大程度兼容性。对于内核线程,他们相比于用户态有内核资源访问权限。

NuttX按照优先级调度,高优任务在阻塞之前独占CPU,同优先级任务按先来先调度顺序执行,NuttX任务或线程可以通过选项配置round-robin或sporadic方式调度。

除了线程与任务之外,NuttX还有一种任务执行方案,work queue。

work queue是一系列需要执行的工作加入到队列中,由一些线程来消费执行。NuttX支持三种类型work queue:

(1)高优内核work queue

一般用于处理中断句柄中的延迟任务,也可用于驱动底层处理工作,因为这些任务通常是高优快速运行的;

(2)低优内核work queue

低优先级工作队列更适合于处理面向应用层的工作,比如文件系统清理,内存垃圾回收,异步IO操作等;

(3)用户模式work queue

面向应用层,但是访问内核资源需要系统调用增加开销,用户自行结合实际情况选取。

在任务同步、通信,资源互斥保护方面,NuttX支持命名管道,计数信号量,信号,共享内存等。父子关系的线程或任务之间可以用waitpid等同步,非父子关系可以用其他如命名管道等方式做同步,PX4中的uORB就是基于命名管道实现的,命名管道支持POSIX标准文件系统操作。

NuttX接口上对外暴露Open、Close、Read、Write、Ioctl以及Poll,如设备驱动,命名管道。

NuttX伪根文件系统是全内存的,其他或真实文件系统可以挂载到根下。

NuttX设备驱动包括字符设备驱动,如常见串口驱动,模数驱动,PWM驱动,CAN驱动,正交编码器,定时器驱动,RTC驱动,FOC(Field Oriented Control)控制交流电机驱动等。除了最常见的字符设备驱动之外,还有以块为单位读写访问的字符设备驱动以及一些特殊设备驱动:SYSLOG,RAM LOG等。PX4中传感器驱动是对字符设备的进一步开发,放在PX4-Autopilot\src\drivers路径中。

微内核

与类Unix相比,微核的调度、通信等机制都是独立实现,不遵守接口标准,因此更轻量。相比于裸机编程,使用微内核,业务被模块化,架构更清楚,开发者对调度和通信的实现无需过多关注。微内核代表产品包括FreeRTOS、uCOSii,以及国产RT-thread,以FreeRTOS为例介绍。

FreeRTOS支持消息队列,用于任务间通信,本质是一段对各个任务可见的共享内存。也支持二值信号量(或互斥信号量)做资源互斥保护以及多值信号量做同步。

对中断的响应和处理也是嵌入式编程需要关注的一个特性,在FreeRTOS中,中断事件可以与常规task进行通信和同步。此外,微核支持临界区来关闭调度和中断,临界区逻辑需要尽可能短小,以保证实时性。

内存管理方面,与NuttX一样,对于没有MMU的STM32F4处理器, TCB(Task Control Block)与各自的栈链表形式保存在扁平内存中。

对于类Unix和微核,没有明显程序运行效率上差别。

类Unix操作系统遵守协议标准,对Linux特性熟悉的可以很容易上手开发,同时可以使用KConfig剪裁配置系统功能;

微核优势在于轻量级,系统代码占用几K空间,比较受到国内MCU开发者青睐。

欢迎关注公众号“我想我思”

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值