嵌入式 - ARM5

一、led点灯代码优化

1. 配置寄存器

volatile

1.​ 禁止优化

不对该变量的读写操作进行任何优化(如删除"冗余"读取或延迟写入)。

2.​ 强制内存访问

每次访问该变量时,必须直接从内存(或硬件寄存器)中读取或写入,而不是使用寄存器中的缓存值。

2. 寄存器映射

后续可更新配置为结构体内容

二、SDK配置led

1. sdk

使用提供的I.MAX6ULL库文件,

路径:IMAX6ULL/SDK/

(1)SDK(Software development tools)移植

(2)完整开发工具就是一个IDE, 集代码编写、编译、下载于一体的集成开发环境,

类似于keil这种工具,需要额外购买一些设备如下载器、编程器、仿真器

(3)只用它的头文件。

cc.h 时钟相关定义;
core_ca7.h ARM Cortex-A7 内核相关定义;
fsl_common.h 通用工具函数定义;
fsl_iomuxc.h 引l脚复用配置函数定义;
MCIMX6Y2.hI.MX6ULL 寄存器映射结构体定义。

2. 更新代码

led.c

实现io复用功能配置 -- 对应sdk fsl_iomuxc.h 部分

实现电气特性配置 -- 对应sdk fsl_iomuxc.h 部分

配置方向寄存器 -- 对应sdk MCIMX6Y2.h 部分

三、sdk配置beep

1. 代码更新

实现灯亮鸣响

beep.c

main.c

四、BSP

BSP(板级支持包)工程管理

1.project:存放必要程序

main.c / start.S

2.imx6ull :存放NXP提供的i.mx6ull头文件

cc.h / core_ca7.h / fsl_common.h / fsl_iomuxc.h / MCIMX6Y2.h

3.bsp :存放硬件外设相关功能模块

led.c / led.h / beep.c / beep.h

4.Makefile: 需要遍目录

管理结果:

五、Makefile

1. Makefile

target 定义最终生成的可执行文件名
cross_compiler cc ld objcopy objdump

定义交叉编译工具链前缀以及编译器、连接器、格式转换器和反汇编工具
incdirs 定义头文件目录

srcdirs 定义源代码目录
include使用patsubst函数将目录转换成编译器可识别的选项

-I指定头文件目录
cfiles / sfiles 使用foreach 和 wildcard 函数在源目录中递归查找 .c .S 文件

cfilenodir / sdilenodir 使用notdir函数去除目录路径只保留文件名
cobjs / sobjs 将所有.c .S 文件转换为 obj/文件名.o 的形式

objs 汇编所有目标文件

VPATH 指定Makefile搜索源文件的目录路径
(sobjs) / (cobjs) 将.o 文件编译生成 .S文件

@mkdir -p obj 创建obj目录存放目标文件

-Wall waring all 打开所有警告

-nostdlib 不链接标准库

-c 只编译不链接

$(include) 包含头文件路径

2. 链接器脚本

. = 0x87800000 设置当前起始地址

.text 代码段定义,放置启动文件,主程序代码

.rodata 只读数据段,放置常量

ALIGN(4) 4字节对齐

.data 初始化数据段,放置初始化的全局变量

.bss 未初始化数据段,放置未初始化全局变量

相关推荐
大聪明-PLUS17 小时前
从技术史看:Unix 从何而来
linux·嵌入式·arm·smarc
硬汉嵌入式2 天前
ARM Cortex-X 与 Cortex-A 命名正式退役,推出C1 CPU和G1 GPU
arm·cortex
一枝小雨3 天前
STM32启动流程解析:从BootROM到BootLoader
stm32·单片机·嵌入式·arm·bootloader·boot rom
硬汉嵌入式3 天前
瑞萨M85内核芯片再出1GHz旗舰双核新品RA8T2,两个千兆以太网MAC,集成EtherCAT从机接口,面向高端电机控制
arm·瑞萨·ethercat·双核·cortex-m85
大聪明-PLUS3 天前
通过 Telnet 实现自动化
linux·嵌入式·arm·smarc
大聪明-PLUS4 天前
ARM Cortex-M:内存保护单元 (MPU) 发布
linux·嵌入式·arm·smarc
大聪明-PLUS6 天前
如何从头开始开发 Linux 驱动程序
linux·嵌入式·arm·smarc
一枝小雨8 天前
STM32中的Flash、ROM与RAM全解析
stm32·单片机·嵌入式·arm·内存分布
胡耀超8 天前
2、CPU深度解析:从微架构到性能优化
python·性能优化·架构·arm·cpu·x86·多核心
大聪明-PLUS9 天前
为未知 USB 设备编写 Linux 内核驱动程序
linux·嵌入式·arm·smarc