i.MX6裸机开发(7):整理工程文件

2024-08-24 12:04
文章标签 裸机 整理 开发 工程 mx6

本文主要是介绍i.MX6裸机开发(7):整理工程文件,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

为降低难度,在之前章节我们把程序所有内容放在一个文件夹下。 这样做存在两个主要问题,第一,代码存放混乱不易阅读。第二,程序可移植性差。

本章将对代码进行简单的整理,让程序存放更有条理。

本章主要内容:

  • 创建文件夹分类存储代码

  • 修改makefile

1. 分类存储代码

本章的示例代码目录为:bare_metal/button_adj

本章程序基于按键检测程序*bare_metal/button*。修改后的程序结构如下图所示。

未找到图片

结合上图说明如下:

  • base.lds,将button.lds更改为base.lds。连接脚本与具体的外设无关,并且后面的程序我们几乎不会去修改链接脚本,这里把它修改为base.lds,你也可以根据自己喜好命令,只要和makefile中一致即可。

  • device文件夹,保存外设驱动的源文件(.c文件)。

  • include文件夹,保存程序中使用的头文件。

  • makefile,主makefile 。在主makefile中会调用“device”文件夹下的子makefile.

2. 修改makefile

修改makefile主要包括两部分, 第一部分,在“device”文件夹下添加并编写子makefile, 第二部分,修改主makefile。

2.1. 编写子makefile

子makefile用于将“device”文件夹下的驱动源文件编译为一个“.o”文件,完整内容如下所示。

all : button.o  led.oarm-none-eabi-ld -r $^  -o device.o%.o : %.carm-none-eabi-gcc ${header_file} -c $^%.o : %.Sarm-none-eabi-gcc ${header_file} -c $^.PHONY: clean
clean:-rm -f *.o *.bak

结合代码,各部分简单说明如下:

  • 第1-2行: 链接生成最终目标“device.o”。如果程序中新增了某个外设驱动程序,只需要将对应的“.o”文件填入“依赖”处即可。

  • 第4-5行: 编译“device”文件夹下的所有“.c”文件并生成对应的“.o”文件,其中“header_file”是头文件路径,它是定义在主makefile的变量。

  • 第7-8行: 编译“device”文件夹下的所有“.S”文件并生成对应的“.o”文件,其中“header_file”是头文件路径,它是定义在主makefile的变量。

2.2. 修改主makefile

主makefile的改动主要有两点,第一,在编译命令中指明头文件位置,第二,使用命令调用子makefile,生成依赖文件。完整的代码如下所示。

#定义变量,用于保存编译选项和头文件保存路径
header_file := -fno-builtin -I$(shell pwd)/include
export header_fileall : start.o main.o device/device.oarm-none-eabi-ld -Tbase.lds $^ -o base.elfarm-none-eabi-objcopy -O binary -S -g base.elf base.bin%.o : %.Sarm-none-eabi-gcc -g -c $^
%.o : %.carm-none-eabi-gcc $(header_file) -c $^#调用其他文件的makefile
device/device.o :make -C device all#定义清理伪目标
.PHONY: clean
clean:make -C device clean-rm -f *.o *.elf *.bin

结合代码,各部分简单说明如下:

  • 第2-3行: 定义变量 “header_file”。在makefile中“变量”更像C原因中的宏定义。“-fno-builtin”是一个编译选项,用于解决库函数与自己编写函数同名问题。“-I$(shell pwd)/include”用于指定头文件路径。“header_file”用“export”声明后可以在其他makefile中调用

  • 第5-7行: makefile最终目标,与原文件相比,这里只是修改了文件的名字。

  • 第9-12行: 定义生成“.o”文件的相关内容

  • 第15-16行: 定义生成“device/device.o”的命令,“device.o”文件由子makefile生成,所以这里只需要调用子makefile即可。

  • 第19-22行: 定义清理伪目标。在清理命令中不但要清理主makefile所在文件夹的内容还要调用子makefile的清理命令以清理子makefile所在文件夹的内容。

3. 编译和烧录

在bare_metal/button_adj/目录下执行make,当前目录生成base.bin。 可参考 第八章节GPIO输入—按键查询检测 ,重新烧录base.bin,且两者效果相同。

这篇关于i.MX6裸机开发(7):整理工程文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1102423

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

基于Python开发PPTX压缩工具

《基于Python开发PPTX压缩工具》在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,不便于传输和存储,所以本文将使用Python开发一个PPTX压缩工具,需要的可以了解下... 目录引言全部代码环境准备代码结构代码实现运行结果引言在日常办公中,PPT文件往往因为图片过大而导致文件体积过大,

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

基于Python开发电脑定时关机工具

《基于Python开发电脑定时关机工具》这篇文章主要为大家详细介绍了如何基于Python开发一个电脑定时关机工具,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1. 简介2. 运行效果3. 相关源码1. 简介这个程序就像一个“忠实的管家”,帮你按时关掉电脑,而且全程不需要你多做

Java中的Opencv简介与开发环境部署方法

《Java中的Opencv简介与开发环境部署方法》OpenCV是一个开源的计算机视觉和图像处理库,提供了丰富的图像处理算法和工具,它支持多种图像处理和计算机视觉算法,可以用于物体识别与跟踪、图像分割与... 目录1.Opencv简介Opencv的应用2.Java使用OpenCV进行图像操作opencv安装j

基于Qt开发一个简单的OFD阅读器

《基于Qt开发一个简单的OFD阅读器》这篇文章主要为大家详细介绍了如何使用Qt框架开发一个功能强大且性能优异的OFD阅读器,文中的示例代码讲解详细,有需要的小伙伴可以参考一下... 目录摘要引言一、OFD文件格式解析二、文档结构解析三、页面渲染四、用户交互五、性能优化六、示例代码七、未来发展方向八、结论摘要

在 VSCode 中配置 C++ 开发环境的详细教程

《在VSCode中配置C++开发环境的详细教程》本文详细介绍了如何在VisualStudioCode(VSCode)中配置C++开发环境,包括安装必要的工具、配置编译器、设置调试环境等步骤,通... 目录如何在 VSCode 中配置 C++ 开发环境:详细教程1. 什么是 VSCode?2. 安装 VSCo

C#图表开发之Chart详解

《C#图表开发之Chart详解》C#中的Chart控件用于开发图表功能,具有Series和ChartArea两个重要属性,Series属性是SeriesCollection类型,包含多个Series对... 目录OverviChina编程ewSeries类总结OverviewC#中,开发图表功能的控件是Char

鸿蒙开发搭建flutter适配的开发环境

《鸿蒙开发搭建flutter适配的开发环境》文章详细介绍了在Windows系统上如何创建和运行鸿蒙Flutter项目,包括使用flutterdoctor检测环境、创建项目、编译HAP包以及在真机上运... 目录环境搭建创建运行项目打包项目总结环境搭建1.安装 DevEco Studio NEXT IDE

Python开发围棋游戏的实例代码(实现全部功能)

《Python开发围棋游戏的实例代码(实现全部功能)》围棋是一种古老而复杂的策略棋类游戏,起源于中国,已有超过2500年的历史,本文介绍了如何用Python开发一个简单的围棋游戏,实例代码涵盖了游戏的... 目录1. 围棋游戏概述1.1 游戏规则1.2 游戏设计思路2. 环境准备3. 创建棋盘3.1 棋盘类