从单片机基础到程序框架(全集 2019pdf版).pdf - 第247页

第 4 个数 十进制:1 十六进制:1 二进制:1 第 5 个数 十进制:2 十六进制:2 二进制:10 第 6 个数 十进制:3 十六进制:3 二进制:11 分析: 变量 a 为 1。 变量 b 为 1。 变量 c 为 1。 变量 d 为 1。 变量 e 为 2。 变量 f 为 3。 【57.7 如何在单片机上练习本章节 C 语言程序?】 直接复制前 面章节中第十 一节的模板程 序, 练习代码时只需要 更改 “ C 语言学习区 域” …

100%1 / 836
void main() //主函
{
//下面函数内 i 是普通局部变量,每次调用都会被重新初始化
a=HanShu(); //函数内的 i 每次重新初始化为 0,再自加 1,所以 a 等于 1。
b=HanShu(); //函数内的 i 每次重新初始化为 0,再自加 1,所以 b 等于 1。
c=HanShu(); //函数内的 i 每次重新初始化为 0,再自加 1,所以 c 等于 1。
//下面函数内 i 是静态局部变量,第一次上电后默认为 0,就不会再被初始化,
d=HanShu_static(); //d 0 自加 1 后等于 1
e=HanShu_static(); //e 1 自加 1 后等于 2
f=HanShu_static(); //f 2 自加 1 后等于 3
View(a); //把第 1 个数 a 发送到电脑端的串口助手软件上观察。
View(b); //把第 2 个数 b 发送到电脑端的串口助手软件上观察。
View(c); //把第 3 个数 c 发送到电脑端的串口助手软件上观察。
View(d); //把第 4 个数 d 发送到电脑端的串口助手软件上观察。
View(e); //把第 5 个数 e 发送到电脑端的串口助手软件上观察。
View(f); //把第 6 个数 f 发送到电脑端的串口助手软件上观察。
while(1)
{
}
}
/*---C 语言学习区域的结束。-----------------------------------------------*/
在电脑串口助手软件上观察到的程序执行现象如下:
开始...
1 个数
十进制:1
十六进制:1
二进制:1
2 个数
十进制:1
十六进制:1
二进制:1
3 个数
十进制:1
十六进制:1
二进制:1
4 个数
十进制:1
十六进制:1
二进制:1
5 个数
十进制:2
十六进制:2
二进制:10
6 个数
十进制:3
十六进制:3
二进制:11
分析:
变量 a 1。
变量 b 1。
变量 c 1。
变量 d 1。
变量 e 2。
变量 f 为 3。
【57.7 如何在单片机上练习本章节 C 语言程序?】
直接复制前面章节中第十一节的模板程序,练习代码时只需要更改C 语言学习区域”代码就可以了,
其它部分的代码不要动。编译后,把程序下载进带串口 51 习板,通过电脑端的串口助手软件就可以观
察到不同的变量数值,详细方法请看第十一节内容。
第五十八节: const(或 code)在定义数据时的作用。
【58.1 const code 的关系。
const code 都是语法的修饰关键词,放在所定义的数据前面时有“不可更改”意。 C 语言语法中,
const 像普通话全国通用,是标准的语言;而 code 像地方的方言,仅仅适合针 51 单片机的 C51 编译器环
境。而其它大多数单片机 C 编译器并不支持 code,只支持 const。比如 PIC,stm32 单片机的 C 编译器
都是只认 const 而不认 code 的。通常情况下,const 定义的数据都是放在 ROM 的,但是 51 单片机的 C51
译器是例外,它并不 const 义的数据放 ROM 区,只有 code 关键词时它才会把数据放 ROM ,这
一点相对其它大多数的单片机来说是不一样的。因为本教程是用 51 单片机的 C51 译器,所以用 code 来替
const。本节教程所提到 const,在实际编程时都 code 来替代。
【58.2 const(或 code)在定义数据时的终极目的。
在数据定义分配的应用中,const 的终极目的是为了节省 RAM 的开销。从“读”和“写”的角度分析,
数据有两种:“能读能写”和“只能读”这两种。 “能读能写”的数据占用 RAM 内存,叫变量,C 语言语法
上定义此类数据时“无”const 前缀。 只能读”的数据占用 ROM 存,叫常量, C 语言语法上定义此
数据时“有”const 前缀。单片机的 ROM 量比 RAM 容量往往大几十倍甚至上百倍,相比之下,RAM 的资
显得比较稀缺。因此,把某些只需“读”而不需“写”的数据定义成 const 放在 ROM,就可以节省 RAM 的开
销。
【58.3 const(或 code)的应用场合。
const 可以定义单个常量,也可以定义常量数组。定义单个常量时,通常应用在某个出现在程序多处并
且需要经常调整的“阀值”参数,方便“一键更改”的操作。所谓“一键更改”就是只要改一次 const
定义初始化的某个常量,整个程序多次出现的此常量就自动更改了。定义常量数组时,通常应用在某个数据
转换表,把某些固定的常量预先放到常量数组,通过数组的下标来“查表”
【58.4 const(或 code)的语法格式。
定义单个常量和常量数组时的语法是以下这个样子的:
const unsigned char x=10; //定义单个常量。加了 const
const unsigned char y[12]={31,28,31,30,31,30,31,31,30,31,30,31}; //定义常量数组。加 const。
【58.5 const(或 code)的“能读”和“不可写”概念】
所谓“读”和“写”的能力,其实就是看某数能在赋值符号“=”的“右边”还是“左边”的能力。普
通的变量,既可以在赋值符号“=”的“右边”(能读),也可以在赋值符号“=”的“左边(能写)。比如,
下面的写法是合法的:
unsigned char k=1; //这是普通的变量,无 const 前缀。
unsigned char n=2; //这是普通的变量,无 const 前缀。
n=k; //k 出现在赋值符号“=”的右边,表示能读。合法
k=n; //k 出现在赋值符号“=”的左边,表示能写,可更改之意。合法