【ARM】eclipse 中创建汇编工程

eclipse 中创建汇编工程

  • [一. 安装编译器和相关工具](#一. 安装编译器和相关工具)
  • [二. 创建工程](#二. 创建工程)
  • [三. 创建各类文件](#三. 创建各类文件)
    • [1. 创建 Makefile 文件](#1. 创建 Makefile 文件)
    • [2. 创建链接脚本文件](#2. 创建链接脚本文件)
    • [3. 创建汇编文件](#3. 创建汇编文件)
    • [4. 编译程序](#4. 编译程序)
    • [5. 创建连接仿真器的文件](#5. 创建连接仿真器的文件)
  • [四. 在开发板运行,并用eclipse中调试](#四. 在开发板运行,并用eclipse中调试)
    • [1. 连接开发板,打开调试串口](#1. 连接开发板,打开调试串口)
    • [2. 运行openOCD](#2. 运行openOCD)
    • [3. 配置eclipse,调试程序](#3. 配置eclipse,调试程序)
      • [3.1. 设置elf文件](#3.1. 设置elf文件)
      • [3.2. 配置编译器](#3.2. 配置编译器)
      • [3.3. 设置初始化指令](#3.3. 设置初始化指令)
      • [3.4. 点击调试,会看到如下界面](#3.4. 点击调试,会看到如下界面)
      • [3.5. 单步调试程序,查看寄存器变化](#3.5. 单步调试程序,查看寄存器变化)

参考:Cortex-A7 开发环境搭建

本文的目的在于帮你在主机上搭建一套完整的 Cortex-A7 交叉开发环境,从工具链安装到仿真、烧录与调试,为后续驱动与系统开发打下基础。假定你已学会了 Linux 基础命令、嵌入式交叉编译概念。

本文解决的问题有:

  • 选择并配置适合 Cortex-A7 的交叉编译工具链
  • 搭建适用于 Linux/Windows/macOS 的主机开发环境
  • 构建常见软件栈:U-BootLinux 内核、根文件系统(BusyBox/Buildroot
  • 使用 QEMU 进行 Cortex-A7 模拟调试
  • 向真实开发板烧录镜像并进行串口/JTAG 调试
  • 常见问题定位与环境复现方法

一. 安装编译器和相关工具

复制代码
总体流程拆解
 1.搭建主机依赖环境
 2.安装交叉工具链并配置环境变量
 3.获取并编译三大件:U-Boot、Linux、根文件系统
 4.在 QEMU 上验证基础环境
 5.连接真实硬件完成烧录与调试
 6.建立自动化脚本与版本管理

二. 创建工程

三. 创建各类文件

1. 创建 Makefile 文件

内容如下:

bash 复制代码
SHELL = C:\Windows\System32\cmd.exe
CROSS_COMPILE := arm-none-eabi-
NAME := h_project
CPPFLAGS := -nostdlib -nostdinc -g
CFLAGS := -Wall -O2 -fno-builtin -g
LD := $(CROSS_COMPILE)ld
CC := $(CROSS_COMPILE)gcc
OBJCOPY := $(CROSS_COMPILE)objcopy
OBJDUMP := $(CROSS_COMPILE)objdump
export CC LD OBJCOPY OBJDUMP CPPFLAGS CFLAGS
objs := start.o
all: $(objs)
 $(LD) -T map.lds -o $(NAME).elf $^
 $(OBJCOPY) -O binary $(NAME).elf $(NAME).bin
 $(OBJDUMP) -D $(NAME).elf > $(NAME).dis
%.o: %.S
 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
%.o: %.c
 $(CC) $(CPPFLAGS) $(CFLAGS) -o $@ $< -c
clean:
 rm *.o *.elf *.bin *.dis

2. 创建链接脚本文件

内容如下:

bash 复制代码
OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm")
ENTRY(_start)
OUTPUT_ARCH(arm)
SECTIONS
{
 . = 0xc2000040;
 . = ALIGN(4);
 .text :
 {
 start.o(.text)
 *(.text)
 }
 . = ALIGN(4);
 .rodata :
 {
 *(.rodata)
 }
 . = ALIGN(4);
 .data :
 {
 *(.data)
 }
 . = ALIGN(4);
 .bss :
 {
 *(.bss)
 }
}

3. 创建汇编文件

内容如下:

bash 复制代码
.text
.global _start
_start:
 mov r0, #0x9
 nop
mov r1, #0x7
 bl add_sub
stop:
 b stop
add_sub:
 add r2, r0,r1
 sub r3, r0,r1
 mul r4, r0,r1
 mov pc,lr

4. 编译程序

编译:

生成一下文件:

5. 创建连接仿真器的文件

内容如下:

bash 复制代码
target remote localhost:3334
monitor halt

四. 在开发板运行,并用eclipse中调试

1. 连接开发板,打开调试串口

2. 运行openOCD

输入下面命令:

bash 复制代码
 .\openocd.exe -s .\scripts\ -f board\stm32mp15x_fsmp1a.cfg

3. 配置eclipse,调试程序

3.1. 设置elf文件

3.2. 配置编译器

3.3. 设置初始化指令

3.4. 点击调试,会看到如下界面

3.5. 单步调试程序,查看寄存器变化

以上,欢迎有从事同行业的电子信息工程、互联网通信、嵌入式开发的朋友共同探讨与提问,我可以提供实战演示或模板库。希望内容能够对你产生帮助!

相关推荐
点灯小铭5 小时前
基于单片机的去皮计价与超重报警电子秤设计与实现
单片机·嵌入式硬件·毕业设计·课程设计·期末大作业
charlie1145141916 小时前
嵌入式现代C++教程:C++98——从C向C++的演化(3)
c语言·开发语言·c++·笔记·学习·嵌入式
程序员zgh6 小时前
C语言 指针用法与区别(指针常量、常量指针、指针函数、函数指针、二级指针)
c语言·开发语言·jvm·c++
superman超哥7 小时前
仓颉借用检查器工作原理深度解析
c语言·开发语言·c++·python·仓颉
章鱼哥嵌入式开发8 小时前
【 STM32 ADC电压采集与串口显示系统】
stm32·单片机·课程设计·嵌入式学习·实验室测量
树上掉下一只鱼8 小时前
STM32F4xxx系列 - DAC生成噪声波
stm32
ComputerInBook8 小时前
C++编程语言:标准库:第43章——C语言标准库(Bjarne Stroustrup)
c语言·c++·c语言标准库
HappyShengxiang9 小时前
TI发布全新Cortex-M33的MCU产品MSPM33C321A
单片机·嵌入式硬件·mcu·电赛
米优9 小时前
C/C++中实现自定义自动释放堆内存空间类
c语言·开发语言·c++
✧˖‹gσσ∂ иιghт›✧10 小时前
stm32 cube max+keil5的环境怎么printf重定向
stm32·单片机·嵌入式硬件