首页 > 其他分享 >一文掌握Zephyr入门(含FreeRTOS对比)

一文掌握Zephyr入门(含FreeRTOS对比)

时间:2023-03-14 15:32:02浏览次数:42  
标签:入门 FreeRTOS RTOS Zephyr 文档 内存 驱动

前言

本文将介绍 Zephyr RTOS 的基础信息,讲解初步接触学习Zephyr 需要了解掌握的知识与学习路线,让大家先快速构建起对这个操作系统的认知,文中还会与传统常见的RTOS ,如FreeRTOS进行对比,帮助大家更好地理解这个RTOS的特性。

Zephyr是什么?

Zephyr最初是由Wind River公司开发的一个微内核,在2016年的时候成为Linux基金会维护的一个项目,发展至今,已经成为了一个功能齐全的嵌入式OS。平台现在支持ARM、RISC-V、X86、Xtensa等等处理器平台,拥有原生的BLE协议栈、完整的Net协议栈,包括TCP/IP与应用层协议,为嵌入式应用的开发提供了有力的支持。

Zephyr它不仅仅维护了一个RTOS内核,还维护一些编译链、libc、 IDE插件、HEL层驱动等,几乎每一个模块都有相关的文档。正是因为拥有详细的文档,Zephyr才能源源不断的吸引人来进行尝试与开发,以至于系统不断的被完善,进入开源项目的一个良性循环。

Zephyr怎么学?

有两个途径可以找到比较高品质的Zephyr学习资料,大家可以自行搜索查看。

途径一:Zephyr官方文档中心

Zephyr官方文档中心在应用开发过程中用的最多的可能是kernel、OS service以及Hardware support这三个子目录。

路径二:聆思文档中心

聆思文档中心对一些Zephyr的一些常用的一些功能进行讲解,另外还包含一些聆思CSK芯片相关的软硬件设计参考及工具的相关文档,及AI能力的使用讲解和实践。

Zephyr的内核特性

Zephyr怎么构建系统

Zephyr的构建系统主要有三个部分cmake、Kconfig、devicetree

cmake: 在前期驱动kconfig和devicetree需生成必要的头文件,后期用来生成像ninja或makefile等编译脚本

kconfig: 平台的区分以及代码的裁剪,应用开发中主要体现在驱动的开关,如下图显示,在驱动的实现里面定义了wifi的kconfig宏,用户在使用的时候可以在prj.config文件去打开这个宏,这个驱动就会被打开。

一文掌握Zephyr入门(含FreeRTOS对比)_linux

一文掌握Zephyr入门(含FreeRTOS对比)_linux_02

devicetree:配置硬件参数信息,比如像前面WIFI的模块,可以配置SPI引脚以及速率,还可以配置跟他相关的同步引脚。

一文掌握Zephyr入门(含FreeRTOS对比)_系统架构_03

Zephyr的设备驱动模型

Zephyr几乎为所有的外设驱动都提供了统一的API接口,芯片原厂基于API接口提供自己的实现,用户在使用外设的时候可以直接使用Zephyr提供的外设接口来进行应用开发。

Zephyr的设备驱动是在同一个地方统一初始化的,比如像这个SPI的驱动,它的宏函数就等效于这一段代码,代码的含义就是注册了一个函数。这个函数会在main函数前运行,运行等级为application级别。驱动的等级会比application高,等级越高就会越先执行。设备驱动一定会在main函数前初始化完毕。

一文掌握Zephyr入门(含FreeRTOS对比)_单片机_04

Zephyr与FreeRTOS线程与调度对比

Zephyr 在线程调度方面的功能更加强大、灵活,可以更好地满足不同场景下的需求。

而 FreeRTOS 则更加简单、易于使用,适合对资源需求较为简单的嵌入式应用场景


Zephyr

FreeRTOS

线程创建

支持在编译期创建

只支持在运行时创建

调度

协作式与抢占式共存,

可选且优先级可配的时 间片轮询

协作式或抢占式内核,

同等优先级时进 行时间片轮询

Zephyr 与 FreeRTOS 线程通信对比

Zephyr内存管理

Zephyr在内存管理上具备一些比起其他RTOS更加先进机制,如下

Memory Heaps:提供了基于堆的动态内存分配和释放机制

Memory Slabs:提供了预分配一定数量内存块的机制,并能够快速分配和释放内存块,避免了堆内存管理的 开销以及内存碎片的产生

