单片机中常用声明和函数

extern

置于变量或函数前,表示变量或函数的定义在别的文件中。提示编译器遇到此变量或函数时,在其他模块中寻找定义。

#ifndef

"if not define"的简写。预处理中的条件编译。防止头文件的重复包含和编译,便于程序调试和移植,与#endif组合使用

#ifndef XX //先测试XX是否被宏定义过
#define XX //如果没有宏定义,下面就宏定义XX,并编译下面的语句
... ...
#endif     //如果定义了XX则编译endif后面的语句
... ...

补充:
为防止当有2个C文件都include了同一个头文件在编译时,出现声明冲突,此时就可以将头文件的内容放在#ifndef和#endif中

#ifndef _STDIO_H_
#define _STDIO_H_
... ...
#endif

bit

C51编译器的一种扩充数据类型,利用它可定义一个位标量。它的值是一个二进制位,结果不是"0"就是"1"(与Ture,False类似)通常bit定义的变量作为标志位用。

xdata

外部扩展内存(外部随机存储器RAM)数据定义字。在keil中用来定义变量表达的数据位置位于扩展内存中。

_ at _

绝对地址定位,对存储器进行绝对地址定位,与xdata连用

char xdata LED_Data[5] _at_ 0x8000

注:在给变量LED_Data[5]定位绝对地址空间时,不能对其赋初值;该语句不能放在主函数中,会出现错误274;keil中的地址是自动分配的,所以除非特殊情况,否则不提倡使用绝对地址定位。

sbit

定义特殊功能寄存器的位变量

sbit p0 = P0^0;	//即定义p0为P0口的第一位

static

一种数据变量的存储方式。静态变量的特性:变量只定义一次;只在定义的范围内有效;函数结束,变量不会丢失。
补:
局部变量:没有固定存储地址,函数结束回收随机分配的地址
全局变量:分配固定地址,程序运行中,数据不会丢失

volatile

表示定义的变量是随时可能发生变化的,每次使用时必须从内存中取出该值,因而编译器生成的汇编代码会从原内存地址中读取数据使用。使用volatile可以保证特殊地址的稳定访问。

code

通知编译器将其定义的内容保存到ROM中

sizeof

int a[5];
sizeof(a) = 数组长度 * 数组中元素所占的字节 (5 * 4 = 20

memcpy

函数原型:
void *memcpy(void *dest, const void *src, size_t n)

用法:
从源 src 所指的内存地址的起始位置开始拷贝 n 个字节到目标 dest 所指的内存地址的起始位置中。

memcmp

函数原型:
extern int memcmp(void *buf1, void *buf2, unsigned int count)

用法:
比较内存区域 buf1buf2count 个字节
buf1 > buf2 ,返回值 > 0
buf1 < buf2 ,返回值 < 0
buf1 = buf2 ,返回值 = 0

memset

函数原型:
void *memset(void *s, int ch, size_t n)

用法:
s 中当前位置后面的 n 个字节用 ch 替换并返回 s

malloc

函数原型:
void *malloc(unsigned int num_bytes)
动态内存分配长度为 num_bytes 字节,注意当不再使用该内存块时,要用free()释放。

a = (char*)malloc(100*sizeof(char));
free(a);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值