实验一 简单io应用—流水灯控制示例程序_「正点原子Linux连载」第十三章BSP工程管理实验...

本文介绍了Linux驱动开发中如何对工程进行管理,以流水灯控制为例,详细阐述了从工程目录整理、硬件原理分析到编写LED、时钟和延迟驱动代码的过程,以及编译下载验证的步骤。通过实验,学习如何将程序模块化,便于管理和阅读。
摘要由CSDN通过智能技术生成

1)实验平台:正点原子Linux开发板

2)摘自《正点原子I.MX6U嵌入式Linux驱动开发指南
关注官方微信号公众号,获取更多资料:正点原子

70e4532e8992acf88bb0117640934229.png

第十三章BSP工程管理实验

在前面的章节中,我们都是将所有的源码文件刚到工程的根目录下,如果工程文件比较少的话这样做无可厚非,但是如果工程源文件达到几十、甚至数百个的时候,这样一股脑全部放到根目录下就会使工程显得混乱不堪。所以我们必须对工程文件做管理,将不同功能的源码文件放到不同的目录中。另外我们也需要将源码文件中,所有完成同一个功能的代码提取出来放到一个单独的文件中,也就是对程序分功能管理。本章我们就来学习一下如何对一个工程进行整理,使其美观、功能模块清晰、易于阅读。

13.1工程管理简介

打开我们上一章的工程根目录,如图13.1.1所示:

b3e472f5b494a95c0586bac5aa3c8bd1.png

图13.1.1工程根目录

在图13.1.1中我们将所有的源码文件都放到工程根目录下,即使这个工程只是完成了一个简单的流水灯的功能,但是其工程根目录下的源码文件就已经不少了。如果在添加一些其他的功能文件,那么文档就会更大,显得很混乱,所以我们需要对这个工程进行整理,将源码文件分模块、分功能整理。我们可以打开一个STM32的例程,如图13.1.2所示:

b47235da35f0aa69b29e15c268e9a4ef.png

图13.1.2 STM32F103例程工程文件

图13.1.2中的工程目录就很美观、不同的功能模块文件放到不同的文件夹中,比如驱动文件就放到HARDWARE文件夹中,ST的官方库就放到STM32F10x_FWLib文件夹中,编译产生的过程文件放到OBJ文件夹中。我们可以参考这个工程目录结构来整理第十二章的例程工程,新建名为“5_ledc_bsp”的文件夹,在里面新建bsp、imx6ul、obj和project这4个文件夹,完成以后如图13.1.3所示:

0f2f02a40e5b5944af276d795b3bff28.png

图13.1.3新建的工程根目录文件夹

其中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中提取出来做成一个独立的驱动文件。

13.2 硬件原理分析

本章使用到的硬件资源和第八章一样,就是一个LED0。

13.3 实验程序编写

本实验对应的例程路径为:开发板光盘-> 1、裸机例程->5_ledc_bsp。

使用VScode新建工程,工程名字为“ledc_bsp”。

13.3.1 创建imx6ul.h文件

新建文件imx6ul.h,然后保存到文件夹imx6ul中,在imx6ul.h中输入如下内容:

示例代码13.3.1.1 imx6ul.h文件代码

1 #ifndef __IMX6UL_H

2 #define __IMX6UL_H

3/***************************************************************

4 Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

5文件名 : imx6ul.h

6作者 : 左忠凯

7版本 : V1.0

8描述 : 包含一些常用的头文件。

9其他 : 无

10论坛 : www.openedv.com

11日志 : 初版V1.0 2019/1/3 左忠凯创建

12 ***************************************************************/

13 #include "cc.h"

14 #include "MCIMX6Y2.h"

15 #include "fsl_common.h"

16 #include "fsl_iomuxc.h"

17

18 #endif

文件imx6ul.h很简单,就是引用了一些头文件,以后我们就可以在其他文件中需要引用imx6ul.h就可以了。

13.3.2编写led驱动代码

新建bsp_led.h和bsp_led.c两个文件,将这两个文件存放到bsp/led中,在bsp_led.h中输入输入如下内容:

示例代码13.3.2.1 bsp_led.h文件代码

1 #ifndef __BSP_LED_H

2 #define __BSP_LED_H

3 #include "imx6ul.h"

4/***************************************************************

5 Copyright © zuozhongkai Co., Ltd. 1998-2019. All rights reserved.

6文件名 : bsp_led.h

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值