keil5 的模块化编程详解

Posted hongjuedong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了keil5 的模块化编程详解相关的知识,希望对你有一定的参考价值。

 

模块化编程是什么?就是可以吧你学的程序分成一个个模块,方便修改和移植。从事单片机和嵌入式这方面,编程具有强大移植性可以说是重中之重,如果你写一些LED数码管之类的小程序,

用模块化编程有些小题大做。但是在团队做项目中,需要不同的人负责不同的一段程序,这时候就需要模块化编程了,在个人编大程序时也要用,因为好修改,想想你的代码几十行还好,如果

几百几千行呢?所以说到这里,可见模块化编程几乎是所有大程序要做的,不然怎么修改?尤其是单片机这种灵活的语言。(建议有C语言基础的同学看)

      先提前说说与模块化编程有关的关键字加上英文意思; 

          static(静止的)

        extern(外部的)

   typedef(类型定义)

        #define(定义)

**********************************

#ifndef __**_H_  //如果有**.h文件,就。。。

#define __**_H_  //如果没有就寻找**.h文件

 

#endif  //否则就结束

         呵呵,先看看热热身 ,我们知道C语言有.c文件和.h文件,.c文件就是我们写的程序。.h文件呢是库文件,在写C语言程序的时候, #include“***.h”或include<***.h>,就是寻找库文件路径的意思,只是开始寻找的起点不同,

比如printf输出函数在stdio库里就有这个函数,我们只不过是拿来用而已,我想表达的是,库文件里面存了方便我们去写程序的函数(也是程序,不过以函数的形式打包来让我们用)

顺便说说code个关键字吧,比如 int code arr[]={};意思是把这个 i 变量的所占用的空间放在ROM中,也就是只读存储器,这样动态数据就可以拥有更多的空间速度也快了CPU也轻松了。单片机的内存是很宝贵的,RAM的容量运比ROM的小,而RAM又与CPU挂钩,其实我们手机的性能好不好与RAM有很大关系,我们说的运行内存就是RAM,太专业的小编也不会,我们知道code可以节省单片机内存就知道了。

关键字这些与内存挂钩,C语言难也是难在内存上,我们掌握基本的用法来编C51就行不是吗,我这里是浅谈,

       想深入了解static的点这个链接            https://blog.csdn.net/keyeagle/article/details/6708077

static 在程序中的作用是,当你在变量或函数面前加static后,表示该函数或变量就只能在这个C文件里用了,相当于一把锁来锁住它们。

           想深入了解extern的点这个链接           https://www.cnblogs.com/Lunais/p/5991135.html

typedef和#define在两个宏定义很常用,以后还会专门为typedef搞个库方便调用,

   比如现在要定义数据类型

     可以这样  typedef  int   P;(加分号)

                    #define  P  int(不允许加任何符号)

在后面要用到int来定义变量时可以直接,P  i=0(int  i=0);  我们用宏定义给这个数据可惜起了一个新名字P;C51的大程序里用的很多;

  typedef unsigned int  uInt8;      typedef unsigned char uChar16; 表示用uInt8新名字来代替unsigned int的类型

接下来开始模块化编程,想按照步骤试试一遍,首先建立一个文件夹 

 

 技术分享图片

技术分享图片在里面

建立四个文件夹,c文件夹放.c文件,h文件夹放.h文件,main文件夹放main.c主函数文件,project文件夹放一些项目文件;

这样可能有点晕是吧,没事下面就懂了;打开keil软件新建项目

 技术分享图片放在project文件夹里;取名pro,当然名字随便取的

技术分享图片之后开始建立才C和H文件,一个C文件对应一个H文件,

 

 

 技术分享图片分别命名为delay.c     delay.h    led.h  led.c  main.c  存到之前建立的c和h main文件夹中。

技术分享图片

 

 技术分享图片main.c主C文件单独放在main文件夹中

全部保存效果是这样的

技术分享图片

一个C文件对应一个h文件,名字一样,这样好找。现在可以先在C文件里编程,也可以先提前设置好一些东西,这个前后顺序是没关系的,我先设置吧

技术分享图片点这个;弹出

技术分享图片可以吧标号1看做是大的以个文件夹,标号2是子文件,编号3是子文件夹对应的C文件;名字随便取,技术分享图片这里我取的是这些名字,接下来是到入C文件

技术分享图片蓝底宽表示选中的目录下 导入,

技术分享图片接下来是同样的步骤导入对应的C文件,完成后点击OK

技术分享图片完成之后就是这样的以个布局效果;

问题来了,这么多的C文件,我们要把编译的路径告诉给软件,不然找不到H也就是库文件,之前不是模块化编程我们不用理路径,是应为软件自带了#include"reg52.h"这些了,而现在我们是要自己

造出#include“”这些,所以要给路径,

技术分享图片第三是设置晶振频率,和编写的程序的晶振频率一样,第四是勾选生存HEX文件

第五是搞路径的如图

技术分享图片在这个框点6,

技术分享图片点7建立   ×是删除

技术分享图片点7后有框出来点8添加文件夹上的H文件夹就可以了;然后一直OK;

编译后有两个警告是因为两个H文件夹没用,接下来编程;

技术分享图片

 

还有就是特别注意,#include" **.h"这里的名字一定是和H文件夹的名字一样。

技术分享图片

是的delayh文件书写格式是这样的;把函数名搞都里面;其实还要在void前面加extern的,但是keil5软件是默认前面已经加了,所以可加可不加;还有就是#ifndef后面加的这些__DELAY_H_  红色部分是可以以随便起不与其它重复的名称的,但是不管起什么名都得和下面#define一样,

技术分享图片LED的C程序,引用了Delay_Ms函数;

所以接下来

技术分享图片在LED的H中包delay的库包含进来那么现在#include“led.h中有几个库呢?有52的耶有delay的,

那写个主程序main编译后就直观了。

技术分享图片

零错误警告

看到了吗,箭头的地方是那些h文件,是不是层层叠起来的,所以现在有点明白了这些格式的含义和模块化编程的强大了吗,

都练习几次,加深理解,还有学到这里读者可以去网上看看别的模块化程序,还有很多技巧笔者就不多说了,有了基础可以慢慢理解别人的的知识,然后

会做,最后形成自己的编程风格。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

以上是关于keil5 的模块化编程详解的主要内容,如果未能解决你的问题,请参考以下文章

第二模块:函数编程 常用模块

Spring框架——AOP(面向切面编程)详解

模块化编程

Spring详解------面向切面编程

python中psutil模块的使用详解(python3经典编程案例)

python中psutil模块的使用详解(python3经典编程案例)