RTOS基础:韦东山C语言加强笔记——关键字和sizeof

问题1:

只读的常量大部分情况会放在flash里,有时编译器为了提高速度会把他放在RAM里面,只读的常量常常在前面使用const修饰。

const:保证常量不能够修改

volatile:易变的,加上之后防止编译器优化

由下图可知,占据空间小的常量(a,D,b)放在了RAM中,占据空间大(C)的常量C没有放在RAM中

修饰词volatile不加的话也不会放在RAM中

volatile  const  int a = 0X12345678;
volatile  const  int D[1] ;
volatile  const  int C[512] ;
 char b;

int main()
{
	b=2;

	 while(1)
	{
		
	}
}

RTOS基础:韦东山C语言加强笔记——关键字和sizeof_第1张图片

问题2:

指针占据的字节空间一定是4(对于32位处理器来说)

int main()
{
	b=0;
	SysTick_Init(72);
	NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); 
	USART3_Init (9600);

	printf("sizeof(int)=%d,sizeof(char)=%d\r\n",sizeof(int),sizeof(char));
	printf("sizeof(int *)=%d,sizeof(char *)=%d\r\n",sizeof(int *),sizeof(char *));
	 while(1)
	{
		
	}
}

RTOS基础:韦东山C语言加强笔记——关键字和sizeof_第2张图片

关键字:

1.volatile:下列程序如果没有第一句话,程序是这样执行的:

i首先是一个变量,变量一定存在内存里面,CPU从内存里面读i到CPU里面,之后的++cpu只会在CPU里面加,加的结果不会写到内存里面改变i的值。

如果有第一句话,程序是这样执行的:

CPU从内存里面读i到CPU里面,在CPU里面++之后,将数据重新写到内存里面,改变i的值

注意:一般来讲,变量不会使用加volatile的办法,但是下面这个情况除外

读硬件寄存器的值的时候,要用volatile,防止CPU将数据备份到CPU,从而使得之后每次读到的数据都一样。

volatile int i;
for(i=0;i<10;i++);

2.const 目的是为了不让其他人改变某个常量的值,如

const  int a = 0X12345678;
int main(void)
{
    a=1;
    while(1)
    {

    }
}

RTOS基础:韦东山C语言加强笔记——关键字和sizeof_第3张图片

3.static 静态的

第一句话作用域为整个文件

第二句话作用域为当前文件

注意:一个文件首先使用自己有的变量,没有的话才会使用全局的

int i;
static int i;

4.extern

a.c文件如果要使用b.c文件的变量c的时候,有以下两种方法。推荐第一种

1.

#include “b.h”
在b.h里面有这样一句话
extern int c;

2.

在a.c文件有这样一句话
extern int c;

5.-weak

该关键词修饰函数的时候,意思是该函数被弱化,如果用户重新定义了这个函数,使用的时候会调用用户定义的函数,否则,调用被弱化的函数。

再加一点

a=1;是执行语句

extern int a;是声明语句,告诉编译器a是什么

你可能感兴趣的:(嵌入式STM32,c语言,c++,开发语言)