一、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.h? ? ? ? ? ? ? ? ? ? ? ? ?I.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? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 未初始化數據段,放置未初始化全局變量