C语言及单片机基础

发布时间:2023-03-25 17:00

程序与变量的存储

C语言及单片机基础_第1张图片

  • Flash:通常用于存储代码,不能轻易写数据进去(烧录程序的时候就是写数据了),可以读
  • Ram:可读可写,存储变量,写什么进去,读出来仍然是什么
  • GPIO:引脚的寄存器,数据进去有特殊的含义,可能是让引脚变为高电平、低电平。
  • CPU:程序运行的地方(爹)

他们之间是有个保姆叫:内存管理器 识别老爹的意思(命令)

它们四个之间怎么操作可以看以前的文章:编译器如何把变量写进内存(汇编)

                                             变量和指针

C语言及单片机基础_第2张图片

 因为STM32是32位单片机,决定了变量的首地址之间相差都是4个字节(32bit)

即使你的变量是只有一个字节的大小,他也是在4个字节的盒子里面,所以指针的大小是4个字节。

                                sizeof和常用关键字

const

用于修饰常量

只读的变量只放在Flash中?只读添加const会节省ram?

 当变量并不是很大的时候,const修饰的变量,如果并不是很大,会放.data段。太大的话,会放在Flash上。

.data段:存放在编译阶段(而非运行时)就能确定的数据,可读可写。也就是通常所说的静态存储区,赋了初值的全局变量和赋初值的静态变量存放在这个区域,常量也存放在这个区域: 

sizeof

测试指针p占得内存使用sizeof (p)还是sizeof (*p)

char *p;

sizeof(p)   ==>4
sizeof(*p)  ==>1

为什么sizeof(*p)是1尼,因为你读取到的数是char类型,*p已经解引用了。

volatile

确保本条指令不会因编译器的优化而省略

 C语言及单片机基础_第3张图片

 C语言及单片机基础_第4张图片

在一些情况下必须要用volatile,例如和硬件相关的都要使用!!!!

C语言及单片机基础_第5张图片

 C语言及单片机基础_第6张图片

 static

文章详解

  • 全局变量:当前文件的专属变量,不能被别的文件调用。
  • 局部变量:不会因为函数的调用而被重新刷新值,值依然是上一次的值。
  • 函数:当前文件的专属函数,不能被别的文件调用。

当main的文件中有static修饰的函数 会优先执行main文件中的函数 

 C语言及单片机基础_第7张图片

 赋值方法

C语言及单片机基础_第8张图片

extern

外部变量声明,在一个文件中调用另一个文件的变量,且值依然是内存中的值

 C语言及单片机基础_第9张图片

 下面这种会报错:

.\Objects\Template.axf: Error: L6200E: Symbol a multiply defined (by myinit.o and main.o).

 C语言及单片机基础_第10张图片

                                        struct结构体

第一种情况:int+char 

 C语言及单片机基础_第11张图片C语言及单片机基础_第12张图片C语言及单片机基础_第13张图片C语言及单片机基础_第14张图片

第二种情况:char和char数组

 C语言及单片机基础_第15张图片C语言及单片机基础_第16张图片

 第三种:int强行访问char

 C语言及单片机基础_第17张图片

                                         ​​​​​​​        指针

 存放内存(RAM)地址

 ​​​​​​​C语言及单片机基础_第18张图片

程序的执行过程,都会用到RAM中的地址!!! 

                                                链表

链表的概念

C语言及单片机基础_第19张图片

链表的插入 

C语言及单片机基础_第20张图片

链表的删除 

C语言及单片机基础_第21张图片

 

ItVuer - 免责声明 - 关于我们 - 联系我们

本网站信息来源于互联网,如有侵权请联系:561261067@qq.com

桂ICP备16001015号