[ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建
搭建一个嵌入式开发环境主要包括以下几个部分:
- 安装交叉编译器
- 配置集成开发环境(IDE)
- 安装调试工具
- 下载和烧录程序
接下来,我们将详细介绍每个部分,并提供相应的实例。
- 安装交叉编译器
交叉编译器是用于将您编写的ARM汇编代码编译成可执行文件的工具。在本教程中,我们将使用GNU ARM Embedded Toolchain作为交叉编译器。
请按照以下步骤安装GNU ARM Embedded Toolchain:
访问 GNU ARM Embedded Toolchain官方网站 下载相应的安装包。根据您的操作系统选择合适的版本(Windows、Linux或macOS)。
下载完成后,解压并安装。确保将安装目录的
bin子目录添加到系统的PATH环境变量中,这样您可以在命令行中直接运行交叉编译器。打开命令行窗口,输入以下命令以验证安装是否成功:
arm-none-eabi-gcc --version
成功安装后,您应该能看到类似的输出信息:
arm-none-eabi-gcc (GNU Arm Embedded Toolchain 10.3-2021.07) 10.3.1 20210701 (release)
Copyright (C) 2021 Free Software Foundation, Inc.
- 配置集成开发环境(IDE)
集成开发环境(IDE)是用于编写、编译、调试和运行代码的软件。在本教程中,我们将使用Visual Studio Code(VS Code)作为IDE。
请按照以下步骤安装和配置VS Code:
访问 Visual Studio Code官方网站 下载并安装适合您操作系统的版本。
安装完成后,打开VS Code,并从扩展市场搜索并安装以下扩展:
- Cortex-Debug:用于支持ARM Cortex-M微控制器的调试功能
- ARM Assembly Highlighting:用于提供ARM汇编语言的语法高亮支持
- 安装调试工具
为了在嵌入式系统上调试程序,您需要一个硬件调试器(如ST-Link、J-Link等)和相应的调试软件。在本教程中,我们将使用ST-Link作为硬件调试器,以STM32F103微控制器为例。
请按照以下步骤安装调试工具:
访问 ST-Link官方网站 下载并安装ST-Link驱动程序。
根据您的操作系统下载并安装 STM32CubeProgrammer。STM32CubeProgrammer是用于下载程序到STM32微控制器的工具。
- 下载和烧录程序
现在,我们已经准备好搭建嵌入式开发环境。接下来,我们将演示如何编写一个简单的ARM汇编程序,然后将其烧录到STM32F103微控制器上。
假设我们要编写一个程序,使得STM32F103的一个LED灯以1Hz的频率闪烁。我们将使用ARM汇编语言编写代码,并使用我们刚刚搭建的开发环境进行编译、下载和烧录。
a. 编写汇编代码
在VS Code中创建一个名为led_blink.s的新文件,并输入以下汇编代码:
.syntax unified
.cpu cortex-m3
.thumb
.global _start
_start:
// 初始化堆栈
ldr r0, =_stack_top
mov sp, r0
// 调用main函数
bl main
// 无限循环
loop_forever:
b loop_forever
.section .text.main
.thumb_func
.align 2
main:
// 在此编写闪烁LED的汇编代码
// 返回
bx lr
.section .stack
.align 3
_stack_top:
b. 编译汇编代码
打开命令行窗口,进入到led_blink.s文件所在的目录,然后运行以下命令编译汇编代码:
arm-none-eabi-as -mcpu=cortex-m3 -mthumb -g -o led_blink.o led_blink.s
arm-none-eabi-ld -Ttext 0x08000000 -o led_blink.elf led_blink.o
arm-none-eabi-objcopy -O binary led_blink.elf led_blink.bin
这将生成一个名为led_blink.bin的二进制文件,我们将把这个文件烧录到STM32F103微控制器上。
c. 烧录程序
确保您的ST-Link调试器已连接到STM32F103微控制器,然后运行以下命令使用STM32CubeProgrammer将程序烧录到微控制器上:
STM32_Programmer_CLI -c port=SWD -w led_blink.bin 0x08000000
完成烧录后,您应该能看到STM32F103微控制器上的LED灯以1Hz的频率闪烁。
通过以上步骤,您已经成功搭建了一个嵌入式开发环境,并使用ARM汇编编写、编译、下载和烧录了一个简单的程序。接下来,您可以尝试编写更复杂的程序,深入学习ARM汇编编程。
推荐阅读:
https://mp.weixin.qq.com/s/dV2JzXfgjDdCmWRmE0glDA
https://mp.weixin.qq.com/s/an83QZOWXHqll3SGPYTL5g

[ARM 汇编]高级部分—ARM汇编编程实战—3.3.2 嵌入式开发环境搭建的更多相关文章
- Flask框架的学习与实战(一):开发环境搭建
Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2.很多功能的实现都参考了django框架.由于项目需要,在 ...
- Unix/Linux环境C编程入门教程(8) FreeBSD CCPP开发环境搭建
1. FreeBSD是一种自由类Unix操作系统,是由经过BSD.386BSD和4.4BSD发展而来的类Unix的一个重要分支.FreeBSD拥有超过200名活跃开发者和上千名贡献者.FreeBSD被 ...
- Unix/Linux环境C编程入门教程(17) Gentoo LinuxCCPP开发环境搭建
1. Gentoo Linux是一套通用的.快捷的.完全免费的Linux发行,它面向开发人员和网络职业人员.与其他发行不同的是,Gentoo Linux拥有一套先进的包管理系统叫作Portage.在B ...
- Unix/Linux环境C编程入门教程(16) LinuxMint CCPP开发环境搭建
1. Linux Mint由Linux Mint Team团队于2006年开始发行,是一份基于 这个时候linuxmint安装完成,C/C++开发环境也配置完成,希望大家认真实践!
- Unix/Linux环境C编程入门教程(14) Mandriva LinuxCCPP开发环境搭建
1. Mandriva是目前全球最优秀的Linux发行版之一,稳居于linux排行榜第一梯队. Mandriva公司现在仍然是 这个时候mandriva Linux系统安装完成,基于Mandriva的 ...
- Unix/Linux环境C编程入门教程(9) unbntu CCPP开发环境搭建
1. 首先启动VMware,如果没有安装,请查看前面VMware的安装视频 2 启动虚拟机向导,选择自定义 3 单击下一步 4 选择稍后安装操作系统 5 .选择unbntu 64linux ...
- 8086汇编语言学习(二) 8086汇编开发环境搭建和Debug模式介绍
1. 8086汇编开发环境搭建 在上篇博客中简单的介绍了8086汇编语言.工欲善其事,必先利其器,在8086汇编语言正式开始学习之前,先介绍一下如何搭建8086汇编的开发环境. 汇编语言设计之初是用于 ...
- 构建 ARM Linux 4.7.3 嵌入式开发环境 —— U-BOOT 引导 Kernel
经过若干天的反复测试,搜索.终于成功利用 Qemu 在 u-boot 下引导 ARM Linux 4.7.3 内核.如下详细解释整个构建过程. 准备环境 运行环境:Ubuntu 16.04 需要的虚拟 ...
- 基于全志H3芯片的ARM开发环境搭建
基于全志H3芯片的ARM开发环境搭建 最近买了个友善之臂的NanoPi M1板子,又在网上申请了个NanoPi NEO板子,这两个都是基于全志H3芯片的Crotex-A7四核ARM开发板,两个板子可以 ...
- 开始JAVA编程的敲门砖——JAVA开发环境搭建
从头开始的java编程--JAVA开发环境搭建 一.什么是java的开发环境? 顾名思义java的开发环境是提供并保证整个java程序开发运行的必要的环境,搭建java开发环境是开始java编程的敲门 ...
随机推荐
- 一些随笔 No.1
耦合 耦合是一个设计与逻辑上的问题 例如一个软件有20个功能,删除任意一个功能对别的19个功能不造成影响,就是低耦合 如果删除一个功能后其他功能会失去完整性,那么就是高耦合 Difference be ...
- 强大的 apt-get 命令
强大的 apt-get 命令(小结) 一.ubuntu下管理软件最方便的非 apt-get 工具莫属了,它的常见用法稍微整理一下供以后参考(详细见 man apt-get ): 1.更新源,升级软件和 ...
- pysimplegui之使用多线程,避免程序卡死
这个问题我也遇到过,就是还需要一个while循环的时候,放到gui本身循环会卡死,这时候就需要启动多线程 需要"长时间"的操作 如果您是 Windows 用户,您会在其标题栏中看到 ...
- Unity学习笔记01 —— 编辑器
场景Scene 基本操作 按下鼠标滚轮拖动场景,滑动滚轮缩放场景. 鼠标右键旋转场景,点击""后,通过左键移动场景. 点击右键同时按下W/S/A/D/Q/E键可实现场景漫游. 在S ...
- 【Spring注解驱动】(二)AOP及一些扩展原理
1 AOP动态代理简介及功能实现 1.1 简介 指在程序运行期间动态地将某段代码切入到指定方法的指定位置进行运行的方式. 1.2 功能实现测试 功能:实现在业务逻辑运行的时候将日志打印 ①导入aop模 ...
- 2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是
2023-02-13:力扣数据中心有 n 台服务器,分别按从 0 到 n-1 的方式进行了编号 它们之间以「服务器到服务器」点对点的形式相互连接组成了一个内部集群 其中连接 connections 是 ...
- 2020-12-29:mysql中,innodb表里,某一条数据删除了之后,这条数据会被真实的擦掉吗,还是删除了关系?
福哥答案2020-12-29:[答案来自此链接,答案相当详细:](https://www.zhihu.com/question/436957843)面试的时候受 <MySQL技术内幕 InnoD ...
- 2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据。数据库不能停,并且还有增删改操作。请问如何操作?
2020-01-20:mysql中,一张表里有3亿数据,未分表,要求是在这个大表里添加一列数据.数据库不能停,并且还有增删改操作.请问如何操作?福哥答案2020-01-20: 陌陌答案:用pt_onl ...
- 2021-08-24:合并石头的最低成本。有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头。每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的
2021-08-24:合并石头的最低成本.有 N 堆石头排成一排,第 i 堆中有 stones[i] 块石头.每次移动(move)需要将连续的 K 堆石头合并为一堆,而这个移动的成本为这 K 堆石头的 ...
- 【Qt 6】读写剪贴板
剪贴板是个啥就不用多介绍了,最直观的功能是实现应用程序之间数据共享.就是咱们常说的"复制"."粘贴"功能. 在 Qt 中,QClipboard 类提供了相关 A ...