【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来

系列文章目录

提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
TODO:写完再整理

文章目录

  • 系列文章目录
  • 前言
  • 一、嵌入式的定义
  • 二、嵌入式硬件开发
    • 1.要求掌握的入门的能力
      • (1)基础理论能力
      • (2)基础工程能力
    • 2.嵌入式硬件开发一般工作
      • (1)AD板层设计类型(2、4、6层板子)
      • (2)通讯架构及接口协议(MODBUS\EtherCAT等等)
      • (3)BOM文档整理
      • (4)万用表示波器修BUG
      • ...
  • 三、嵌入式软件开发
    • 1.(STM32、ARM、DSP、FPGA)微控制器底层开发【实时系统、库开发】
      • 1、嵌入式调试工具的使用
      • 2、寄存器开发、库开发
        • 看正点原子、野火的开发板教程,每个片内外设都有教程,先重复造轮子
      • 3、FreeRTOS实时操作系统
        • (1)RTOS的市场
        • (2)前后台系统和实时系统的区别
        • (3)实时操作系统的两个误区
        • (4)多任务硬件软件的理解
        • (5)任务调度器的理解
        • (6)Freertos和ucosI\ucosII的对比
        • (7)自己的理解RTOS看法
          • 重点掌握
          • 一般的RTOS会提供以下全部或部分功能:
          • 其他学习资料
      • ......
    • 2.(X86、ARM)微处理器Linux底层开发【设备树开发】
      • (1)CPU硬件平台
      • (2)裸机开发【不带系统开发,学习底层原理】
      • (3)Uboot、Linux 和根文件系统移植
      • (4)嵌入式 Linux 驱动开发
        • 1)字符(外)设备驱动
        • 2)块(存储)设备驱动
        • 3)网络设备驱动
    • 3.操作系统类linux、ROS应用层sdk/app开发
      • (1)开源嵌入式处理器的使用
      • (2)linux应用层SDK、app是使用
      • (3)ROS系统应用层开发、专有嵌入式系统的SDK应用层开发
  • 四、这里介绍一下本人相关嵌入式开发项目
    • 1.本科一些莲蓬采摘机器人的省创新创业大赛、挑战杯大赛,机械设计大赛等等
    • 2.智能小车的最小系统、H桥驱动电调、无人车线性底盘硬软件开发
    • 3.伺服无刷电机研发【重点】
  • -------------->嵌入式相关其他补充
    • 工作范围
    • 操作系统中间件
    • 软件开发系统平台的搭建


前言

认知有限,望大家多多包涵,有什么问题也希望能够与大家多交流,共同成长!

本文先对**嵌入式硬软件开发介绍(个人看法)**做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章


提示:以下是本篇文章正文内容

一、嵌入式的定义

嵌入式是一个很宽泛的概念,它是一种解决问题的解决方案,【防盗标记–盒子君hzj】不狭隘的仅仅限制于ARM/Linux/wince/driver这些概念,其实FPGA,DSP,GPU等等这些都叫嵌入式,嵌入式是很多领域的底层基础
.
.

二、嵌入式硬件开发

设计产品的基础硬件单主板,包括PC、手机、摄像机、路由器、交换机、服务器、最小系统等等

1.要求掌握的入门的能力

(1)基础理论能力

(1)电路/电子理论
(2)数电/模电、信号与系统、自动控制原理【防盗标记–盒子君hzj】
(3)微机原理/单片机最小系统
.

(2)基础工程能力

掌握基本元件如电阻、电容、电感、二极管、BJT管、MOS管的种类、封装和工作原理及特性
掌握利用变压器、可调线性稳压器(或开关电源【防盗标记–盒子君hzj】)制作调压稳压源(220V降至1.5~15V可调输出)
掌握LDO和Buck、Boost型开关电源的基本原理、区别和应用场景
掌握STM32单片机编程并锻炼代码优化能力

本科参加一下恩智浦智能车、RM、和电赛,大都可以入门熟悉了~
.

2.嵌入式硬件开发一般工作

(1)AD板层设计类型(2、4、6层板子)

分数字电路和模拟电路,学精几个就好
方向很多~
(1)电源类
(2)运放和ADC(数模、模数)类
(3)射频类
(4)FPGA、STM32、DSP最小系统类
(5)通讯类
(6)隔离缓冲类
(7)逻辑运算类
(8)驱动类

