tag 标签: 模块化编程

相关博文
  • 热度 40
    2013-2-24 17:48
    5659 次阅读|
    13 个评论
    模块化编程简明教程 林德光 ldeguang1991@gmail.com      模块化编程是嵌入式一门很重要的编程能力。对于一个稍微复杂的系统来说,编程时我们不可能把它全部写在一个 .c 文件里,这样很导致文件超级长,不利于调试,从审美角度来说,也显得毫无章法。更明智的做法就是采用模块化编程。下面就模块化编程进行简单讲解。(注:平台 win7 ,环境 keil4 ,处理器 STC1T )      先给一个大致的印象。      一个 demo 工程文件下的文件夹如图        这种编程做法的优点就是结构清晰,逻辑性好。下面进行演示。      首先,新建一个文件夹(这里我放在桌面的 demo 文件夹) 在 demo 文件夹下新建五个文件夹 COMM 、 HARDWARE 、 OUTPUT 、 SYSTEM 、 USER (这只是我常用的做法,你也可以做相应修改) 其中, USER        : 用于存放用户文件:包括工程项目文件、主函数文件; SYSTEM      : 用于存放系统资源文件,如 uart,timer 等; HARDWARE    : 用于存放板载硬件资源,如 DS18b20,tube,key,lcd 等; COMM        : 用于存放通讯协议文件,如 I2C,SPI 等; OUTPUT      : 用于存放编译过程产生的“垃圾文件”,如,目标文件 (.obj) ,链接文                 件 (.lst) , hex 文件等。        然后,打开 keil4 ,新建工程,保存在 USER 文件夹下,如图,      接下来的芯片选择等我就不多说了,你懂的……      新建 demo.c ,用于编写主函数 , 保存在 USER 目录下。现在 USER 目录下文件有:      现在假设我们要加入 LED 模块,那么我们就在 HARDWARE 文件下新建 led 文件夹, 打开 led 文件夹,新建 led.h , led.c ,如图:      这里说明一下, .h 文件一般负责“声明”函数和配置, .c 文件负责“定义”函数。      分别编写 .h 和 .c 文件,这里我简单 demo 一下:      led.h      led.c   现在我们编写好了模块文件,重新打开 demo 工程,首先进行文件组织, 在 Groups 下删掉 Source Group1 ,新建 USER 、 HARDWARE ,(其他的文件夹就不新建了, demo 工程没有用到)      选中 Groups 下 USER ,在 Files 框下点击 Add Files ,添加进 USER 文件夹下的 .c 文件, 选中 Groups 下 HARDWARE ,在 Files 框下点击 Add Files ,添加进 USER 文件夹下的 .c 文件, 添加完,就这样…… 弄完就点 OK ,返回到主界面, 可以看到文件结构树已经跟我们一开始新建的文件夹结构统一了,如图(其他文件夹用不到,先忽略) 接着,设置中间过程产生的文件的放置位置   编写主函数,编译: 编译之后,可以发现编译器编译出错,说找不到 led.h 于是,我们还必须进行一项设置(编译路径) 编译路径我们添加进去了,再重新编译, 可以看到没有报错,(一个警告是因为我们编写的另外一个函数 LED_OFF() 函数没有调用),如果想不要这个警告可以这样设置, 大功告成,以后添加模块这可以按这个步骤就可以很快构建自己的工程文件了。
  • 热度 25
    2013-1-5 09:44
    1769 次阅读|
    1 个评论
      .H文件 //*****************************************************************************  //你的注释格式  //*****************************************************************************      #ifndef __xx_H__  #define __xx_H__    #ifdef __cplusplus  extern "C"  {  #endif    //*****************************************************************************  //  //头文件  //  //*****************************************************************************  #include "example.h"    //*****************************************************************************  //  //宏定义  //  //*****************************************************************************    #define MY_ID 0X11    //*****************************************************************************  //  //声明能被其他函数调用的变量  //  //***************************************************************************** extern volatile unsigned int g_faceDatLen;  extern volatile unsigned char g_faceDatok;  extern const unsigned int g_faceDatTotalLen;    //*****************************************************************************  //  //结构体声明  //  //*****************************************************************************  typedef struct S1  {   uint32 flag;   uint32 dat ;  }STR; extern STR  g_example1;      //*****************************************************************************  //  //函数声明  //  //*****************************************************************************   extern void RS485_Init(void);     //485控制引脚初始化  extern void Uart0Init(void); // 串口0初始化  extern void Uart1Init(void); // 串口1初始化       #ifdef __cplusplus  }  #endif    #endif               .C文件 /*************************************************************************  * 你的文件注释格式  *************************************************************************/    //引入自定义头文件  #include "xx.h"   //  // 定义变量  //  volatile unsigned int g_faceDatLen=0;  volatile unsigned char g_faceDatok=0;  const unsigned int g_faceDatTotalLen=4136;   //  // 定义结构体  // STR  g_example1;   //  // 函数实现  // //*****************************************************************************  //函数名:       //函数功能描述:    //函数参数:    无  //函数返回值:    无  //作者:  //函数创建日期:  //函数修改日期:  //修改人:  //修改原因:  //版本:  //历史版本:  //***************************************************************************** void RS485_Init(void) { }   //*****************************************************************************  //函数名:       //函数功能描述:    //函数参数:    无  //函数返回值:    无  //作者:  //函数创建日期:  //函数修改日期:  //修改人:  //修改原因:  //版本:  //历史版本:  //*****************************************************************************  void Uart0Init(void); { } //*****************************************************************************  //函数名:       //函数功能描述:    //函数参数:    无  //函数返回值:    无  //作者:  //函数创建日期:  //函数修改日期:  //修改人:  //修改原因:  //版本:  //历史版本:  //*****************************************************************************  void Uart1Init(void) {   }
相关资源