文章目录[隐藏]
一、韦东山-C提高-变量和指针
1、变量和指针口诀
- 变量,能变,能读能写,一定在内存里
- 指针保存的是地址,32位机中地址为32位,指针都是4字节(一字节8位)
变量理解:
单片机内存分为两部分——FLASH(程序存储器,只读)和 RAM(内存,动态存储区,可读可写),所以变量一定存放在内存中
且变量还有如下性质:
- 具有相应的地址(定义变量后,程序运行时会在RAM中开辟一块空间)
- 不同类型不同大小(根据不同的数据类型,会开辟不同大小的空间,如 int 为 4 字节 ,char 为 1 字节)
- 地址位数相同(地址都是32位——对32位机来讲)
指针理解:
int *p;
int a = 1;
p = &a;
- 定义了一个 整型指针类型 的变量 p
- 在内存中开辟了一块空间来存储这个变量
- p变量中存放的是一个 4 字节的地址
- *p 和 p,一个是表示p中存放的地址对应的地址空间内存放的值,一个表示p这个变量所对应空间中存放的地址
2、对于 volatile 的理解
作用:
- 编译器在编译程序时,会自动进行优化,有些未使用变量会被编译器自动优化
- 对于没有使用 volatile 定义的变量,有些时候会仅在CPU进行操作,但对于内存未进行写操作,因此对于寄存器必须加上 volatile ,避免CPU只读备份,不读硬件。
3、对于 map 文件的理解
- map文件中查找到的是 全局变量、静态变量
- 掌握DSP存储器的使用和利用情况,进行存储器优化
- 更精确的使用 RAM 空间
- 找出崩溃地址
崩溃地址使用示例:https://www.cnblogs.com/yilang/p/11994448.html
4、KEIL 的调试使用
~工具栏按钮
~找到main.c
~打断点
~运行
~变量a
~Add to watch
~& 出地址
二、韦东山-C提高-sizeof 和 关键字
1、const
- 不允许修改,存放在FLASH中
- 定义一个常量
2、sizeof 在课程中的使用
- 通过sizeof 来测试 *p 占用内存
在课程这一部分,主要还是通过sizeof 来具体理解 变量和指针
3、串口调试
~view
~serial windows
~USRT 1
~运行
4、static
- 作用域在此文件内
5、extern
- 可用可不用
- 表 是 一个外部函数 / 外部变量
- 可以写在头文件内,也可以写在使用外部变量的 .c 文件内
6、作用域
- 通过 static 来限制 变量 / 函数的作用域范围
- 相同的作用域范围内重名会出现冲突
7、补充
即使 使用 static 定义的变量在 主函数之后,也不会使用同名称的全局变量。
三、韦东山-C提高-struct
1、struct
- 使用 C标准 原有类型,创建了一个新的数据类型
- 结构体不占用内存空间,定义变量后,结构体变量占用内存
- 结构体在 面向对象思想中 理解为 封装
- 结构体组合 在面向对象思想中 理解为 继承
2、内存浪费问题
- 奇地址 访问一个字节 可以
- 奇地址 访问四个字节 不可以
四、韦东山-C提高-变量赋值
1、结构体强制类型转换
wei = (struct person)a;
2、破坏内存问题
struct person{
char c;
char d;
int age;
};
struct person wei = ('A','B',40);
int *p;
p = (int *)&wei.c;
*p = 'C';
//讲课的时候,这里出现了类型警告,对于类型警告一定要
五、韦东山-C提高-通过指针赋值
1、原理
变量 -> 内存 -> 地址空间 -> 读写
六、韦东山-C提高-结构体指针_函数指针
1、结构体指针的使用
2、函数指针
七、韦东山-C提高-链表
八、韦东山-C提高-ARM架构和几条汇编指令
九、韦东山-C提高-全局变量的初始化和栈的引入
十、韦东山-C提高-局部变量
版权声明:本文为CSDN博主「直到遇见你--」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44127810/article/details/121293747
暂无评论