以上是本人做过的板子类型,当然其他也有很多,【防盗标记–盒子君hzj】但是我这里说的是用芯片进行板层硬件设计,不是芯片内部SOC的这种IC设计

(2)通讯架构及接口协议(MODBUS\EtherCAT等等)

.

(3)BOM文档整理

BOM表就是芯片目录这种,压成本和采购用的~

(4)万用表示波器修BUG

.
.

三、嵌入式软件开发

了解操作系统的基本原理,包括windows和Linux,【防盗标记–盒子君hzj】掌握一门以上的编程语言,具备良好的软件设计开发能力,底层驱动的编写

1.(STM32、ARM、DSP、FPGA)微控制器底层开发【实时系统、库开发】

1、嵌入式调试工具的使用

(1)TTL串口调试软件【正点原子或者野火的】
(2)STlink\jlink\SWD\串口下载调试程序工具
(3)无线蓝牙
(4)万用表、数字电源、示波器等等
.
.

2、寄存器开发、库开发

看正点原子、野火的开发板教程,每个片内外设都有教程,先重复造轮子

主要是开发片内外设、片外外设实现响应的功能
.
.

3、FreeRTOS实时操作系统

(1)RTOS的市场

近些年,MCU产品性价比不断提升,尤其是32位MCU【防盗标记–盒子君hzj】,其运行主频已达百兆级甚至高达1GHz,功能越来越强,资源配置也越来越丰富,编程也越来越复杂,需要RTOS来配置管理基础资源和维护管理产品。RTOS可以应用到8位/16位/32位MCU产品上,但32位MCU产品将会是主流。MCU产品双核多核产品增多,产品功能的复杂度越来越高。而MCU与CPU产品不再是泾渭分明,异构集成将是一个新的产品发展特点。MCU产品将会沿着摩尔定律之路继续前行,会不断涌现出新的产品,RTOS的路越来越宽广。

(2)前后台系统和实时系统的区别

一般嵌入式系统分为两种:前后台系统和实时系统

操作系统一般可分为:通用操作系统(OS)和实时操作系统(RTOS)两大类。而实时操作系统(RTOS)根据其运行的处理器不同可以进一步分为:CPU RTOS和MCU RTOS两类。

Windows是面向消费者的,RTOS是面向开发者的;【防盗标记–盒子君hzj】Windows有着统一的处理器,在一台电脑上编译好的程序可以很方便地在另一台计算机上运行,RTOS使用的是不同架构的处理器或微控制器,不能跨处理器或硬件运行,需要进行相应地移植。RTOS现阶段难以像Windows一样形成大一统的格局,差异化的应用需求仍然需要差异化的RTOS。

(3)实时操作系统的两个误区

1、用了实时系统后,系统响应速度一定更快。不一定。因为实时操作系统本身引入了执行开销,所以对于小型应用来说,有RTOS的性能也许不如无操作系统的情况。【防盗标记–盒子君hzj】实时操作系统的优势最能体现在中大型系统中,当任务间存在复杂的耦合和依赖关系,并且应用程序经常要长时间等待外部资源时。

2、用实时操作系统就可以保证实时性。不一定。相对来说,使用实时系统可以改善系统的实时性。但是实时操作系统只是作为工具存在的,如果需要提供实时性保障,还需要使用实时系统理论对任务的可调度性和响应时间进行分析,才可以得到科学、系统的响应性保障。

(4)多任务硬件软件的理解

(多核心多线程)操作系统允许多个任务同时运行,【防盗标记–盒子君hzj】这个称为多任务。实际上一个处理器核心再同一时刻仅仅能处理一个任务,如果采用前后端系统就会造成任务堵塞,实时性较差

(5)任务调度器的理解

操作系统中的任务调度器的任务就是决定再某一时刻处理器核心运行那个任务,RTOS的任务调度器切换每个任务的速度非常快,这样就虚拟出一个多任务的效果,ROTS的多任务机制是虚拟的,真正的多任务机制是由硬件决定的。
任务调度器的工作方式有很多种,【防盗标记–盒子君hzj】其中unix对每个任务分配的时间是一致的,时间到了不管有没有完成任务都会堵塞进行下一个任务,单数RTOS会对每个任务需要的响应时间进行一个预测,分配足够的时间,再根据任务的优先级进行调度。

(6)Freertos和ucosI\ucosII的对比

