嵌入式实时操作系统预备知识

一、C指针

1、指针的基本概念

(1)指针是一个程序实体所占用内存空间的首地址

(2)指针变量

语法格式:
数据类型 * 变量名;
例如: int * p1;
注:我记得在C语言中*靠近int那么(int *)是一个整体,表示整型指针类型;*靠近p1则(*p1)是一个整体,*p1是一个整型变量。在C++中,靠前靠后就都一样了,都表示一个整型指针。

(3)指针变量必须赋值之后才能使用

例如:
int * p2; //定义整型指针变量
p2=(int *)0x44600000; //将地址强制转换为指针类型,这样才能赋值。

(4)取值运算符与取址运算符

*:取值;
&:取址。

2、函数指针

函数指针:指向一个函数,也即函数的首地址。
语法格式:
返回值类型 (*变量名)(参数1类型,参数2类型,······);
例如:
int (*pf)(int,float);
上式中pf就是一个函数指针变量。
函数指针用法例子:

int fun(int,float)
{
·········//用户代码
}
int main(void)
{
·········//用户代码
	pf=fun;
	pf(10,123.66);
	return 0;
}

3、函数指针作为函数参数及回调函数

在C语言中,任何合法的数据类型均可以作为函数的参数,函数指针当然也可以。
例如:

int fun(int,float)
{
·······//用户代码
}
void sys_fun(int(*pf)(int,float))
{
·······//用户代码
	pf(10,13.6);
·······//用户代码
}
int main(void)
{
·······//用户代码
	sys_fun(fun);
·······//用户代码
}

二、typedef常用方法

1、复杂的数据结构名称的简化

例如:函数指针类型

void*)(int,int;

使用关键字typedef

typedef  void*PFON)(int,int);

后续再进行函数指针变量定义时:

PFON function;

上面比较简单,下面举一个比较难的:

void* b[10](void*)(int,int);

在这个定义中,表达的是函数指针嵌套函数指针,并且函数指针是一个数组。b为程序实体名称,b为一个含有10个元素的指针数组。
由于b为一个数组,可以把上边进行简化:

void* b)(void*)(int,int);

void(*)(int,int);是一个类型,可以对它进行简化。如下所示:

typedef void*Pfun)(int,int;

于是原来的就可以写成如下形式:

void*b)(Pfun);

接下来在进行下一步化简:

typedef void*PFUN)(Pfun);

通过上面定义就可以到最简:

PFUN b[10];

2、增强代码的可读性

例如:

typedef int AGE;       //年龄
typedef int SIZE;       //尺寸

3、定义与平台无关的数据

4、避免出错

三、常用数据类型及数据结构

1、控制块

控制块是被控对象在操作系统世界的身份证。
从代码上看,控制块就是一个数据结构体,例如:

typedef struct tcb
{
	char* code_name;        //代码名称
	int p;                  //重要性级别
	int v_number;           //版本号
	void (*fun)(void);      //指向被管理代码的指针
}TCB;

2、同类控制块的登记造册

登记造册使用数组或者链表都可以。

3、队列与堆栈

(1)队列:先进先出

(2)堆栈:先进后出

注:详细内容参考数据结构与算法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值