Memory Blocks Allocator:提供了固定大小内存块的动态分配和释放机制,适用于需要频繁分配、释放同一大小内存块 的场景

Zephyr原生的子系统与其他服务

Zephyr拥有非常多原生且功能强大的服务与子系统,比如原声的NET协议栈、蓝牙协议栈、统一的文件系统接口、coredump机制等,这些在Zephyr官方的文档中心可以查看。

Zephyr的组件生态

越来越多的第三方组件库已经加入或者被移植进了ZephyrProject中,第三方组件管理与接入流程也日趋成熟这为开发者节省了大量常用组件的移植与适配工作.

一文掌握Zephyr入门(含FreeRTOS对比)_单片机_05

总结

Zephyr的优缺点

优点

  • 代码开源,现代化的协作流程 (有利于 bug 发现与追踪)
  • 构建系统强大(集成第三方库方便,内置很多 cmake helper 函数,比如重定 向内存段、打包二进制文件),组件管理先进(灵活配置、支持代码裁剪)
  • 内置组件丰富(软件功能多,调试方便快速),第三方开源库支持多

缺点

  •  学习曲线较陡峭

由于篇幅有限,没有发散做更深层的讲解,欢迎各位同学联系我们进行技术相关的探讨,也可以在评论区进行提问。

标签:入门,FreeRTOS,RTOS,Zephyr,文档,内存,驱动
From: https://blog.51cto.com/u_15947017/6120580

相关文章

  • 树状数组入门
    前言树状数组作为维护序列区间修改与查询的利器是每一个 “OIer” 都应该要掌握的知识点今天,我们来详细的整理一下树状数组的知识脉络目录一.树状数组简介二.树状......
  • (原创)【B4A】一步一步入门07:EditText,文本框、密码框、键盘样式、提示文本(控件篇03)
    一、前言本篇教程,我们来讲一下常用的控件:EditText(文本输入框)。本篇教程将会讲解文本框的基本使用,如:提示文本、密码文本、键盘样式等。相信看完的你,一定会有所收获!本文......
  • Canal入门
    一.Canal入门1.1Canal是什么canal[kə'næl],译意为水道/管道/沟渠,主要用途是基于MySQL数据库增量日志解析,提供增量数据订阅和消费早期阿里巴巴因为杭州和美国双......
  • 造价入门
    1.通过图集看图 ---通过软件建模 ---建模过程中--软件自动生成工程量计算方式 比如我先进行柱子的建模,再进行柱子的提亮,建设清单,柱子的定额计价 1.建模......
  • FreeRTOS 任务调度
    【FreeRTOS】05任务的调度:抢占式、协作式、时间片轮转_freertos抢占式_xiaobaibai_2021的博客-CSDN博客1、FreeRTOS的任务调度方法有抢占式、时间片轮转、协作式。2、抢......
  • [转载from jayant97]nRF9160与nRF Cloud 超详细入门攻略
    原文链接:nRF9160与nRFCloud超详细入门攻略1.产品简介1.1.nRFCloud​ nRFCloud是NordicSemiconducotr公司在AWS上搭建的IoT平台,提供设备注册(CloudProvisioning......
  • lvgl入门学习第五篇lv_conf.h文件
    lv_conf.h是一个用户级别的文件不同工程可以有不同的lv_conf.h1、lv_conf.h文件介绍包含10个板块,lv_conf.h可以再下图中位置找到,并打开。......
  • P2015 二叉苹果树 背包树形dp入门
    P2015二叉苹果树-洛谷|计算机科学教育新生态(luogu.com.cn) 背包树形dp主要是用来处理可以取若干个子节点若干个情况,来实现dp转移到父节点我们令dp[x][y][i]为......
  • 【数据结构入门】带头双向循环链表(List)详解(初始化、增、删、查、改)
    1、链表的种类:总共有8种,以带不带头,单向或者双向,循环或者不循环来组合形成。单向或者双向带头或者不带头循环或者非循环主要学习下面两种链表的功能实现无头单向非循环链表:又......
  • Vue2入门之超详细教程一-环境准备
    1、简介Vue.js(通常被简称为Vue)是一个用于构建用户界面的渐进式JavaScript框架。它被设计为易于逐步采用,因此可以逐渐应用到现有项目中,也可以作为新项目的基础。Vue具......