从文件数量上,freertos的文件数量要比ucosI\ucosII小的多。但是ucos的中文学习子良比freertos丰富,上手容易,freertos的资料大都时英文的,但是开发也有官网支持文档【防盗标记–盒子君hzj】。Freertos是免费的ucoss是收费的,所以大部分开发时,厂商哦都会选择freetros,其他的实时操作系统(RTOS)大都时基于freertos进行开发的

FreeRTOS的源文件说明
(1)demo文件夹:FreeRTOS提供了很多芯片的例程,我们一直会参考这些例程,这些例程放在了改文件夹下
(2)license文件夹:关于我们用freeRTOS做产品的许可证说明
(3)Source文件夹:存放了freeRTOS的源代码
–include文件夹存放的时头文件(移植的时候需要);
–以.C后缀名结束的文件时FreeRTOS的源码文件,【防盗标记–盒子君hzj】freeRTOS就是用C语言写的文件系统,freeRTOS系统就是一个纯软件系统;
–portable文件夹里面是freeRTOS系统软件和硬件连接的桥梁,不同编译器,不同MCU硬件,桥梁是不一样的(都是要移植对应的东西)
注意学了FreeRTOS就不用学习FreeRTOS plus了

(7)自己的理解RTOS看法
重点掌握

(1)任务系列:包括任务创建、调度、删除、挂起、恢复、优先级六个方面

(2)列表和列表项系列:列表和列表项的定义、初始化、插入、删除、遍历五个方面
列表理解成普通变量、列表项理解成数组

(3)队列系列:包括队列创建、初始化、发送消息到队列、读取队列的消息
队列可以理解成“全局变量”

(4)信号量系列:包括各种信号量的创建、释放和获取
二值信号量可以理解成“中断中的标志位”
计数信号量可以理解成“计数自增变量”
互斥信号量可以理解成“带有优先级的二值信号,【防盗标记–盒子君hzj】且这个二值信号被多个任务获取”
递归互斥信号量可以理解成“任务可以多次获取的互斥信号量”

(5)事件标志组系列:包括事件标志组的创建、设置、获取
可以理解成“一个中断标志位(信号量)的集合,易于管理”

(6)任务通知系列:包括任务通知发送、任务通知获取
可以使用任务通知来代替信号量、消息队列、事件标志组等这些东西

(7)软件定时器系列:软件定时器允许设置一段时间,【防盗标记–盒子君hzj】当设置的时间到达之后就执行指定的功能函数

在start_task()中一般是创建列表(普通变量)、列表项(数组)、队列(全局变量)、信号量(中断标志位)、软件定时器任务、用户定义的任务等等

学习FreeRTOS的移植过程和任务调度的思维
.
.

一般的RTOS会提供以下全部或部分功能:

1、基于静态优先级(fixed-priority)的抢占式(preemptive)任务调度;
2、进程间通信(基于消息,消息邮箱,管道);
3、基于信号量(semaphore)的进程间同步;
4、任务的创建、暂停、删除;
5、资源访问控制(并发控制与防止互锁);
6、临界区(critical section)控制;
7、驱动程序的管理与接口;
8、MMU内存管理、内存动态申请与分配;
9、其他功能:如GUI用户界面和TCP/IP相关功能。

其他学习资料

(1)freertos的官网www.freertos.org
(2)freertos的官方指导手册(英文版)
161204_Mastering_the_FreeRTOS_Real_Time_Kernel-A_Hands-On_Tutorial_Guide

(3) freertos的官方API函数参考手册(英文版)
FreeRTOS_Reference_Manual_V9.0.0

(4) freertos正点原子的开发环境
(1)STM32F429 FreeRTOS开发手册_V1.2
(2)FreeRTOS实时内核使用指南-中文
(3)RTOS低功耗设计原理及实现_TicklessMode(FreeRTOS的实现)
(5)Cortex-M内核架构的相关知识(用于理解任务切换的过程)
(1)Cortex M3权威指南(中文)
(2)Cortex M3与M4权威指南

.
.
.

2.(X86、ARM)微处理器Linux底层开发【设备树开发】

开发功能:
(1)多线程、多进程、中断、驱动设备树开发
(2)linux系统剪裁、移植、【防盗标记–盒子君hzj】外设驱动GPIO\LED\IIC\SPI、实时补丁等

(1)CPU硬件平台

