6.模块化工程创建

一、模块化工程管理

​ 即模块化编程,将同属性文件分存管理机制。使得杂乱无章的工程变得有条有序,干净整洁的目录界面,分工有序。不同的目录下存放同一类

在这里插入图片描述

​ 创建project , bsp , include, obj目录。bsp下设各个外设的子目录。

​ 将project目录下存放main.c 与start.s等主要文件;bsp目录存放外设程序;include目录下存放芯片寄存器的头文件;obj存放编译后升成的.o文件。

​ 整理好工程以后,需要配置头文件。利用vscode的c/c++:ed插件,可以帮助我们快速定位头文件设置文件,会升成一个c_cpp_properties.json文件。

​ 并且在c_cpp_properties.json文件下找添加要找的索引。

在这里插入图片描述

二、Makefile

​ Makefile指定头文件路径需要-I。

​ 准备原材料变量----所有的头文件路径,C,S程序路径,.S文件,所有的.o文件。

CROSS_COMPILE		?= arm-linux-gnueabihf-
TARGET			    ?= led

CC 				:= $(CROSS_COMPILE)gcc
LD				:= $(CROSS_COMPILE)ld
OBJDUMP    		 :=	$(CROSS_COMPILE)objdump
OBJCOPY			:=	$(CROSS_COMPILE)objcopy

INCLUDIRS		:= imx6ull bsp/clk bsp/delay bsp/led
SRCDIRS			:= project bsp/clk bsp/delay bsp/led

INCLUDE			:= $(patsubst %, -I %, $(INCLUDIRS))
SFILES			:= $(foreach dir , $(SRCDIRS) ,$(wildcard $(dir)/*.S))
CFILES			:= $(foreach dir ,$(SRCDIRS) , $(wildcard $(dir)/*.c))

SFILENDIR		:= $(notdir $(SFILES))
CFILENDIR		:= $(notdir $(CFILES))

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

OBJS			:= $(SOBJS)$(COBJS)

VPATH			:= $(SRCDIRS)
.PHONY:clean
$(TARGET).bin : $(OBJS) 

$(SOBJS): obj/%.o : %.S
	$(CC) -Wall  -nostdlib -c -O2 $(INCLUDE)-o $@ $<
$(COBJS): obj/%.o : %.c
	$(CC) -Wall  -nostdlib -c -O2 $(INCLUDE)-o $@ $<
clean:
	rm -rf *.o *.bin *.dis *.elf

从Makefile中要了解的知识

​ 一个工程首先会将源文件编译为.o文件,然后将这些目标文件进行链接生成可执行的文件elf,elf文件是一个二进制文件,但是它还包含一些非程序的信息,因此还要进行转成.bin的二进制文件。

​ 转换为.o的过程:

​ 在转换成中间的目标文件时,编译器所做的是检查程序的语法错误,已经该源文件中所调用的函数,变量是否被声明。未声明只会给warning,依然可以生成.o

​ 转换为.elf的过程:

​ 链接器会寻找函数的实现,如果找不到就会报错。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值