找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3417|回复: 0
打印 上一主题 下一主题
收起左侧

从STM32中学到的工程建立方法

[复制链接]
跳转到指定楼层
楼主
ID:50574 发表于 2013-7-6 22:13 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    这阵子通过STM32的学习,学到的不仅仅是硬件的知识,关于工程的结构也学到了一些实用的东西。以前学习51的时候就是一个文件写到底,把所有的函数写到一个c文件中,所有的变量也定义在一个c文件中。
     但是这阵子接触到了模块化的思想,每一个外设,对应着一个单独的驱动程序,包括一个c文件还有一个h文件。在建立工程之后,先建立组,包括USER,可以把主文件放在这个组里面;SYSTEM组,可以吧系统的一些通用型文件放在这个组里面;HARDWEAR组,可以把外设放在这个组里面。还可以建立一个组放说明性的文件。这样使得整个工程的结构十分的清晰,在调试程序的时候十分方便,在以后自己重新看这个工程的时候也可以很快的理清整个工程个脉络。
    在主文件里面,也就是main.c文件里面,写主程序的代码,其他的函数通过调用头文件的方式来调用。对于每一个外设,都要有一个单独的驱动程序,这样的话可以十分方便的进行移植,记得在假期写的MSP430驱动12864液晶以及矩阵键盘的程序,修改了很少的地方就可以移植到STM32上进行使用,大大的缩短了自己的开发时间。在电设正式比赛的时候,我写程序基本上就是在复制粘贴,重新构架程序的框架,因为之前的训练中基本上把各个模块的驱动程序都写好了。
     在外设驱动程序的H文件中,主要进行函数的声明,一定要切忌在头文件中定义变量或者定义函数,因为在一个工程中,同一个变量或者函数可以被声明很多次,但是只可以进行一次定义!因为头文件可能不只是在一个文件中调用,所以不可以出现  定义!否则编译会出错的!函数的声明就是函数声明的一般形式。变量的声明可以采用   extern int i;的形式。但是一定要注意extern int i;和extern int i=0;的区别,前者是声明,后者是定义。只要是需要调用此外设驱动函数和变量的文件中,就要加上#include<xxx.h>。H的结构一般为第一行写#ifndef   _xx_H,这句话判断xx.h是否已经被定义,第二行写#define ,两行的意思就是若果xx.h没有定义,就定义xx.h,下面就是写变量的声明和函数的声明了。最后一行一定要写#endif,这是和ifndef和define想匹配的一个结构,不可以少。
#ifndef   _LED_H
#define _LED_H

#define   LED0     PAout(9)

extern u8 x;

void LED(void);

#endif
      在外设的c文件中,主要是定义相关的变量,还有相关的驱动函数,本文件所涉及到的函数使用也要通过头文件的调用进行声明。
      所以,头文件可以理解为就是各个c文件之间连接的桥梁。在各个c文件中才是变量以及函数的声明。

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表