在LPC2200系列中:
可以通过过下面的程序延迟10毫秒:
for(i=0;i<200;i++)
{
for(j=0;j<200;j++);
}
通过下面语句将一个16位的变量放在两个8位的变量中。
//IP数据报总长度高字节
IpHeadUint8[10]=(IpHead.e_ip.Crc&0xff00)>>8;
//IP数据报总长度低字节
IpHeadUint8[11]=IpHead.e_ip.Crc&0x00ff;
在对全部数组元素赋初值时,可以不指定数组长度。
eg;inta={1,2,3,4,5};
但如果当输出第a[5]以上的元素时,系统回输出随机数值,所以使用此方法时,不能使用超过初始值元素以上的元素。
用或运算,可使某位置为1,其它位不变
eg: PINSEL0 |= 0x00000005; //设置串口引脚
使第0位和第二位置一,其他位不变。
C语言符号优先级:
1>复合赋值运算符号:
a+=3*5;
等价于a=a+(3*5);
关键字volatile的用法
volatile变量可能用于如下几种情况:
1>设备的硬件寄存器(如:状态寄存器)
2>一个中断服务子程序中会访问到的全局变量
3>多线程应用中被几个任务共享的变量。
调试相关的宏
在Linux使用gcc编译程序的时候,对于调试的语句还具有一些特殊的语法。gcc编译的过程中,会生成一些宏,可以使用这些宏分别打印当前源文件的信息,主要内容是当前的文件、当前运行的函数和当前的程序行。具体宏如下:
__FILE__ 当前程序源文件 (char*)
__FUNCTION__ 当前运行的函数 (char*)
__LINE__ 当前的函数行 (int)
这些宏不是程序代码定义的,而是有编译器产生的。这些信息都是在编译器处理文件的时候动态产生的。
# 字符串化操作符
在gcc的编译系统中,可以使用#将当前的内容转换成字符串。程序示例:
#include <stdio.h>
#define DPRINT(expr) printf("<main>%s = %d\n", #expr, expr);
int main(void)
{
int x = 3;
int y = 5;
DPRINT(x / y);
DPRINT(x + y);
DPRINT(x * y);
return 0;
}
执行结果:
deng@itcast:~/tmp$ gcc test.c
deng@itcast:~/tmp$ ./a.out
<main>x / y = 0
<main>x + y = 8
<main>x * y = 15
#expr表示根据宏中的参数(即表达式的内容),生成一个字符串。该过程同样是有编译器产生的,编译器在编译源文件的时候,如果遇到了类似的宏,会自动根据程序中表达式的内容,生成一个字符串的宏。
关键字
关键字是C语言中具有特殊功能的保留标示符,按照功能可分为
1). 数据类型(常用char, short, int, long, unsigned, float, double)
2). 运算和表达式( =, +, -, *, while, do-while, if, goto, switch-case)
3). 数据存储(auto, static, extern,const, register,volatile,restricted),
4). 结构(struct, enum, union,typedef),
5). 位操作和逻辑运算(<<, >>, &, |, ~,^, &&),
6). 预处理(#define, #include, #error,#if...#elif...#else...#endif等),
7). 平台扩展关键字(__asm, __inline,__syscall)
这些关键字共同构成了嵌入式平台的C语法。
(以上图片及文字均来源于网络,如有侵权,联系删除)