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

(一)链接脚本内容

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.指导链接器如何将输入的目标文件(.o文件)组合成最终的可执行文件

                理解:makefile中遍历目录寻找.s文件和.o文件时,找到的文件乱序排列,没有使启动代码start.o放在.text数据段的刚开始地址,这样使得代码开始运行时不是启动代码。链接脚本将start.o放在了.text刚开始位置。

        2.内存布局定义:指定程序各个段在内存中的起始地址和排列顺序

                __bss_start = .;                .bss段开始地址(定位寄存器)

                __bss_end = .;                .bss段结束地址

                理解:启动代码时通过此地址将未初始化值初始化未0

(二)各个数据段存放数据类型

        1.        .text:存放可执行代码(机器指令)

        2.        .rodata:只读数据:字符串常量、全局常量(const int)

        3.        .data:已初始化的全局变量和静态变量

        4.        .bss:未初始化的全局变量和静态变量

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

(一)预处理器:处理c语言中#相关代码

(二)编译器:将c语言转为汇编语言

(三)汇编器:将汇编语言转换为目标文件(前三个独立进行)

(四)链接器:将所有目标文件链接为led.elf(可执行可链接文件)文件(通过链接脚本链接起来)

(五)目标文件格式转换:将led.elf转换成不带额外信息的二进制指令集

(六)其他辅助工具

        1.反汇编目标文件:将elf反汇编为汇编文件

        2.GNU调式器:可用于单步代码调式

三、进阶Makefile

(一)bsp文件编写格式

        1.bsp文件:存放功能文件

        2.imx6ull:存放imx6ull函数库文件

        3.project:启动函数、主函数

        4.脚本文件

        5.Makefile

四、beep

(一)原理图

(二)工作原理:三极管基极电压低于发射极时三极管导通

(三)实验步骤

        1.iomuxc配置:因为每个引脚都有对应的iomuxc所以必须配置iomuxc,这里选择iomuxc_snvs中的temper1_gpio5_io01,即寄存器内容全部置0

        2.电器特性配置:IOMUXC_SNVS_SNVS_TAMPER1_GPIO5_IO01,配置为0x10B0

        3.GPIO5组的GDIR配置:因为是GPIO5_IO01所以给他置1,使其为输出模式

        4.GPIO5组的DR配置:因为是GPIO5_IO01,所以通过配置此引脚为高低电平来控制开关

更多推荐