1. 前言
??我们将所有的源码文件放到工程的根目录下,如果工程文件比较少的话这样做无可厚非,但是如果工程源文件达到几十、甚至数百个的时候,这样一股脑全部放到根目录下就会使工程显得混乱不堪。所以我们必须对工程文件做管理,将不同功能的源码文件放到不同的目录中。接下来,我们就来学习一下如何对一个工程进行整理,使其美观、功能模块清晰、易于阅读。
2. 工程管理简介
??我们可以参考STM32F103的工程目录结构来整理第十二章的例程工程,新建名为“ledc_bsp”的文件夹,在里面新建 bsp、 imx6ul、 obj 和 project 这 4 个文件夹。 ??其中 bsp 用来存放驱动文件; imx6ul 用来存放跟芯片有关的文件,比如 NXP 官方的 SDK库文件; obj 用来存放编译生成的.o 文件; project 存放 start.S 和 main.c 文件,也就是应用文件;将上一个实验中的 cc.h、 fsl_common.h、 fsl_iomuxc.h 和 MCIMX6Y2.h 这四个文件拷贝到文件夹 imx6ul 中;将 start.S 和 main.c 这两个文件拷贝到文件夹 project 中。我们前面的实验中所有的驱动相关的函数都写到了 main.c 文件中,比如函数 clk_enable、 led_init 和 delay,这三个函数可以分为三类:时钟驱动、 LED 驱动和延时驱动。因此我们可以在 bsp 文件夹下创建三个子文件夹: clk、 delay 和 led,分别用来存放时钟驱动文件、延时驱动文件和 LED 驱动文件,这样main.c 函数就会清爽很多,程序功能模块清晰。工程文件夹都创建好了,接下来就是编写代码了,其实就是将时钟驱动、 LED 驱动和延时驱动相关的函数从 main.c 中提取出来做成一个独立的驱动文件。
3. 实验程序编写
??imx6ul.h:
#ifndef __IMX6UL_H
#define __IMX6UL_H
#include "cc.h"
#include "MCIMX6Y2.h"
#include "fsl_common.h"
#include "fsl_iomuxc.h"
#endif
??bsp_led.h:
#ifndef __BSP_LED_H
#define __BSP_LED_H
#include "imx6ul.h"
#define LED0 0
void led_init(void);
void led_switch(int led, int status);
#endif
??bsp_led.c:
#include "bsp_led.h"
void led_init(void)
{
IOMUXC_SetPinMux(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0);
IOMUXC_SetPinConfig(IOMUXC_GPIO1_IO03_GPIO1_IO03, 0X10B0);
GPIO1->GDIR |= (1 << 3);
GPIO1->DR &= ~(1 << 3);
}
void led_switch(int led, int status)
{
switch (led)
{
case LED0:
if (status == ON)
GPIO1->DR &= ~(1 << 3);
else if (status == OFF)
GPIO1->DR |= (1 << 3);
break;
}
}
??bsp_clk.h:
#ifndef __BSP_CLK_H
#define __BSP_CLK_H
#include "imx6ul.h"
void clk_enable(void);
#endif
??bsp_clk.c:
#include "bsp_clk.h"
void clk_enable(void)
{
CCM->CCGR0 = 0XFFFFFFFF;
CCM->CCGR1 = 0XFFFFFFFF;
CCM->CCGR2 = 0XFFFFFFFF;
CCM->CCGR3 = 0XFFFFFFFF;
CCM->CCGR4 = 0XFFFFFFFF;
CCM->CCGR5 = 0XFFFFFFFF;
CCM->CCGR6 = 0XFFFFFFFF;
}
??bsp_delay.h:
#ifndef __BSP_DELAY_H
#define __BSP_DELAY_H
#include "imx6ul.h"
void delay(volatile unsigned int n);
#endif
??bsp_delay.c:
#include "bsp_delay.h"
void delay_short(volatile unsigned int n)
{
while (n--) {}
}
void delay(volatile unsigned int n)
{
while (n--)
{
delay_short(0x7ff);
}
}
??main.c:
#include "bsp_clk.h"
#include "bsp_delay.h"
#include "bsp_led.h"
int main(void)
{
clk_enable();
led_init();
while (1)
{
led_switch(LED0, ON);
delay(500);
led_switch(LED0, OFF);
delay(500);
}
return 0;
}
|