1. bsp工程管理的目的

模块化项目,使得项目清晰

2. 代码

拷贝原来工程

创建文件夹

  • bsp就是工程驱动文件
  • imx6ull是和芯片有关的文件
  • obj是生成文件的文件夹
  • project 工程文件 start.s main.c

创建对应的驱动文件

和上一节一样的驱动文件

# ?= 没有赋值的话就赋值

CROSS_COMPILE ?= arm-linux-gnueabihf-

TARGET 		  ?= bsp

# :=覆盖之前的值

GCC    			 := $(CROSS_COMPILE)gcc 

LD 				 := $(CROSS_COMPILE)ld

OBJCOPY 		 := $(CROSS_COMPILE)objcopy

OBJDUMP  		 := $(CROSS_COMPILE)objdump 

# INCDIRS 包含整个工程的.h 头文件目录 \是换行符

INCDIRS          := imx6ull \

					bsp/clk \

					bsp/led \

					bsp/delay 

# SRCDIRS 包含整个工程的.s .c文件目录

SRCDIRS			 := project \

					bsp/clk \

					bsp/led \

					bsp/delay

# patsubst的作用是给INCDIRS中的每个目录前面加一个 -I,指明头文件目录时必须加

# -I imx6ull -I bsp/clk -I bsp/led -I bsp/delay 

INCLUDE 		 := $(patsubst %, -I %, $(INCDIRS))

# foreach dir对每个dir都执行一次,SRCDIRS中dir, 即上面的文件夹

# wildcard 取出文件夹内所有文件

# 比如bsp/clk/bsp_clk.c

SFILES 			 := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.S))

