嵌入式开发学习路线梳理
2023-06-28 16:45:15 0 举报
AI智能生成
嵌入式开发的学习路线
作者其他创作
大纲/内容
嵌入式应用领域
工控
仪器仪表
消费电子
ioT
...
嵌入式方向
纯硬件
软件/软硬结合
不带操作系统
单片机开发
嵌入式裸机开发
带操作系统
用户态
应用层开发
内核态
内核开发
驱动开发
嵌入式相关岗位
嵌入式Linux工程师
嵌入式应用工程师
嵌入式系统工程师
嵌入式驱动工程师
嵌入式编程基础
编程语言
C语言
C语言最基础
关键字/常量/变量
数据类型
基本类型
整数值类型
整型
short
声明短整型变量
2
int
声明整型变量
4
long
声明长整型变量
4
浮点型
double
声明双精度变量
4
float
声明单精度变量
8
字符类型
char
声明字符型变量
1
构造类型
数组
声明数组
double balance[10];
现在balance是一个可用的数组,也可以容纳10个类容为double的数字
初始化数组
double balance[5] = {1000.0 , 2.0 , 4.0 , 7.0 , 50.0};
访问数组元素
double salary = balance[9]
unsigned
声明无符号类型变量
singned
声明有符号类型变量
struct
结构体
union
共同体
enum
枚举类型
指针类型
简单入门
void test02() {
int num = 100;
//取变脸的地址 用 &
//&num 代表标量num的起始地址
printf("%p\n", &num);
//需求定义一个指针变量 保存num的地址
//在定义的时候:*说明p是指针变量 而不是普通变量
int *p;
printf("sizeof(p)=%d\n", sizeof(p));
//num的地址 与p建立关系
p = #
printf("num = %d\n", num);
//使用中:*p表示取p保存的地址编号 对应空间的内容
printf("*p = %d\n", *p);
}
int main(int argc, char *argv[]) {
test02();
return 0;
}
int num = 100;
//取变脸的地址 用 &
//&num 代表标量num的起始地址
printf("%p\n", &num);
//需求定义一个指针变量 保存num的地址
//在定义的时候:*说明p是指针变量 而不是普通变量
int *p;
printf("sizeof(p)=%d\n", sizeof(p));
//num的地址 与p建立关系
p = #
printf("num = %d\n", num);
//使用中:*p表示取p保存的地址编号 对应空间的内容
printf("*p = %d\n", *p);
}
int main(int argc, char *argv[]) {
test02();
return 0;
}
空类型
void
注释
多行注释
/*注释内容*/
单行注释
//
输入/输出/格式化
运算符
表达式
语句
标识符
字母(A~Z,a~z)
数字(0~9)
下划线 _
注意
并且第一个字符必须是字母或下划线
标识符的长度最好不要超过8位
子主题
判断
if
如果表达式的结果为真,则语句1执行,否则表达式2行。
if(表达式)
语句1;
else
语句2;
语句1;
else
语句2;
switch
常用于多分支的情况,可嵌套。当 switch表达式的值并不匹配所有case标签的值时
,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条
default子句。
,这个default子句后面的语句就会执行。所以,每个switch语句中只能出现一条
default子句。
int main()
{
int day = 0;
switch(day) //星期
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("学习时间\n");
break;
default:
printf("周末休息\n");
break;
}
return 0;
}
{
int day = 0;
switch(day) //星期
{
case 1:
case 2:
case 3:
case 4:
case 5:
printf("学习时间\n");
break;
default:
printf("周末休息\n");
break;
}
return 0;
}
循环
for
用于遍历循环
int main()
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ",i);
}
return 0;
}
{
int i = 0;
for(i=1; i<=10; i++)
{
printf("%d ",i);
}
return 0;
}
do while
循环语句
子主题
int main()
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
{
int i = 10;
do
{
printf("%d\n", i);
}while(i<10);
return 0;
}
数组
结构体/共同体/枚举/位操作
函数
指针!!!
内存管理!!!
C++
C++最基础
见C语言部分
面向对象特征
抽象
类
封装
多态
容器
模板
泛型
STL
RTTI
元编程
数据结构和算法
数据结构
字符串
数组
链表
栈
列队
树
哈希
图
算法
查找
排序
操作系统
内存管理和调度
多线陈:多线程/并发/锁
I/O原理
文件管理
计算机网络原理
TCP/IP协议栈和分层
ARP协议
IP协议/ICMP协议
TCP协议/UDP协议
DNS协议/HTTP协议/HTTPS协议
单片机原理/微机原理/计组原理
计算机的基本组成
指令和运算
处理和运算
处理器架构和设计
存储系统
I/O系统
Linux操作系统
Linux系统基本使用
系统概念和特点
Linux环境安装和搭建
目录结构
基本命令和常用工具
基本网络管理
基本系统管理
基本的Shell编程
Linux平台的C/C++开发流程
编辑
Vim
Emacs
...
编译
编译套件
gcc
编译工具
make
makefile
cmake/autoole等
交叉编译工具
调试
gdb
运行
Linux系统平台编程(下文会详述)
系统控制
内存管理和使用
多任务编程
文件I/O编程
网络编程
图形化界面编程
嵌入式硬件基础
模电/数电基础
教课书上的典型电路和原理要记得
熟悉常用元器件和芯片
二极管,电容,场效应管,继电器...等等
熟悉常用仪器仪表的使用
万用表,电络铁,焊台,热风枪,示波器 ...等等
熟悉常见器件通信方式/协议/接口/总线等原理
传开口,IIC,IIS,SPI,CAN总线 ... 等等
会看基本电路原理图
会画基本的电路图和PCB板
很多集成电路场商都会提供产靠电路
会看DataSheet
会看硬件的时序图
会基本的电路仿真
常见开发工具
Linux操作系统
常见Linux命令和实用工具
Git/SVN
Shell
Vim
GCC
makefile
GDB
交叉编译工具
其他工具软件
其他编辑器
ssh终端
FTP/SFTP工具
....
嵌入式典型平台(ARM)
体系结构
概念和体系结构钢
工作模式
指令集
寻址方式
寄存器
内存管理单元
常见接口和控制器
通用编程模型
嵌入式裸机
GPIO
典型电路
相关寄存器
工作模式
中断
工作模式/中断体系
中断向量表
优先级,嵌套
中断处理流程
中断控制器
主要寄存器操作
外部中断
定时器
时钟体系和结构
关键寄存器控制
PMW定时器
看门狗定时器
实时时钟RTC
存储器
Flash
SD/TF
...
协议/接口/总线程等概念
UART
IIC
SPI
IIS
USB
CAN
LIN
TCP/IP
无线模块
蓝牙
WIFI
ZigBee
RF
传感器
温度
湿度
光敏
压力
触摸感应
红外
多轴传感器
GPS
AD转换
工作原理
参数指标
寄存器操作
显示模块
LCD
触摸屏
...
嵌入式操作系统
用户态
嵌入式开发应用开发
内核态
嵌入式系统内核开发
嵌入式系统驱动开发
嵌入式应用层开发 (Linux系统平台编程)
内存管理/使用
内存分配
内存管理
多任务编程
进程
进程概念和基础
进程控制
创建
等待
退出
...
守护进程
守护进程的编写
错误处理
进程间通信
管道通信
消息队列
信号
信号值
共享内存
socket通信
线程
线程的概念和基础
线程控制和编程
属性
创建
等待
退出
清除
同步
优先级
文件I/O编程
文件/文件描述符
文件指针/文件流
缓冲
流操作:开/闭/读/写/内容定位等
标准I/O流
标准I/O操作
非阻塞I/O
异步I/O
多路复用
网络编程
TCP/IP协议家族
Socket通行和应用
TCP编程
UDP编程
图形化界面编程
Qt库
Qt开发基础
对话框/窗口
信号与槽
组件/控件/布局/事件
绘图
文件操作
定时器
多线程
网络通信
嵌入式底层开发
可运行系统
BootLoader
Bootloader基础:概念,作用,工作流程,常见命令
Bootloader裁剪和移植
Bootloader启动流程和原理
Linux内核
linux内核源码结构/组成
linux内核配置/编译/调试/裁剪/移植
内核启动流程分析和理解
根文件系统
根文件系统构建
文件系统移植
Linux内核编程
内核重要机制/概念(基础设施)
内存寻址和管理
并发与竞态
原子操作
自旋锁
同步
互斥
信号量
内核中断
异常处理
内核定时器原理
内核同步原理
异步通知和异步I/O
阻塞和非阻塞I/O
内存寻址和管理
内存管理的基本框架和原理
段/页/区以及操作
内存映射
slab层原理和接口
内存池
进程地址空间原理
进程
进程描述符及任务结构
进程控制实践和原理
进程调度策略和算法
内核锁机制
进程间通信
内核同步原理
临界区和竞争条件
死锁原理
内核同步访问
并发与竞争
原子操作
屏障
自旋锁
读写锁
信号量
互斥体
定时器
定时器类型
普通定时器实现
高精度定时器实现
动态时钟
时钟中断处理
延迟执行
中断
中断概念/作用/类型/体系/框架
机制原理和实现
中断处理流程和架构
中断上下文
中断控制
硬/软中断
中断系统重要数据结构
文件系统
通用文件模型和接口
相关数据结构
文件系统类型
文件系统内部处理
系统调用原理和实现
网络通信
TCP/IP协议栈原理
网络分层
网络层通信
传输层通信
套接字通信
缓冲区
设备驱动
Linux驱动开发
设备驱动核心理论知识
字符设备驱动
字符设备驱动结构和框架
关键数据结构
相关调用流程
扩展操作
块设备驱动
块设备驱动基本框架
主要数据结构
块设备的处理和操作
通用块层
I/O调用程序
网络设备驱动
网络设备工作原理
网络设备驱动框架
核心数据结构和函数
收/发/处理数据
中断处理
总线设备驱动
串口设备驱动
IIC设备驱动
SPI设备去哦的那个
IIS设备驱动
PCI设备驱动
USP设备驱动
....
书本资料推荐
嵌入式编程基础
编程语言
C语言
《The programming Language》
0 条评论
下一页