恭贺新论坛开张!我也来添把火!
1)C忌讳绝对定位。 常看见初学者要求使用_at_,这是一种谬误,把C当作ASM看待了。在C中变量 的定位是编译器的事情,初学者只要定义变量和变量的作 用域,编译器就把一个固定地址给这个 变量。怎么取得这个变量的地址?要用指针。比如unsigned char data x;后,x的地址就是 &x, 你只要查看这个参数,就可以在程序中知道具体的地址了。所以俺一看见要使用绝对定位的 人,第一印象就是:这大概是个初学者。
2)设置SP的问题。 原因和1差不对,编译器在把所有变量和缓冲区赋予地址后,自动把最后一 个字节开始的地方,作为SP的开始位置,所以初学者是不必 要去理会的。这体现C的优越性,很 多事情C编译时候做了。
3)用C的主程序结构: #include <reg52.h> void main(void) { while(1); } 这是个最小的 成功的C程序,包括头部文件和程序主体。 头部文件的名词解释:引用的外部资源文件,这个文 件包括了硬件信息和外部模块提供的可使用的函数和变量的说明。可以用文本方 式打开 reg52.h,仔细研究下,会有一些写程序的体会。
4)这样构成一个C项目 在C中,常用项目来管理。项目一般分为两大块:C文件块和头部文件 块。 我们常把不同功能写在不同的C文件中,依靠项目的管理,最后把所有文件连接起来,这样 就可以得到可以烧录的HEX文件或BIN文件。 这些C文件中,有且只有唯一一个包括main()函数, 和3)中一样的C文件。 用头部文件把各个不同的C互相连接起来。一个C文件基本上要对应有一个 H头部文件,这个H文件就包含本C文件中可以提供给外面使 用的变量和函数,没有在H文件中列出 的文件,可以算是该C文件的内部函数和变量,外部C不能使用。 例子:a.C: unsigned char i; unsigned char mWork; void Test1(void) { mWork++; } void Test2(void) { i++; } a.h文件中: extern unsigned char i; extern void Test1(void); 这样主程序M.c中: #include <reg52.h> /*C编译器内部自带的H文件,使用<>*/ #include "a.h" /*自定义的H文 件,一般用""*/ void main(void) { Test1(); /*使用a.c模块文件中的函数*/ while(1){ i++; /*使用a.c模块文件中的变量*/ } }
|