这阵子通过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 #ifndef _LED_H #define _LED_H #define LED0 PAout(9) extern u8 x; void LED(void); #endif 在外设的c文件中,主要是定义相关的变量,还有相关的驱动函数,本文件所涉及到的函数使用也要通过头文件的调用进行声明。 所以,头文件可以理解为就是各个c文件之间连接的桥梁。在各个c文件中才是变量以及函数的声明。 |
更多回帖