ARM架构的(从弱到强)
三星的 2440、STM32H7、I.MX6UL、树莓(xx)派、Exynos 4412、Exynos 4418…
.
X86架构的(指令集开发真的。。。。。)
英特尔、AMD
.
.

(2)裸机开发【不带系统开发,学习底层原理】

贴个图吧,具体自己去探索来得更扎实
【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来_第1张图片

(3)Uboot、Linux 和根文件系统移植

同上贴图
【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来_第2张图片

(4)嵌入式 Linux 驱动开发

1)字符(外)设备驱动

【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来_第3张图片

2)块(存储)设备驱动

【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来_第4张图片

3)网络设备驱动

【嵌入式】嵌入式硬软件开发介绍(个人看法)--从技能树中提取出来_第5张图片
.
.

3.操作系统类linux、ROS应用层sdk/app开发

(1)开源嵌入式处理器的使用

ARM架构处理器的使用:树莓派、英伟达nano、英伟达NX/Xaiver

X86架构处理器的使用:upbroad、英特尔微型计算机NUC

一般就是刷机(SD卡),然后像PC一样使用
特别的是嵌入式处理器有GPIO,重点讲讲GPIO通讯啥的,其实英伟达官方啥的会提供使用手册的

nano参考资料:
https://pypi.org/project/Jetson.GPIO/
https://www.ncnynl.com/category/Nano-basic
https://www.ncnynl.com/category/Nano-hardware/
https://www.ncnynl.com/category/Nano-software/

Nx参考资料
https://zhuanlan.zhihu.com/p/165989685
https://www.ncnynl.com/category/Xavier-basic/
https://www.ncnynl.com/category/Xavier-hardware/
https://www.ncnynl.com/category/Xavier-software/

具体看自己的文档~
.
.

(2)linux应用层SDK、app是使用

(1)上下位机的控制驱动【最好写成代理的形式】
如车底盘控制驱动、键盘的驱动等等

(2)各种传感器的驱动【根据官方和自定义硬件来写】
.
.

(3)ROS系统应用层开发、专有嵌入式系统的SDK应用层开发

【不懂就查文档,API的使用方法和ROS的学习开发差不多】
公司开发东西都是基于自己的系统,一般都有gitlab和GitHub或者文档,先看看

1)系统平台架构和功能先了解清楚
2)遵守里面的规范
3)学习开发的demo和步骤【防盗标记–盒子君hzj】
4)然后在进行试错开发
只要系统搭建的好,你就不用写很多代码就能完成自己的工作,这就是底层系统的重要性
.
.

四、这里介绍一下本人相关嵌入式开发项目

1.本科一些莲蓬采摘机器人的省创新创业大赛、挑战杯大赛,机械设计大赛等等

本科时候的比赛小打小闹,时间久远,【防盗标记–盒子君hzj】我看看能不能整理出来再更。。。

.
.

2.智能小车的最小系统、H桥驱动电调、无人车线性底盘硬软件开发

本科时候的比赛小打小闹,时间久远,我看看能不能整理出来再更。。。
.
.

3.伺服无刷电机研发【重点】

专门研究过外转子无刷电机的硬软件和控制方式,【防盗标记–盒子君hzj】内容优点多,另开一个博客排版更。。。。

毕竟做机器人控制、路径规划,执行器和机械支持是非常重要的,当然仿真、地图、定位、决策、感知也很重要。。。唉擀

-------------->嵌入式相关其他补充

工作范围

嵌入式除了硬件开发,软件实时操作系统os开发,还包括单片机传感器驱动开发和驱动连接

操作系统中间件

是嵌入式软件的一部分,大家都要用,大家都要了解,学会用好其中一种,其他的中间件原理都差不多
1、单片机的定时器等片内外设中间件
2、RTOS实时操作系统
3、ROS
4、Navos
5、cyber RT等等

软件开发系统平台的搭建

单片机有集成的开发环境keil,ros有自带的catkin make,但是一般的c和c++要自己用cmake搭建开发环境。python更先进可以允许直接执行

单片机和pc ros的开发编译环境环境是不同的
1、单片机在pc机进行集成环境的交叉编译,然后把可执行文件下载到单片机里(极飞也是这样)
2、pc的ros开发一般直接ssh远程链接到机器人的处理器,或者直接在机器人处理器上开发的!
.

.
.


你可能感兴趣的:(单片机,嵌入式硬件)