CFILES 			 := $(foreach dir, $(SRCDIRS), $(wildcard $(dir)/*.c))

# notdir 上面取出来之后去掉目录

SFILENDIR 		 := $(notdir $(SFILES))

CFILENDIR  		 := $(notdir $(CFILES))

# 把所有的.s和.c都变成点o文件,并在前面加上obj

SOBJS  			 := $(patsubst %, obj/%, $(SFILENDIR:.S=.o))

COBJS 			 := $(patsubst %, obj/%, $(CFILENDIR:.c=.o))

OBJS 			 := $(SOBJS) $(COBJS)

# 相当于重命名

VPATH 			 := $(SRCDIRS)

.PHONY: clean

# 这段和以前是一样的

$(TARGET).bin : $(OBJS)

	$(LD) -Timx6ul.lds -o $(TARGET).elf $^

	$(OBJCOPY) -O binary -S $(TARGET).elf $@

	$(OBJDUMP) -D -m arm $(TARGET).elf > $(TARGET).dis

# -Wall 编译后显示所有警告

# -nostdlib 不连接系统标准启动文件和标准库文件,只把指定的文件传递给连接器。

#			这个选项常用于编译内核、bootloader等程序,它们不需要启动文件、标准库文件

# -O2   是比O1更高级的选项,进行更多的优化。

# 		Gcc将执行几乎所有的不包含时间和空间折中的优化。

# 		当设置O2选项时,编译器并不进行循环打开()loop unrolling以及函数内联。

# 		与O1比较而言,O2优化增加了编译时间的基础上,提高了生成代码的执行效率。

# 这样还能带着.h文件一起编译 

$(SOBJS) : obj/%.o : %.S

	$(GCC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

$(COBJS) : obj/%.o : %.c

	$(GCC) -Wall -nostdlib -c -O2 $(INCLUDE) -o $@ $<

clean:

	rm -rf $(TARGET).elf $(TARGET).dis $(TARGET).bin $(COBJS) $(SOBJS)

bsp工程管理的更多相关文章

  1. RTT工程管理

    一.RTT工程管理 RTT采用SCons管理工程. 本次安装版本:Python-2.7.3.1.exe,python-2.7.11.msi,scons-2.3.1-setup.exe 安装完成后,需要 ...

  2. 使用BLADE构建c++工程管理

    使用BLADE构建c++工程管理 字数764 阅读2753 评论2 喜欢4 一. c++工程依赖管理 之前在百度一直使用comake2构建c++项目,十分方便.免去了手写Makefile的痛苦,很多项 ...

  3. emacs工程管理,cedet ede插件自动构建Make,Automake

    鉴于自己一直都是在做客户端开发方面的工作,服务端很多知识都随着时间淡忘了,最近有一个计划,用一些时间补一下基础.所以早上很早就起床,花了一点时间大致浏览了一下BSD socket的相关API,然后用G ...

  4. Makefile 工程管理

    Makefile 工程管理 Makefile 规则 --变量 在Makefile中,用户除了可以自己定义变量外,还可以使用存在系统已经定义好的默认变量 $^:代表所有的依赖文件 $@:代表目标 $&l ...

  5. make工程管理器

    1.概述 大型程序中,人们希望工具自动识别修改的文件,而且不需要输入冗长的命令,就可以进行编译链接等操作,于是make工程管理器应运而生. make可以自动识别文件时间戳,只处理修改的文件: make ...

  6. 学习总结:工程管理与makefile

    工程管理与makefile 一.为什么需要makefile和make 一个工程中的源文件可能很多,按照类型.功能.模块分别放在若干个目录中,为了有效地管理软件工程,更高效地编译整个工程,需要用到mak ...

  7. Go语言 函数,工程管理

    Go语言 函数,工程管理 1.无参无返回值函数的使用 package main import "fmt" func main() { // 无参无返回值函数的调用:函数名() fu ...

  8. go语言基础之工程管理和工作区介绍

    1.工程管理 在实际的开发工作中,直接调用编译器进行编译和链接的场景是少而又少,因为在工程中不会简单到只有一个源代码文件,且源文件之间会有相互的依赖关系.如果这样一个文件一个文件逐步编译,那不亚于一场 ...

  9. Qt工程管理

    Qt Creator工程管理Qt Creator以工程项目的方式对源码进行管理一个Qt Creator工程包含不同类型的文件 .pro项目描述文件.pro.user用户配置描述文件 //由Qt Cre ...

随机推荐

  1. 题解 2020.10.24 考试 T4 模板

    题目传送门 题目大意 有一个 \(n\) 个点组成的树,有 \(m\) 次操作,每次将 \(1\to x\) 的路径上每个点都加入一个颜色为 \(c\) 的小球.但是每个点都有大小限制,即小球个数超过 ...

  2. bzoj1407,洛谷2421 NOI2002荒岛野人

    题目大意: 克里特岛以野人群居而著称.岛上有排列成环行的M个山洞.这些山洞顺时针编号为1,2,-,M.岛上住着N个野人,一开始依次住在山洞C1,C2,-,CN中,以后每年,第i个野人会沿顺时针向前走P ...

  3. [spring-rabbit]自动配置原理

    1 一个简单的示例 在Spring Boot项目中使用spring-rabbit时,需要经过以下几个步骤: 引入依赖. 配置基本连接信息. 创建消息发布者,并发送消息. 创建消息消费者,监听消息并处理 ...

  4. 2021.3.10--vj补题

    B - Saving the City cf--1443B Bertown is a city with nn buildings in a straight line. The city's sec ...

  5. 实用 | 利用 aardio 配合 Python 快速开发桌面应用

    1. 前言 大家好,我是安果! 我们都知道 Python 可以用来开发桌面应用,一旦功能开发完成,最后打包的可执行文件体积大,并且使用 Python 开发桌面应用周期相对较长 假如想快速开发一款 PC ...

  6. 第四代富士X100F操作学习

    前言 本文为自己通过B站的UP主[阿布垃机手册]整理.原视频地址:[阿布垃机手册][布瞎BB]富士 X100F 相机外部按键 拍人像自己的设置 [X100F相机光圈大小支持F2到F16+Auto]光圈 ...

  7. UltraSoft - Alpha - Scrum Meeting 8

    Date: Apr 23th, 2020. Scrum 情况汇报 进度情况 组员 负责 昨日进度 后两日任务 CookieLau PM.后端 aliyun连接前后端,跑通demo 实现邮箱注册的验证码 ...

  8. BUAA-OO-UML

    BUAA-OO-UML 作业架构设计分析 第一次作业 类图如下: 这个架构十分简明,就是在底层数据和调用者之间建立起一层隔离层.但其实可以将转换过程延迟到调用阶段. 第二次作业 类图如下: 架构基本同 ...

  9. Spring Security Resource Server的使用

    Spring Security Resource Server的使用 一.背景 二.需求 三.分析 四.资源服务器认证流程 五.实现资源服务器 1.引入jar包 2.资源服务器配置 3.资源 六.测试 ...

  10. Noip模拟15 2021.7.14

    T1 夜莺与玫瑰 题目越发的变态起来... 这题刚开始看超级像仪仗队,好不容易码完欧拉函数后尝试×2后输出但不对!! 于是选择了跳过.... 正解居然是莫比乌斯函数....我也是醉了 预处理完就剩下$ ...