嵌入式系统高级C语言编程笔记

发布 2021-05-12 00:44:28 阅读 9527

嵌入式c语言的基本数据类型。

char长度为1byte,即8位。

int长度为4byte,即32位。

unsigned int 简称unsigned

负数在计算机中存储时一般用补码表示。

#define uchar unsigned char

#define u8 unsigned char

#define uint unsigned int

#define u32 unsigned int

变量的种类。

局部变量:定义在函数内部的变量,作用范围仅限于定义它的这个函数内部。函数外部无法访问。

全局变量:定义在函数外部的变量,作用范围是整个程序。

静态变量:在定义的前面加上一个static,定义一次就不再消失,它会把上一次的值保存起来,下一次直接拿来就用。

动态局部变量:定义在函数内部的变量,通常定义的变量就是这种类型。

当局部变量与全局变量重名时,会优先访问自己的局部变量。

左位移运算符。

用来将1个数的各二进制全部左移,移位后,空白位补0,而溢出的位舍弃。

嵌入式c语言共有。

9条基本语句:顺序0个,选择2个,循环3个,转移4个。

32个关键字:

struct,enum,typedef,const,volatile,static,sizeof,extern,register,…)

extern存储种类说明,在其它程序模块中已说明的全局变量。

auto 存储种类说明,用于说明局部变量,默认值。

register 存储种类说明,使用cpu内部寄存的变量。

static 存储种类说明,静态变量。

typedef 数据类型说明,重新进行数据类型定义。

volatile 数据类型说明,该变量在程序执行中可被隐含地改变。

switch-case-break-default语句。

在case后的各常量表达式的值不能相同,否则会出现错误。

各case和default语句的先后顺序可以变动,而不会影响程序执行结果。

在case后,允许有多个语句,可以不用花括号括起来。do语句;

while(表达式);

首先执行一次循环体,再判别表达式的值,若为真则继续循环,否则终止循环。

转移语句(4个)

break;

只能用于switch-case-break和循环语句。

continue;

只能用在循环语句的循环体中。其语义是:结束本次循环,即不再执行循环体中continue语句之后的语句,转入下一次循环条件的判断与执行。

应注意的是,本语句只结束本层本次的循环,并不跳出循环。

goto;return;

本语句只用于被调用函数的返回。

函数声明。该函数返回值的数据类型函数名(数据类型形参,数据类型形参,…)

函数定义。该函数返回值的数据类型函数名(数据类型形参,数据类型形参,…)

函数体;嵌入式c语言将所有函数都认为是全局性的,而且是外部的,即可以被另一个文件中的任何一个函数调用。

每个函数都是独立的**块。

变量可以在各个层次的子程序中加以说明,它的作用域仅在这对大括号内。

有两种方法可以终止子函数运行并返回到调用它的函数中。

1)执行到函数的最后一条语句时返回。

2)执行到return语句时返回。

前者当子函数执行完后,仅返回给调用函数一个”0“。

预处理命令。

预处理就是指在进行编译的第一遍扫描之前所做的工作。

1)包含命令#include

使用尖括号表示在包含文件目录中去寻找,而不在源文件目录去寻找。

使用双引号则表示首先在当前的源文件目录中查找,若未找到,才到包含目录中去查找。

2)宏定义命令#define

无参宏定义。

带参宏定义。

宏定义只是简单的字符串代换,是在预处理时完成的,而typedef是在编译时处理的,它不是做简单的代换,而是对类型说明符重新命名。被命名的标识符具有类型定义说明的功能。

3)条件编译。

#ifdef 标识符如果标识符已被#define命令定义过*/

程序段1则对程序段1进行编译*/

#else程序段2否则,对程序段2进行编译*/

#endif

#ifndef 标识符。

程序段1#else

程序段2#endif

#if 常量表达式。

程序段1#else

程序段2#endif

类型定义符typedef

typedef int integer;

integer a,b;

相当于int a,b;

typedef char name[20]; 表示name是字符数组类型,数组长度为20*/

name a1,a2然后可用name说明变量*/

相当于char a1[20],a2[20];

typedef struct stu

char name[20];

int age;

char sex;

stu;stu body1,body2;

两个原则:程序一定是从程序存储器的0000h开始存放和执行。

org 0000h ljmp main

