学习嵌入式的第四十天——ARM

1.链接脚本的作用?各个段存放什么类型数据

作用:

是控制程序转换成二进制格式时的蓝图,通过自定义内存布局,段的组织,符号信息等,确保程序能在特定硬件中正确加载和运行,实现硬件适配

例如:

复制代码
SECTIONS

{

    . = 0x87800000;

    .text : 

    {

        obj/start.o

        *(.text)

    }



    .rodata ALIGN(4) : {*(.rodata*)}

    .data  ALIGN(4) : {*(.data)}



    __bss_start = .;

    .bss ALIGN(4) : {*(.bss) *(COMMON)}

    __bss_end = .;

}

1.bss段

存放未初始化或初始化为0的数据

2.COMMON段

用于存放未初始化的非静态全局变量

3.data段

用于存放已初始化的全局变量或静态变量,非0值

4.rodata段

用于存放只读的数据(如字符常量,const修饰的变量),运行时受到保护,不可修改

2.编译过程需要哪些工具,分别什么作用?

交叉编译器工具链 (arm-linux-gnueabihf-)这是针对 ARM 架构的交叉编译工具链,用于在 x86 等主机平台上编译能在 ARM 架构设备上运行的程序。

gcc (交叉编译版本:arm-linux-gnueabihf-gcc)

作用:C 语言编译器

在这里负责将 C 源代码 (.c) 和汇编源代码 (.S) 编译为目标文件 (.o)

使用了-Wall(显示所有警告)、-nostdlib(不链接标准库)、-c(只编译不链接)等选项

ld (交叉编译版本:arm-linux-gnueabihf-ld)

作用:链接器

负责将所有目标文件 (.o) 链接成可执行的 ELF 格式文件 (.elf)

通过-Timx6ull.lds指定链接脚本,控制链接过程和内存布局

objcopy (交叉编译版本:arm-linux-gnueabihf-objcopy)

作用:目标文件转换工具

在这里将 ELF 格式的可执行文件 (.elf) 转换为二进制文件 (.bin)

使用-O binary指定输出格式为二进制,-S移除符号表和重定位信息,-g移除调试信息

objdump (交叉编译版本:arm-linux-gnueabihf-objdump)

作用:目标文件反汇编工具

用于将 ELF 格式文件反汇编,生成汇编代码文本文件 (.dis)

通过-D选项对所有段进行反汇编,方便调试和分析

这些工具共同完成了从源代码到可在 ARM 设备上运行的二进制文件的完整编译流程:源代码编译→目标文件链接→格式转换→反汇编分析。

3.led点灯程序需要进行哪些步骤?

一:写启动代码:

在start.S中

包括

1.异常向量表的初始化

2.异常处理函数

3.对需要使用的模式的栈指针的初始化

4.切换到初始模式(一般是user/system模式)

二:写对应函数

包括

1.led初始化

包括:

时钟配置

复用功能寄存器配置

电气配置

输入输出模式配置

2.打开led

对对应的引脚输入能亮灯的电平,即对该引脚赋值0或1

3.关闭led

对对应的引脚输入不能亮灯的电平,即对该引脚赋值0或1

4.led闪烁

对该引脚上的值进行异或操作

5.led的延时

普通延时,通过循坏执行--来延时

三:在主函数中调用上述函数以及修改Makefile使能正常编译

相关推荐
西岸行者6 天前
学习笔记:SKILLS 能帮助更好的vibe coding
笔记·学习
悠哉悠哉愿意6 天前
【单片机学习笔记】串口、超声波、NE555的同时使用
笔记·单片机·学习
别催小唐敲代码6 天前
嵌入式学习路线
学习
毛小茛6 天前
计算机系统概论——校验码
学习
babe小鑫6 天前
大专经济信息管理专业学习数据分析的必要性
学习·数据挖掘·数据分析
winfreedoms6 天前
ROS2知识大白话
笔记·学习·ros2
在这habit之下6 天前
Linux Virtual Server(LVS)学习总结
linux·学习·lvs
我想我不够好。6 天前
2026.2.25监控学习
学习
im_AMBER6 天前
Leetcode 127 删除有序数组中的重复项 | 删除有序数组中的重复项 II
数据结构·学习·算法·leetcode
CodeJourney_J6 天前
从“Hello World“ 开始 C++
c语言·c++·学习