一.
#define SECONDS_PER_YEAR (60*60*24*365)UL
#define MIN(A,B) ((A)<=(B)?(A):(B))
二.
while(1)
{
}
for(;;)
{
}
loop:
.....
goto loop;
三.
int a; an integer
int *a; A pointer to an integer
int **a; A pointer to a pointer to an integer
int a[10];
int *a[10];
int (*a)[10];
int (*a)(int);
int (*a[10])(int);
四.
const int a;
int const a;
const int *a;
int * const a;
int const * a const;
五.
volatile
一个参数既可以是const还可以是volatile 如只读状
态寄存器
一个指针可以是volatile 如当一个中断服务子程序修
改一个指向buffer的指针时
int square(volatile int *ptr)
{
return *ptr * *ptr;
}
由于*ptr指向一个volatile型参数,可能返回不是你所
期望的平方值
六.
#define BIT3 (0x1<<3)
static int a;
void set_bit3(void)
{
a|=BIT3;
}
void clear_bit3(void)
{
a&=~BIT3;
}
七.
要求设置一绝对地址为0x67a9的整型变量的值为0xaa66
为了访问一绝对地址把一个整型数强制转换为一指针是
合法的
int *ptr;
ptr=(int *)0x67a9;
*ptr=0xaa55;
八.
ISR不能返回一个值
ISR不能传递参数
ISR中做浮点运算是不明智的
九.
void foo(void)
{
unsigned int a=6;
int b=-20;
(a+b>6)?puts(">6") : puts("<=6");
}
输出>6 当表达式中存在有符号类型和无符号类型时所
有的操作数都是自动转换为无符号类型的
十.
unsigned int zero=0;
unsigned int compzero=0xffff; //compzero of
zero
对于一个int型不是16位的处理器(如ARM的int型是32位
的)
应编写如下:
unsigned int compzero = ~0;
十一.
#define dPS struct s*
typedef struct s* tPS; 这种类型定义更好
dPS p1,p2
tPS p1,p2;
阅读(1084) | 评论(0) | 转发(0) |