学习嵌入式之IMAX6ULL——GUN工具链+点灯+SDK开发裸机驱动
一、GUN工具链常用工具
1.gcc
gcc (GNU Compiler Collection)
功能:编译器(Compiler)
将C/C++等高级语言源代码转换为汇编代码
再将汇编代码转换为目标文件
支持多种编程语言和目标平台
提供丰富的优化选项和编译控制选项
2.ld
ld (GNU Linker)
功能:链接器(Linker)
将多个目标文件链接成可执行文件
解析和处理符号引用
进行地址分配和重定位
处理库文件的链接
3.objcopy
objcopy (Binary File Converter)
功能:目标文件格式转换器
在不同格式的目标文件之间进行转换
将ELF格式转换为纯二进制格式(.bin)
从目标文件中提取特定的段(sections)
修改目标文件的内容
常用于嵌入式开发中的固件生成
4.objdump
objdump (Object File Disassembler)
功能:目标文件分析器/反汇编器
将机器码反汇编为汇编代码
查看目标文件的详细信息
分析程序的执行指令
显示各种文件格
二、编写C代码(点灯)
volatile (易变的、多变的)关键字:禁止编译器进行优化,必须根据指针间接访问所指向的地址;
功能引脚:
方向寄存器:
数据寄存器:
代码展示:
三、SDK(软件开发工具)
- 直接使用定义好的相关寄存器,节省时间
SDK使用原理
寄存器地址是连续的,利用结构体装载内容,并宏定义该结构体的首地址;
四、链接脚本
这里每个格子我们称为段。其中我们经常关注的 有.text段保存的是机器代码;.rodata段保存的是只读数据;.data段已初始化的全局变量段;.bss未初始化 全局变量段。图示中仅仅列出了各个段和作用,但是 这些段每个部分究竟要放在什么地址呢?这就需要链接时决定。
五、SDK开发裸机驱动
NXP 针对 I.MX6ULL 编写了一个 SDK 包,这个 SDK 包就类似于 STM32 的 STD 库或者HAL 库。库的意义在于将寄存器和对寄存器的操作用结构体和对应的函数加以封装,大大提高开发的效率,提高程序可读性等。可以说stm32的成功和意法半导体推出的SDK有着很大的关系。不是所有的半导体厂商都会为 Cortex-A 架构的芯 片编写裸机 SDK 包。
inputRegister:外设输入 IO 选择寄存器地址,有些 IO 在设置为其他的复用功能以后还需要设置 IO 输入寄存器, 比如 GPIO1_IO03 要复用为 UART1_RX 的话还需要设置
寄存器UART1_RX_DATA_SELECT_INPUT,此寄存器地址 为0X020E0624。
inputDaisy:寄存器 inputRegister 的值。
比如 GPIO1_IO03 要作为 UART1_RX 引脚的话此参数就是 1。
configRegister:未使用,函数IOMUXC_SetPinConfig 会使用这个寄存器。
inputOnfield : IO 软 件 输 入 使 能 ,就是IO复用功能 寄存器的SION。