本文共 3345 字,大约阅读时间需要 11 分钟。
蓝桥杯 模板Template Part1:模块化编程&工程模板
● 改编自国信长天蓝桥杯官方蓝皮书例程,按照自己的习惯进行了补充和修改
一、流程图
二、工程结构
蓝桥杯考场编程以实用快捷为目的,并不是为了后期工程移植,所以省去了各种.h
头文件,除了ds1302.h
,iic.h
,onewire.h
三个官方提供的底层驱动,其他的各种用户自己写的头文件都融合成一个main.h
头文件。使工程结构更加简洁,避免了外部变量声明不到的尴尬。
蓝桥杯
的总工程文件夹里新建如下文件夹: ●Project
文件夹,用来存放编译过程产生的文件和最终的工程文件和二进制文件(hex文件)。
Source
文件夹,用来存放主源程序(即主C文件)和各种C文件; ●Library
文件夹,用来存放头文件&库文件。
三、变量命名规则
●局部变量普通标识符命名即可。
●全局变量建议加前缀,unsigned char
型的加uc_
,uc_Key_Value
;unsigned int
型的加ui_
,ui_SEG_flag
;unsigned long
型的加ul_
,ul_ms
;字符串数组前再加p
表示指针,如puc_SEG_Buf[9]
。 四、基础知识
1、编译预处理
●编译预处理即在C编译程序对C源程序进行编译前,由编译预处理程序对这些编译预处理命令行进行处理的过程。
●分为:宏定义,文件包含和条件编译。 ●宏定义 ○宏定义命令行的常见形式:宏名即标识符。#define 宏名 被替换文本#define 宏名 //仅说明标识符被定义
●文件包含
○文件包含:指在一个文件中,去包含另一个文件的全部内容。 ○形式:#include "文件名"或#include <文件名>文件名>
在预编译时,预编译程序将用指定文件中的内容来替换此命令行。
关于keil中的文件包含可参考●条件编译
○对程序中的内容选择性地编译。便于程序的调试和移植,避免重复编译。 ○常见形式:当标识符没有由#define
定义过,则编译程序段。 #ifndef 标识符#define 标识符 程序段#endif
2、变量的定义和说明
●定义(definition):创建变量,为变量分配确定的存储单元。
●说明or声明(declaration):只是说明变量的性质,并不分配内存。3、extern
●在同一编译单位内用extern
说明符扩展全局变量的作用域
extern
对此全局变量进行说明,以便通知编译程序:该变量是一个已经在外部(后边)定义了的全局变量,已经分配了存储单元,不需要再为它另外开辟存储单元。使变量的作用域扩展到从extern
说明处。 全局变量的说明与全局变量的定义的不同:变量的定义(开辟存储单元)只能出现一次,在定义全局变量时,不可使用extern
说明符;而对全局变量的说明,则可以多次出现在需要的地方,此时需要用extern
进行说明。 ●在不同编译单位内用extern
说明符扩展全局变量的作用域 模块化编程中,通常创建多个源文件(C文件),每个源文件可以单独进行编译,进行语法检查,若无错误即生成目标文件(.obj),然后用系统提供的连接程序把多个目标文件连接成一个可执行文件(.exe)。每个可进行单独编译的源文件称为编译单位。 在一个文件中定义所有的全局变量,而在其他用到这些全局变量的文件中用extern
对这些变量进行说明,声明这些变量已经在其他编译单位中定义,通知编译程序不必再为他们开辟存储单元。 五、操作流程
1、程序构架&模块分类
对要写的程序进行框架的搭建,自上而下进行编程。先确定整个程序可以划分为哪几个模块,再分别实现每个模块的功能,每个模块多外只提供一个接口即可,便于程序的移植和调试。
一个嵌入式系统通常包含两类模块: ●硬件驱动模块:一种特定的硬件对应一个模块。 ●软件功能模块:对应某个功能的实现,没有特定的硬件 对应。(比如一些通信协议的驱动) 蓝桥杯考场编程以实用快捷为目的,并不是为了后期工程移植,所以省去了各种.h
头文件,除了ds1302.h
,iic.h
,onewire.h
三个官方提供的底层驱动,其他的各种用户自己写的头文件都融合成一个main.h
头文件。使工程结构更加简洁,避免了外部变量声明不到的尴尬。
蓝桥杯
的总工程文件夹里新建如下文件夹: ●Project
文件夹,用来存放编译过程产生的文件和最终的工程文件和二进制文件(hex文件)。
Source
文件夹,用来存放主源程序(即主C文件)和各种C文件; ●Library
文件夹,用来存放头文件&库文件。
2、新建工程
按照通常方法新建工程即可,注意工程目录要选到Project
文件夹,如下图所示。
Project
文件夹如下图所示。 3、新建文件
直接点击New
可以新建text文本文档,点击保存,命名为main.c
注意后缀。保存路径为main文件夹。
Init.c
文件,Key16.c
文件,SEG.c
文件。 4、管理工程项目(C文件)
虽然在 3、新建文件 中已经新建了一些c文件和头文件并保存在总工程文件夹蓝桥杯
中,但实际上只是在物理路径上存放在了工程文件夹中,实际上并没有在工程中。
①项目目标(Project Targets)管理
单击 Manage Project Items
,在Project Items
一栏下, 在Project Targets
下面双击Target 1
可以改变目标文件名字,将其改为蓝桥杯
。
②分组管理
同样双击Groups
栏下的Source Group 1
将其改为Source
。在Groups
栏下点击Groups
栏右侧新建按钮可新建Group,再新建一个Group命名如为Library
。
③组内文件的添加
在main
Group的条件下,在Files
栏下点击Add Files…
按钮,添加对应的文件到相应的Group下。如下图所示。
再看此时的左侧工程管理栏,C文件已经在工程中被添加到相应的模块文件夹中了。
5、路径包含的设置(头文件)
在里解释了两个概念:当前目录和标准系统目录。
显然对于keil来说新建工程时自动生成的Project
文件夹才是keil承认的当前目录。而并非是用户自己建立的大工程文件夹蓝桥杯
。 如果使用双引号进行文件包含,IDE会先在当前目录中查找文件,再去标准系统目录查找。在此建议,使用尖括号来进行文件包含,使IDE在编译时直接在标准系统目录中查找文件,以节约时间,而且可以通过路径包含的设置将任意目录设置为标准系统目录,使头文件的存放更加灵活,适合模块化编程。 通过菜单选项进行设置标准系统目录,来指定用尖括号时的查找路径。在keil中的具体操作就是在(Project
->)Options for Target''
->C51
可用于设置当前项目的C51编译器控制命令。在Include Paths
一栏用于设定包含文件的目录路径。
单击下图红框中按钮,进行标准系统目录包含路径的添加。只需要将用到的所有用户自己写的头文件的存放路径添加到即可。
单击下图红框中按钮,新建一个路径。 单击下图红框中按钮,对新建的路径添加具体路径。 选择到头文件所在的文件夹即可,因为添加的是路径,所以此处操作进行的是选择文件夹,并不是选择头文件。头文件只有在程序中被包含被调用时才会添加到工程。 添加完头文件路径后,进行编译,如下图,工程中依旧没由头文件。整个工程是用C文件搭建起来的,头文件只有被包含被调用时,才会被添加到工程。
转载地址:https://methadone-no1.blog.csdn.net/article/details/114097442 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!