1.若非必要,不要轻易改变寄存器的值!
若改变寄存器的话。读 改 写 三步。别影响其他位。
例程:
问个问题: while(!(UTRSTAT0 & (1<<2))); while(!(UTRSTAT0 &= (1<<2))); 有什么区别,第二个循环貌似会无限循环,为什么 大神们可以帮忙看下吗? Diego、<gui457086306@qq.com> 2018/4/29 16:59:31 第一个只比较不改变 第二个改变了 #虎神#(850817197) 2018/4/29 17:00:35 嗯嗯,是的,第二个bit2初值不为1的话,就陷入死循环了
2.函数调用的形式
本段以下摘自:《谭浩强-C程序设计(第四版)-- 第7.3章调用函数》
函数调用的一般形式为: 函数名(实参表列)
如果是调用无参函数,则“实参表列”可以没有,但括号不能省略,如下例。若果实参表列包含多个实参,则各参数间用逗号隔开。
按函数调用在程序中出现的形式和位置来分,可以有以下三种函数调用方式:
1.函数调用语句
把函数调用单独作为一个语句。如:led_test(); 这时不要求函数带回值,只要求函数完成一定的操作。
2.函数表达式
函数调用出现在另一个表达式中,如:“c = max(a, b);”, max(a, b)是一次函数调用,它是赋值表达式的一部分。这时要求函数带回一个确定的值以参加表达式的运算。例:
c = 2*max(a, b);
3.函数参数
函数调用作为另一个函数调用时的实参。例:
m = max(a, max(b, c));
说明:调用函数并不一定要求包括分号(如printf();),只有作为函数调用语句才需要有分号。如果作为函数表达式或者函数参数,函数调用本身是不必有分号的。不能写成:
printf("%d", max(a,b); ); //错误写法,max()后面多了一个分号
正确写法:led_test(); //led_test(void);错误,以下同理
File:uart.h int led_test(void); void delay(volatile unsigned int k); void uart0_init(); int putchar(int c); int getchar(void); int puts(const char *s); FIle:main.c int main(void) { led_test(); //led_test(void);错误,以下同理 uart0_init(); puts("Hello, world!\n\r"); while(1) { c = getchar(); if(c == '\r') { putchar('\n'); } if(c == '\n') { putchar('\r'); } putchar(c); } //运行成功
#include <stdio.h> void delay(int k) //或者void delay(void) { k = 5000; while(k--); } int main(void) { delay; //或者delay();均是合理引用? int i = 5; printf("i = %d, i =%08d, i = %8d\n", i, i, i); printf("i = %02d, i =%04d, i = %06d\n", i, i, i); printf("i = %010d, i =%012d, i = %014d\n", i, i, i); printf("i = %#d, i =%#o, i = %#x\n", i, i, i); printf("i = %#d, i =%#8o, i = %#8x\n", i, i, i); printf("i = %#0d, i =%#08o, i = %#08x\n", i, i, i); printf("i = %#0d, i =%#012o, i = %#012x\n", i, i, i); return 0; }//运行成功
本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。