导图社区 嵌入式C语言
超详细的嵌入式C语言学习笔记思维导图来啦!内存、操作系统与数据结构、指针与数组、数据属性、指针的高级应用、函数与函数库等内容全部都浓缩在下图之中,值得收藏学习。
社区模板帮助中心,点此进入>>
互联网9大思维
安全教育的重要性
组织架构-单商户商城webAPP 思维导图。
个人日常活动安排思维导图
域控上线
西游记主要人物性格分析
17种头脑风暴法
python思维导图
css
CSS
嵌入式C语言
内存
意义
可变数据的存储
结构
哈佛结构
程序与数据是分开存储的
没用过
冯诺依曼结构
数据和程序存储在一起
stm32和51等
存储方式
以字节为单位编址
约束于硬件
管理方式
手动管理
数组
优点
定义简单
访问简单
缺点
数组类型必须一致
数组大小必须给出,不能修改
需要的内存必须连续
效率低(做数据插入,删减排序等)
结构体
定义灵活
数据内容类型可以不一样
存储可以不连续
可以设计出复杂的数据结构
效率高
定义复杂
访问相对复杂
堆
使用malloc和free管理
动态存储数据
缺点是容易操作出错
自动管理
栈
先进后出
存储的内容
局部变量
函数调用
缺点在于容易溢出
静态存储区
存储内容
静态数据
全局变量
指针与数组
定义
使用 变量存储的地址 来获取数据
指针变量的类型是用于取数据的存储结构
指针相关符号的理解
星号*作为解引用
星号*作为定义指针的级数
&取址符是获取一个变量的地址
避免野指针的使用
危害
引发段错误
未发生任何结果
引发程序连环式的错误
原因
未初始化
访问权限的限制
内存越界
如何避免
初始化成NULL
使用前进行判断是否有效指针
不再使用的也赋值成NULL
使用前一定要赋值
段错误的定义
大段错误
此地址不存在
小段错误
地址存在但访问权限受到限制
内容
数组是由定义了连续的变量
数组的名字就是数组的首地址
数组可以很容易由指针来访问
扩大变量或函数作用域
寄存器,缓存,内存的使用
传址~用于数据扩大使用范围
指针的高级应用
函数指针
关键用法
分层思想,回调函数
二维数组与指针
数组内存存储方式
子主题
typedef
区别于#define
创建新的数据类型
在编译里执行
几种比较复杂数据类型
数组管理方式
反复使用
脏内存
临时性
灵活
内存量大
手动申请与释放
数据区.data .bss
bss是用于未初始化的静态变量(包括局部静态变量)或初始化为0
data是已经初始化过的了
常量会被固定到代码段
常量区.ro .data
结构体的定义
结构体的访问
结构体的对齐原则
共用体
可用于测试大小端
大小端
大端为高地址存低位
小端为地址存高地址
枚举
名字不能重复
预处理,函数和函数库
预处理过程详解(编译原理)
函数三要素
函数定义
函数声明
递归函数
库函数
字符串
数学
数据属性
存储类型,存储在不同的区域
作用域,这个变量起作用的代码范围
生命周期,什么时候诞生,什么时候死亡
链接属性,把符号和对应的段链接起来
关键字
auto
static
register
extern
volatile
restrict
作用域
同名变量作用域小的会覆盖作用域大的
局部变量的作用域为{}里的部分
全局变量或函数的作用域跟声明有关
生命周期
栈(局部变量)函数与局部变量的生命周期等效
数据段,bss段变量是永久的
代码段和只读段是永久的
操作系统与数据结构
操作系统管理
cpu管理
内存管理
任务管理
文件管理
设备管理
状态机
有限状态机
两种类型
moore型
只与当前状态有关
mealy型与输入和当前状态有关
多线程
最常用数据结构
链表
单向链表
头节点,用于存储链表节点数等
可扩展
便于插入数据
有利于利用碎片化内存
单向连接的局限性
只能单向操作
双向链表
弥补单向链表的单向性
不足之处在于它消耗更多的内存