void main(void代表程序从0000h开始存放和执行。

语句;程序执行一定是个死循环。

主函数越短越好,主要用来初始化其它模块,以及调用其它模块。不要轻易调用某些库函数。中断函数禁止调用其它子函数。

常量一般全部大写。

全局变量一般第一个字母大写,局部变量全部小写。

结构体。将不同类型的数据组合成一个有机整体,以便于引用,这些组合在一个整体中的数据是相互联系的。

struct stu

int num;

char name[20]; 字符数组。

char sex字符变量。

int age;

float score;

char addr[20];

struct stu name1,name2;

#define stu struct stu

stuint num;

char name[20]; 字符数组。

char sex字符变量。

int age;

float score;

char addr[20];

stu name1,name2;

struct stu

int num;

char name[20]; 字符数组。

char sex字符变量。

int age;

float score;

char addr[20];

name1,name2;

结构变量名。成员名。

例如:或者嵌套的:

结构变量可以在定义时进行初始化赋值花括号括起来,逗号隔开来。

结构数组。struct stu

int name;

char name[20];

char sex;

float socre;

name[2]=

102,”zhang ling”,”f”,89.5}

指向结构变量的指针struct stu *pstupstu=&name1;

只有当某个变量被说明为这种类型的结构时,才对该变量分配存储空间。

指向结构数组的指针struct stu *psps=name;

struct为结构体类型,stu为结构体名,name[5]为结构体数组,name1为结构体变量,*p为结构体指针。

共用体。几个不同的变量共同占用一段内存的结构被称作共用体类型结构。

union data

int i;

char ch;

float f;

a,b,c;

可以引用哦,枚举类型。

enum weekday

sun,mon,tue,wed,thu,fri,sat

a,b,c;

weekday是枚举名,sun、mon等是枚举值,a、b、c是枚举变量。

在weekday中,sun值为0,mon值为1,…,sat值为6

但是注意,a=sum对,a=0错。

枚举元素不是字符常量,也不是字符串常量,使用时不要加单引号,双引号。

函数指针。函数指针是指指向函数的指针。

/声明一个函数,函数名代表函数的地址。

void fun(char,int);

/定义一个函数指针,形参为一个char类型,一个int类型,返回类型为void

void (*pf)(char,int);

pf=fun;

函数指针类型。

/声明一个函数指针类型。

typedef void (*fun)(char,int);

在函数指针声明前面加上一个typedef就可以了。

该定义表示fun是一个类型,而且是一种函数指针类型,该函数指针类型表示这样一类指针。

函数类型。/声明一个函数。

void fun(char,int);

/该声明定义了一个函数类型。

typedef void fun(char,int);

类型定义符typedef

typedef int integer;

integer a,b;

相当于int a,b;

typedef char name[20]; 表示name是字符数组类型,数组长度为20*/

name a1,a2然后可用name说明变量*/

相当于char a1[20],a2[20];

typedef struct stu

char name[20];

int age;

char sex;

stu;stu body1,body2;

c语言的关键字。

数据类型关键字。

unsigned和signed

void控制语句关键字。

存储类型关键字。

autoregister

static

如果它用于函数内部的局部变量声明时,作用是改变局部变量的存储类型,从自动变量变为静态变量,也就是说这个局部变量不再存储于堆栈或寄存器中,而是在编译的时候由编译器分配一个静态的地址空间,但是这个变量的作用域不受影响,依然仅局限在声明它的函数的内部才可以访问。需要说明的是,一旦函数内部的局部变量被声明为static,这个函数就有可能变得不可重入。

如果static关键字被用于函数的定义时,这个函数就只能在定义该函数的c文件中引用,该c文件外的**将无法调用这个函数。

嵌入式C 高级编程

嵌入式c 面向对象高级编程 笔试试卷。请将填空题的答案填入 中。一 选择题。1.下列关于类和对象的叙述中,错误的是 2分 a.一个类只能有一个对象 b.对象是类的具体实例 c.类是对某一类对象的抽象 d.类和对象的关系是一种数据类型与变量的关系 2.当将一个类a或函数f 说明为另一个类b的友元后,类...

嵌入式C语言高级编程试卷B

上嵌 嵌入式c高级编程 笔试。一 选择题 每题1分,共20道 语言程序编译时,程序中的注释部分 a 参加编译,并会出现在目标程序中。b 参加编译,但不会出现在目标程序中。c 不参加编译,但会出现在目标程序中。d 不参加编译,也不会出现在目标程序中。2.语句 int k 0586 将 a 说明k 为初...

嵌入式系统C语言

嵌入式系统的c语言。译自 c for embedded systems 讲稿。刘永重译。一 c语言基础。1 什么是c?c 程序语言最初是由dennis ritchie在1971年为unix系统开发并实现的。c的一个最大优点是与任何特定的硬件或系统无关。这使得一个用户写的程序不作任何修改就能运行在几乎...