Makefile——make工具编译STM32工程
一、Makefile相关指令
1.1、变量
| 符号 | 含义 |
|---|---|
| = | 替换 |
| += | 追加 |
| := | 恒等于 |
1.2、隐含规则
| 符号 | 含义 |
|---|---|
| %.o | 任意的.o文件 |
| *.o | 所有的.o文件 |
1.3、通配符
| 符号 | 含义 |
|---|---|
| $^ | 所有依赖文件 |
| $@ | 所有目标文件 |
| $< | 所有依赖文件的第一个文件 |
1.4、编译器指令常用参数功能说明
| 符号 | 含义 | 举例 |
|---|---|---|
| -E | 预处理,主要是进行宏展开等步骤 | gcc -E test.c -> test.i |
| -S | 编译,生成汇编代码 | gcc -S test.c -> test.S |
| -c | 汇编:生成机器码 | gcc -c test.c -> test.o |
| -o | 指定文件名 |
二、Makefile文件
SHELL=cmd.exe
DIR = D:\LC\EE\Code\STM32F407\TEST
OBJ = OBJ
KEIL_PATH = D:\ProgramFiles\Keil_v5\Keil\ARM\ARMCC
ARMCC = $(KEIL_PATH)\bin\armcc
ARMASM = $(KEIL_PATH)\bin\armasm
ARMAR = $(KEIL_PATH)\bin\armar
ARMLINK = $(KEIL_PATH)\bin\armlink
FROMELF = $(KEIL_PATH)\bin\fromelf TARGET = .\$(OBJ)\TEST
# OBJMAP := .\stm32.map
OBJHTM := .\$(OBJ)\*.htm
OBJAXF := .\$(OBJ)\*.axf CFLAGS := -c --cpu Cortex-M4.fp.sp -g -O1 --apcs=interwork --split_sections -D__UVISION_VERSION="541" -DSTM32F407xx -DSTM32F40_41xxx
CMACRO :=
ASMFLAGS := --cpu Cortex-M4.fp.sp -g --apcs=interwork --pd "__UVISION_VERSION SETA 541" --pd "STM32F407xx SETA 1"
LINKFLAGS := --cpu=Cortex-M4.fp.sp
MAP := --summary_stderr --info summarysizes --map --load_addr_map_info --xref --callgraph --symbols
INFO := --info sizes --info totals --info unused --info veneersSOURCE = .\SYSTEM\delay\delay.c .\SYSTEM\sys\sys.c .\SYSTEM\usart\usart.c .\HARDWARE\LED\led.c .\USER\test.c
START = .\USER\startup_stm32f40_41xxx.sSOURCE_OBJ = $(SOURCE:%.c=%.o)
START_OBJ = $(START:%.s=%.o)OBJS = .\$(OBJ)\delay.o .\$(OBJ)\sys.o .\$(OBJ)\usart.o .\$(OBJ)\led.o .\$(OBJ)\test.o .\$(OBJ)\startup_stm32f40_41xxx.oINC += -I .\SYSTEM\delay -I .\SYSTEM\sys -I .\SYSTEM\usart -I .\HARDWARE\LEDTEST:$(SOURCE_OBJ) $(START_OBJ) TEST1TEST1:$(OBJS)@echo $(OBJS)$(ARMLINK) $(LINKFLAGS) $^ --strict --scatter .\$(OBJ)\TEST.sct $(MAP) $(INFO) --list $(TARGET).map -o $(TARGET).axf$(FROMELF) --i32combined -o $(TARGET).hex $(TARGET).axf%.o:%.c$(ARMCC) $(CFLAGS) $(INC) $(CMACRO) -D__UVISION_VERSION="541" -DSTM32F407xx -DSTM32F40_41xxx $< -o $@ move $@ $(DIR)\$(OBJ)%.o:%.s$(ARMASM) $(ASMFLAGS) $< -o $@ move $@ $(DIR)\$(OBJ).PHONY : clean
clean: -del $(OBJS) .\output\*.map .\output\*.htm .\output\*.axf .\output\*.hex
三、STM32F407工程
D:.
│ Makefile
│ README
│
├─HARDWARE
│ └─LED
│ led.c
│ led.h
│
├─OBJ
│ delay.o
│ led.o
│ startup_stm32f40_41xxx.o
│ sys.o
│ TEST.axf
│ TEST.hex
│ TEST.htm
│ TEST.map
│ test.o
│ TEST.sct
│ usart.o
│
├─SYSTEM
│ │ readme.txt
│ │
│ ├─delay
│ │ delay.c
│ │ delay.h
│ │
│ ├─sys
│ │ core_cm4.h
│ │ core_cm4_simd.h
│ │ core_cmFunc.h
│ │ core_cmInstr.h
│ │ stm32f4xx.h
│ │ sys.c
│ │ sys.h
│ │ system_stm32f4xx.h
│ │
│ └─usart
│ usart.c
│ usart.h
│
└─USERstartup_stm32f40_41xxx.stest.c
四、STM32启动过程
- 初始化堆栈指针 SP = _initial_sp
- 初始化程序计数器指针 PC = Reset_Handler
- 设置堆和栈的大小
- 初始化中断向量表
- 配置外部SRAM作为数据存储器(可选)
- 配置系统时钟,通过调用SystemInit函数(可选)
- 调用C库中的 _main 函数初始化用户堆栈,最终调用 main 函数
相关文章:
Makefile——make工具编译STM32工程
一、Makefile相关指令 1.1、变量 符号含义替换追加:恒等于 1.2、隐含规则 符号含义%.o任意的.o文件*.o所有的.o文件 1.3、通配符 符号含义$^所有依赖文件$所有目标文件$<所有依赖文件的第一个文件 1.4、编译器指令常用参数功能说明 符号含义举例-E预处理,…...
Java EE 进阶:SpringBoot 配置⽂件
什么是配置文件 “配置文件”是一个用来保护程序或者系统设置信息的文件,它的作用是让程序在启动或者运行中,能够读取这些设置并按预期进行工作,而不需要手动的设置。 Spring Boot 配置文件 设置服务器端口、编码格式配置数据库连接控制日…...
【redis】五种数据类型和编码方式
文章目录 五种数据类型编码方式stringhashlistsetzset查询内部编码 五种数据类型 字符串:Java 中的 String哈希:Java 中的 HashMap列表:Java 中的 List集合:Java 中的 Set有序集合:除了存 member 之外,还有…...
基于Python的电商销售数据分析与可视化系统实
一、系统架构设计 1.1系统流程图 #mermaid-svg-Pdo9oZWrVHNuOoTT {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-Pdo9oZWrVHNuOoTT .error-icon{fill:#552222;}#mermaid-svg-Pdo9oZWrVHNuOoTT .error-text{fill:#5…...
色板在数据可视化中的创新应用
色板在数据可视化中的创新应用:基于色彩感知理论的优化实践 引言 在数据可视化领域,色彩编码系统的设计已成为决定信息传递效能的核心要素。根据《Nature》期刊2024年发布的视觉认知研究,人类大脑对色彩的识别速度比形状快40%,色…...
EB-Cable许可管理中的数据安全与隐私保护
在数字化时代,数据安全与隐私保护已成为企业关注的重中之重。作为专业的电缆管理软件,EB-Cable许可管理不仅在功能丰富和操作便捷方面表现出色,更在数据安全与隐私保护方面为用户提供了坚实的保障。本文将详细介绍EB-Cable许可管理在数据安全…...
解决ubuntu(jetpack)系统下系统盘存储不够的
以下是可以安全清理的内容及操作步骤,按优先级和风险从低到高排序: 1. 清理日志文件(低风险) /var/log/syslog (7.1G) # 清空syslog文件(不删除文件本身) sudo truncate -s 0 /var/log/syslog# 或限制sys…...
【无人机路径规划】基于麻雀搜索算法(SSA)的无人机路径规划(Matlab)
效果一览 代码获取私信博主基于麻雀搜索算法(SSA)的无人机路径规划(Matlab) 一、算法背景与核心思想 麻雀搜索算法(Sparrow Search Algorithm, SSA)是一种受麻雀群体觅食行为启发的元启发式算法࿰…...
STM32_GPIO系统外设学习
按照STM32MCUWIKI、参考手册的外设介绍----->CubeF4的软件包中相关的Exmple代码----->CubeMX设置截图加深理解记忆 资料链接:嵌入式开发_硬软件的环境搭建 我的飞书文档-GPIO篇 如果觉得内容不错,欢迎给我的飞书文档点赞。同时如果有什么意见或…...
使用Java爬虫根据关键词获取衣联网商品列表:实战指南
在电商领域,通过关键词搜索商品并获取商品列表是常见的需求。衣联网作为知名的电商平台,提供了丰富的服装商品资源。本文将详细介绍如何使用Java编写爬虫程序,根据关键词获取衣联网商品列表,并确保爬虫行为符合平台规范。 一、环…...
【操作系统安全】任务1:操作系统部署
目录 一、VMware Workstation Pro 17 部署 二、VMware Workstation 联网方式 三、VMware 虚拟机安装流程 四、操作系统介绍 五、Kali 操作系统安装 六、Windows 系统安装 七、Windows 系统网络配置 八、Linux 网络配置 CSDN 原创主页:不羁https://blog.csd…...
下载安装启动 VMware 个人免费版本
一、进入官网并登录账号下载软件 进入官网 [ https://www.vmware.com ],点击Products,将页面划到最底下,点击 “SEE DESKTOP HYPERVISORS”按钮。 然后点击 Desktop hypevisor ,会出现如下界面,可以根据自己的操作系…...
C#+AForge 实现视频录制
C#AForge 实现视频录制 在C#中,使用AForge 库实现视频录制功能是一个比较直接的过程。AForge 是一个开源的.NET框架,提供了许多用于处理图像和视频的类库。 开发步骤 安装AForge库 首先,确保你的项目中已经安装了 AForge.Video和AFo…...
doris:外表统计信息
外表统计信息的收集方式和收集内容与内表基本一致,目前支持对 Hive,Iceberg 和 Hudi 等外部表的收集。 自 2.0.3 版本之后,Hive 外表支持了自动和采样收集。 注意事项 HMS 类型的 Iceberg 和 Hudi 外表,以及 JDBC 外表只支持手…...
SAP SD学习笔记31 - 销售BOM
上一篇讲 前受金处理(预付款处理)。 SAP SD学习笔记29 - 前受金处理(预收款处理)_fplt 付款申请与sd 数据表的关联关系-CSDN博客 本章继续讲SAP SD模块的其他知识:销售BOM。 销售BOM在现场还是会用到的。 目录 1,销售BOM概要 2,受注BOM的…...
大数据学习(63)- Zookeeper详解
&&大数据学习&& 🔥系列专栏: 👑哲学语录: 用力所能及,改变世界。 💖如果觉得博主的文章还不错的话,请点赞👍收藏⭐️留言📝支持一下博主哦🤞 …...
嵌入式八股C语言---面向对象篇
面向对象与面向过程 面向过程 就是把整个业务逻辑分成多个步骤,每步或每一个功能都可以使用一个函数来实现面向对象 对象是类的实例化,此时一个类就内部有属性和相应的方法 封装 在C语言里实现封装就是实现一个结构体,里面包括的成员变量和函数指针,然后在构造函数中,为结构体…...
Android UI性能优化
Android UI性能优化 一、UI性能优化基础 1.1 UI渲染原理 Android系统的UI渲染是通过一个被称为"UI线程"或"主线程"的单线程模型来完成的。系统会以16ms(约60fps)的固定时间间隔发送VSYNC信号,触发UI的渲染流程。如果一帧的处理时间超过16ms,就会出现丢…...
C# ListView设置标题头背景颜色和字体颜色
一、向ListView 添加数据 for (int i 1; i < 5; i) {ListViewItem litem new ListViewItem("data:"i);lv_WarnList.Items.Add(litem); }如果需要在ListView中绑定实体类对象的话,需要将数据放在Tag属性里 for (int i 1; i < 5; i) {AngleData …...
数字统计(信息学奥赛一本通-1096)
【题目描述】 请统计某个给定范围[L, R]的所有整数中,数字2出现的次数。比如给定范围[2, 22],数字2在数2中出现了1次,在数12中出现1次,在数20中出现1次,在数21中出现1次,在数22中出现2次,所以数…...
嵌入式 ARM Linux 系统构成(6):应用层(Application Layer)
目录 一、应用层概述 二、应用层的核心组成 2.1 主应用程序(Main Applications) 2.2 系统服务(System Services) 2.3 用户界面(User Interface) 2.4 脚本与自动化工具 2.5 第三方库与框架 2.6 通信…...
【HTML】一、基础标签
文章目录 1、开发环境准备2、html介绍3、html基本骨架4、标签的关系5、常用标签5.1 标题5.2 段落5.3 换行与水平线5.4 文本格式化标签5.5 图像标签5.6 超链接标签5.7 音频标签5.8 视频标签 6、路径7、网页制作 1、开发环境准备 在编辑器中写代码,在浏览器中看效果 …...
区块链与去中心化技术
区块链与去中心化技术 核心进展 区块链从加密货币(如比特币)扩展至智能合约和供应链管理。以太坊2.0引入分片技术提升交易吞吐量,而零知识证明(ZKP)增强了隐私保护15。企业级应用如IBM的Food Trust平台通过区块链追踪…...
Oracle监听器启动出错:本地计算机上的OracleOraDb11g_home1TNSListener服务启动出错
导致报错的操作 在已安装了oracle11g版本后再安装oracle9i客户端在安装了oracle11g后修改了主机名称 解决方法 修改配置文件的主机名称 可能是因为你的Oracle文件配置的主机名称出了问题,在你的Oarcle安装路径D:\app\lenovo\product\11.2.0\dbhome_1\NETWORK\ADM…...
centos7通过yum安装redis
centos7通过yum安装redis 1.安装redis数据库 yum install -y redis2.启动redis服务 systemctl start redis3.查看redis状态 systemctl status redis4、停止服务 systemctl stop redis5、重启服务 systemctl restart redis6、查看redis进程 ps -ef | grep redis7、开放端…...
AutoMQ x OSS 的 Iceberg 数据入湖的最佳实践
背景 在数字化转型进程中,用户交互行为产生的多维度数据已成为企业的重要战略资产。以短视频平台为例,基于用户点赞事件的实时推荐算法能显著提升用户活跃度和平台粘性。这类实时数据主要通过 Apache Kafka 流处理平台进行传输,通过其扇出&a…...
【Help Manual】导出PDF中英文不在一行解决方案
在使用Help Manual 的时候,会出现导出PDF时,中英文在同一行出现水平不对齐的问题。如下: 解决方案: 结果如下:...
计算机网络:计算机网络的分类
按分布范围分类:广域网,城域网,局域网,个域网 按传输技术分类:广播式网络,点对点网络 按拓扑结构分类:总线型,环形,星形,网状 按传输介质分类:…...
Spring Boot3整合Knife4j(4.5.0)
整体概述 Spring Boot 是用于简化 Spring 应用开发的框架,通过自动配置和约定大于配置原则,能让开发者快速搭建和运行 Spring 应用。Knife4j 是基于 Swagger 增强的 API 文档生成工具,可方便展示和调试 API 接口,生成美观易用的 …...
Scala编程_实现Rational的基本操作
在Scala中实现一个简单的有理数(Rational)类,并对其进行加法、比较等基本操作. 有理数的定义 有理数是可以表示为两个整数的比值的数,通常形式为 n / d,其中 n 是分子,d 是分母。为了确保我们的有理数始终…...
