一、嵌入式开发
1.1前情提要
由于研究生生活大概率是跟着华东师范软件工程王老师做嵌入式开发了,但是自己从来没有做过嵌入式相关的东西,只做过一些linux 上的简单开发。现在大四准备从头学起,将之前的知识全部捡回来。遂想记录一下自己的学习之路,以便自己或者其他人当做后来的参考。
1.2 学习路线图
这是参考B站 up主 CodeSheep的学习规划与路线
嵌入式开发学习规划与路线
1.3 职业
- 嵌入式Linux工程师
- 嵌入式应用工程师
- 嵌入式系统工程师
- 嵌入式内核工程师
- 嵌入式驱动工程师
- ...
嵌入式是软硬件结合的产品,嵌入式开发主要分为两类。
一类是无线电专业,例如电子工程,通信工程等专业出身的人,他们主要搞硬件设计,有时需要开发一些与硬件关系最密切的最底层软件(例如BootLoader、Board Support Packge)、最初级的硬件驱动程序等。他们的优势是对硬件原理非常清楚,不足是他们更擅长定义各种硬件接口,但对复杂的软件系统力不从心(例如嵌入式操作系统原理和复杂的应用软件)。
另一类是软件、计算机专业出身的人,主要从事嵌入式操作系统和应用软件的开发。如果我们学软件的人对硬件原理和接口有较好的掌握,也完全可以编写BSP和硬件驱动程序。嵌入式硬件设计完成后,各种功能就靠软件来实现了,嵌入式设备的增值很大程度上取决于嵌入式软件,设备越智能,系统越复杂,软件的作用越关键。
但是,该领域的入门门槛较高,不仅要了解底层的软件(例如操作系统级,驱动程序级软件),对软件专业水平要求较高(嵌入式系统对软件设计的时间和空间效率要求较高),而且必须熟悉硬件的工作原理,所以很多非专业IT人员很难切入这一领域。
与企业计算等应用软件的开发人员不同,嵌入式领域人才的工作强度通常较低,收入却相对较高。从事企业应用软件的IT人员,这个用户的系统开发完成后,又要去开发下一个用户的系统,并且每个用户的需求和完成时间都必须按客户要求改变,往往疲于奔命,重复劳动。相比而言,开发嵌入式系统的公司,都有自己的产品计划,按照自己的节奏行事,所开发的产品通常是通用的,不会因为客户的不同而修改。
二、嵌入式编程基础
2.1 编程语言
2.1.1 c语言
2.1.2 c++
2.2 数据结构和算法
2.2.1 数据结构
- 字符串
- 数组
- 链表
- 堆
- 栈
- 队列
- 树
- 哈希
- 图
2.2.2 算法
- 查找
- 排序
2.3 操作系统原理
- 内存管理和调度
- 多任务:多线程/并发/锁
- I/O原理
- 文件管理
2.4 计算机网络原理
- TCP/IP协议栈和分层
- ARP协议
- IP协议/ICMP协议
- TCP协议/UDP协议
- DNS协议/HTTP协议/HTTPS协议
2.5 单片机原理/微机原理/机组
- 计算机的基本组成
- 指令和运算
- 处理器架构和设计
- 存储系统
- I/O系统
2.6 Linux操作系统
2.6.1 Linux 基本使用
- 系统概念和特点
- Linux环境安装和搭建
- 目录结构
- 基本命令和常用工具
- 基本网络管理
- List item
- 基本系统管理
- 基本的shell编程
2.6.2 Linux平台的C/C++开发流程
1.编辑
Vim
Emacs
2.编译
- 编译套件 Gcc
- 编译工具make makefile cmake/autotools
- 交叉编译工具
3.调试 gdb
4.运行
2.6.3 Linux系统平台编程
- 系统控制
- 内存管理和使用
- 多任务编程
- 文件I/O编程
- 网络编程
- 图形化界面编程
三 目前已读书籍
3.1 嵌入式Linux开发基础
伍德雁主编
这本书比较基础,比较简单,主要是让初学者对嵌入式Linux开发有一个全面的了解,各个方面没有太大的难度,适合初学者进行了解,但不适合老手进行资料的查找。