RT-Thread学习笔记四——rt-thread中的c语言

目录

修饰符

tatic:

volatile:

实际使用:

关键字

1. typedef

2. static 

2.1 修饰局部变量

2.2修饰全局变量/函数

结构体

链表


修饰符

static修饰符:声明某一类型变量的唯一性。

volatile修饰符:声明某一变量是可变的。声明变量的一致性。

操作系统中全局变量的声明意味着这一全局变量保存在主存区,所有工作区工作时将从主存区拷贝一份到直接工作区再进行工作,。

tatic:

tatic意味着将定义的全局变量声明为唯一的,不可变的,不可被下面的程序改变。仅仅可以保证主存同步。tatic不能保证工作区与主存区变量值的一致性;除非变量的值是不可变的,即再加上final的修饰符,否则static声明的变量,不是线程安全的。

volatile:

volatile则声明为这一变量在所有工作区都是一致的,是可变的,当要求使用volatile 声明的变量的值的时候,系统总是重新从它所在的内存读取数据,即使它前面的指令刚刚从该处读取过数据。而且读取的数据立刻被保存。既可以保证主存同步,也可以保证线程间互斥。

实际使用:

volatile适用于容易出错的数据来源,可以将volatile定义的变量保存在一个变量中,再次读取将两者进行比较,若相同则说明数据是正常的,所以说volatile可以保证对特殊地址的稳定访问。

关键字

1. typedef

此关键字为用户自定义一个类型名字,即类型重命名,使用如下

typedef int zheng;
zheng a = 10;

作用为将整型int重命名为zheng,再定义一个类型为zheng的变量a为10.

2. static 

此关键字用于修饰局部变量,全局变量以及函数,将所修饰的变为静态。

2.1 修饰局部变量

int main(){
static int a=10;
int b=15

a++;
b++;

printf("%d\n",a);
printf("%d\n",b);
}

a变量被static所修饰的静态局部变量,b是局部变量,则当函数运行一次后, a再次进入函数时会取上次退出函数的值,而b则会重新加载。则结果为b一直为15,而a则从10开始依次加1。

static修饰后局部变量会存放到静态区,不会在临时区被系统释放,生命周期会延迟到整个程序结束。

2.2修饰全局变量/函数

static int a=10;

void tset(i,j){
   rrturn i+j;
}
static test(i,j);

修饰全局变量和函数后,则此全局变量和函数变为静态全局变量和静态函数,失去其外部链接性,改为内部连接性,在变量和函数定义的文件中可以正常调用和使用,无法被外部文件调用所修饰的变量和函数。

结构体

结构体为将多个不同类型的数据保存到一起的方式,具体使用代码实现如下

struct test1{
    int number
    char name[10];
    float resalt ;
}

printf("%s,%d",test1.number,test1.name)

需要使用结构体中某些数值时,则使用结构体名称.数值名称来调用该数据。 

链表

链表其实就是逻辑上连续但物理上不连续的数组,分为无向链表,单向链表等,此处我用到的是单向链表。

static void hook_of_scheduler(struct rt_thread* from, struct rt_thread* to)
{
    rt_kprintf("from: %s -->  to: %s \n", from->name , to->name);
}

此代码为定义一个空闲线程钩子函数,rt_thread函数作用为返回线程名称name,from->name为将rt-thread函数的参数取线程名称保存地址name中的线程名称name,之后通过rt_kprintf打印。

猜你喜欢

转载自blog.csdn.net/Reasally/article/details/127079374