嵌入式知识体系
2022-05-20 00:17:13 46 举报
AI智能生成
嵌入式开发知识点汇总
作者其他创作
大纲/内容
IO(Linux)
标准IO
库函数基于文件IO实现
比文件IO多了一个流的实现
不能操作设备
文件IO
是系统调用
Linux对设备(包括硬盘)的操作提供一个统一的接口
主要操作是open, close, read, write等
进程、线程(Linux)
进程
进程间拥有独立私有的地址空间
进程间通信
进程间通信需要借助一些手段
共享内存
消息队列
管道
信号量
...
通信的一些问题
同步
使用信号量
互斥
..
线程
系统不提供线程,是库函数实现
通信方式
在同一个进程的不同线程,可以直接通信
区别
进程是拥有资源最小单位,线程不拥有资源
线程是CPU调度的最小单位
嵌入式
嵌入式的概念
硬件基础
基本的数电基础
电路原理图
ARM架构
ARM架构芯片基本结构
ARM汇编
ARM异常和中断
GPIO编程
通信
串口
I2C总线
SPI总线
PWM
ADC/DAC
系统移植
操作系统的启动过程
SOC芯片内部的一个ram
执行uboot
汇编
为C准备运行环境
跳转到main
C
一些寄存器初始化
为内核传递参数
启动内核
内核启动
汇编
搭建C运行环境
跳转到main
C
内核核心模块的一些初始化
挂载设备树
挂载根文件系统
...
uboot移植
内核移植
Makefile适配
config修改/menuconfig 裁剪内核模块
根文件系统移植
根文件系统的制作,busybox
设备树移植
内核驱动模块开发
作用
向下操作硬件,向上(内核)提供接口
字符设备驱动框架
三要素
module_init
module_exit
module_license
设备
设备存在方式
大多数以设备文件的形式存在
网络设备不是以文件形式存在
创建方式
自动创建
手动创建
设备模型
硬编码模型
总线式设备模型
作用:设备和驱动分离
方式
核心层维护了一些数据结构,存储驱动和设备信息
插入驱动模块或者设备模块的时候,核心层进行了一个匹配的过程
platform总线
I2C总线
input子系统
设备树
设备树的内容
外设的地址信息
设备树的使用
client设备模块
driver直接进行设备树匹配设备
IO模型
阻塞
非阻塞
IO多路复用
poll机制
应用层
调用select检测
select, poll, epoll
调用驱动层函数,向应用层提供接口
驱动层
poll_wait函数轮询fd,回调函数层层通知到应用层
异步通知
中断与时钟
时钟,定时器
callback
中断
中断处理函数
异常上下文
异常上下文同步机制注意要点
上下文上半部,下半部机制
内存管理
段式、页式、段页式
内核学习思想:面向对象
C语言
C语言基础
关键字
static
延迟变量或函数的声明周期,同时限制其作用域
extern
外部寻找这个变量的声明
const
指明变量不可修改,声明时离哪个近,哪个不能变
volatile
警告编译器编译的指令去内存中取数据,不要优化成直接读取cpu内部的寄存器
typedef
对基本类型的别名,不能用宏定义,要用typedef
sizeof
注意sizeof是一个关键字
数据类型
基本数据类型
...
复杂数据类型
结构体
内存对齐
设计结构体时注意内存4字节对齐
attribute机制
联合体
枚举
数组和指针
数组和指针的异同
函数
函数三要素:返回类型,参数,函数体
函数指针
本质是一个指针,指针指向的是一个函数的地址
回调函数
需要函数指针的支持
递归
C语言高级
内存管理
堆栈
动态内存
用完注意释放,防止内存泄露
释放后注意置NULL,防止野指针
预处理相关
#define 宏定义
#if, #ifdef, #ifndef等条件编译
编译原理
C语言执行环境
初始化(一段汇编)
异常向量表
堆栈空间
...
跳转到main
编译过程
预处理
编译
汇编
链接
交叉编译器
交叉编译是指编译目标与编译环境处于不同的处理器架构等环境
C工程
库的制作和使用
动态库
静态库
gdb调试
Makefile项目管理
数据结构与算法
数据结构
线性表
链式
顺序
队列
是一种线性表,操作受限的数据结构
栈
与队列同理
二叉树
主要利用递归去创建和遍历树
图
哈希表
算法
查找
...
排序
插入排序
直接插入排序
交换排序
冒泡排序
快速排序
选择排序
直接选择排序
网络
网络模型
OSI模型
TCP/IP
相关基础
套接字
IP地址
端口
字节序
子网掩码
网关
网络IO
阻塞、非阻塞
IO多路复用
点对点
广播,多播
服务器模型
多线程、多进程并发
多路复用
select
poll
epoll
udp/tcp
0 条评论
下一页