AutoC平台搭建指南(基于NXP i.MX RT1170 MCUXPresso开发环境建设 @Like)
(2022-11-17)
目录
1. 功能需求
2. 硬件平台
3. 软件工具环境
4. 建设基础
5. 安装开发工具和环境
5.1. MCUXpresso IDE
5.2. i.MX RT1170 SDK
5.3. GUI-Guider-1.4.1-GA
6. 创建应用工程
6.1. 导入SDK例程
6.1.1. 项目SDK配置
6.1.2. Project Settings 项目设置
6.1.3. Board板级配置
6.1.4. Component 软件组件
6.1.5. Device 芯片支持
6.1.6. Drivers 驱动库
6.1.7. Source 项目源文件
6.1.8. Startup 启动文件
6.1.9. Utilities 调试文件
6.1.10. Xip XIP文件
6.1.11. Debug 编译文件
6.2. 创建项目
6.2.1. 第一步 选择开发板和SDK
6.2.2. 第二步 选择SDK组件
6.2.3. 第三步 高级设置
6.2.4. 第四步 项目设置
6.2.5. 第五步 编译项目
6.3. 配置工具
6.3.1. 引脚PIN配置
6.3.2. 时钟CLOCK配置
6.3.3. 外设Peripheral配置
6.3.4. 安全TEE配置
6.3.5. 设备DCD配置
6.4. 编程开发
6.5. 工程调试
6.6. 下载烧写
6.7. 工程进阶
7. 完善工程
7.1. 给应用工程填加驱动
7.2. 给应用加入输入控制
7.3. 编程架构
7.4. 开发注意事项
7.5. 运行效率及空间研究
7.6. 人机交互设计
8. 应用编程
8.1. 生成空的应用框架
8.2. 填加资源
8.3. 流程设计
9. 工程进阶
9.1. SDK库源文件编译成.a或.lib库
9.1.1. 创建库工程
9.1.2. 把完整的SDK库拷贝到工程
9.1.3. 生成.lib文件
9.1.4. 生成IDE的.a文件
9.1.5. 加入.lib静态库文件
9.1.6. IDE中加入.a静态库文件
9.2. bootload启动程序
9.2.1. 从内部启动加载QSPI FLASH应用程序
9.3. ISP在线升级
9.3.1. 应用镜像文件生成与校验(加密)
9.4. 外部FLASH烧写算法
9.5. 从SDRAM调试程序
9.6. 从外部QSPI FLASH调试程序
9.7. 内部FLASH存储数据
9.8. 独立语音文件烧录
9.9. 资源分离与联合调试
9.10. 应用程序剥离资源并单独烧录
10. 外设功能开发
10.1. SAI之WAV语音合成与播放
10.2. DCMI之PAL模拟摄像头
10.2.1. 模拟摄像头设计(TVP5150)
10.2.2. 模拟摄像头设计(ADV7280A)
10.2.3. 模拟摄像头DMA数据采集
10.2.4. 模拟摄像头YUV(yCbCr)转RGB
10.3. I2C触摸屏设计
10.4. USB MSC(U盘)
10.5. SDMC(SD卡)
10.6. UART DEBUG
10.7. SPI接口
10.8. FDCAN
10.9. ADC(及温度检测)
10.10. RTC时钟
10.11. PWM与定时器设计
10.12. 键盘设计
10.13. 文件系统FATS
11. 问题集锦
11.1. 中文显示编译
11.2. ARM编译器
11.3. 生成代码时的BUG
1. 功能需求
基本硬件模块有核心电路(MCU、QSPI FLASH、SDRAM),外设有IO、PWM、扬声器、蜂鸣器、物理按键、SD card、USB、ETH、CAN、RS485、RS232、(TFT液晶显示屏RGB接口和LVDS接口、电容触摸屏、模拟摄像头)等,基本软件功能需求有Baremetal、LC、AI、IO、PWM、USB升级、串行通信、以太网、日志存储(蜂鸣发声、按键事件、中文语音、GUI界面、触摸控制、视频监控)等。
2. 硬件平台
u MIMXRT1170-EVK
u ALIENTEK-RT1052-DB
u EmbedFire-i.MX RT1052 Pro-DB
u MCU-Link
u DAP-Link
u J-Link
3. 软件工具环境
u MCUXpresso IDE V11.6.1_8255
u MCUXpresso Config Tools V12.1
u GUI-Guider-1.4.1-GA V1.4.1
u LVGL V8.2.0
u SDK_2_12_1_MIMXRT1170-EVK V2.12.1
u SDK_2_12_1_EVKB-IMXRT1050 V2.12.1
u SDK_2_12_1_MIMXRT1051xxxxB V2.12.1
u SDK_2_12_1_MIMXRT1176xxxxx V2.12.1
u Tera Term V4.106
4. 建设基础
嵌入式系统开发基本知识
ARM处理器基础知识
C语言、C++语言基础
ARM Cortex-M系列Core基本知识
NXP i.MX RT系列MCU基本知识
5. 安装开发工具和环境
当NXP i.MX RT系列MCU采用MCUXpresso IDE进行开发时,仅需要安装MCUXpresso IDE一个软件就能满足需要。当需要进行HMI界面设计开发时再安装GUI-Guider-1.4.1-GA进行。其余工具可用于其他IDE开发时使用,本文主要介绍MCUXpresso IDE,其他工具仅在需要时简要说明。
5.1. MCUXpresso IDE
前往MCUXpresso IDE页面下载,选择时注意相应的操作系统和IDE版本。建议下载最新版本。
因为MCUXpresso IDE软件内部可以下载SDK,并且集成了MCUXpresso Config Tools,所以当用MCUXpresso IDE开发时紧跟的后两节SDK和Config Tools下载安装可以不用进行。如果需要单独的SDK包和配置工具或者采用其他IDE进行开发时,再按以下两节说明进行下载。
下载后的安装文件“MCUXpresso IDE_11.6.1_8255.exe”直接运行即可安装。安装过程选择指定的安装目录,下一步直到完成。按步骤安装MCUXpresso IDE后,需要设置工作目录workspace,默认代码工程将都在此目录下创建。
首次安装完MCUXpresso IDE后还不能创建i.MX RTxxxx的工程,需要先安装SDK。
打开MCUXpresso IDE,第一次进入欢迎界面,或者通过菜单:帮助-欢迎进入欢迎界面,点Home,点Download and Install ,在IDE中打开SDK安装界面,选择相应的MCU型号或开发板规格,点Install安装,完成后关闭SDK安装界面、关闭欢迎界面,点菜单:窗口-外观-显示工具栏,在工具栏最右边点Develop图标,再点菜单:窗口-显示视图-Installed SDKs,在Installed SDKs栏视图查看已经安装的SDK信息。有了SDK,就可以创建工程了。注意MCUXpresso IDE内部预先安装早期的部分MCU型号的SDK,无需再安装。
打开MCUXpresso IDE,菜单栏中的“配置工具”即为集成的MCUXpresso Config Tools,注意此工具仅当有工程打开时才能使用。
5.2. i.MX RT1170 SDK
在SDK Builder网页,自定义和下载MCU芯片或硬件板对应的SDK。
选择时注意MCU型号、操作系统、开发工具、所需部件和库版本等,建议所有部件全选,下载最新版本。
下载后的安装文件“MCUXpresso_Config_Tools_v12.1_x64.exe直接运行即可安装。安装过程选择指定的安装目录,下一步直到完成。
注意独立安装的最新版本MCUXpresso Config Tools不能创建MCUXpresso IDE工程,请使用MCUXpresso IDE内部集成的MCUXpresso Config Tools。
SDK文件说明:
根目录:
boards | 板级文件 开发板例程和工程模板 |
CMSIS | 内核文件 ARM通用内核文件和库模板 |
components | 软件组件 常用外部接口电路驱动 |
devices | MCU芯片文件 芯片外设驱动和IDE工程关联文件 |
docs | 文档 说明文件 SDK和中间件的用户手册 |
middleware | 中间件 协议和处理等三方软件中间件 |
rtos | 嵌入式操作系统 含freertos和azurertos |
tools | 工具 cmake工具链 |
boards目录:evkmimxrt1170评估板例程和工程模板,这里面的例程有工程文件的可以直接打开编译,MCUXpresso IDE工程用导入向导,新建拷贝工程再打开编译。
CMSIS目录:ARM通用内核文件和库模板。这里某些文件头必被包含进工程中使用。
components目录:常用外部接口电路驱动。需要的接口电路驱动可加入工程中使用。
devices目录:芯片外设驱动和IDE工程关联文件。这个文件夹是SDK的库的核心文件。
u arm\gcc\iar\mcuxpresso是此芯片各IDE工程对应的启动文件、分散文件等;
u cmsis_drivers 是ARM提供的驱动模板;
u drivers 是此芯片的所有外设驱动;
u project_template 是此芯片工程模板,与配置工具的引脚、时钟、外设文件对应;
u template 内有一个RTE_Device.h文件,是ARM开发的RTE配置模板;
u utilities 是调试用相关源文件;
u xip 是芯片级的xip文件与评估板目录下的xip内的文件一起使用支持xip启动;
u fsl_device_registers.h是芯片型号定义文件
u MIMXRT1176_cm7.c 是芯片寄存器定义文件
u system_MIMXRT1176_cm7.c 是芯片启动初始化文件,由startup_mimxrt1176_cm7.c(或startup_MIMXRT1176_cm7.S)文件调用,主要初始化时钟、浮点运算单元和开启Cache。
注1:XIP即原地执行,就是直接在外部存储器上执行代码(i.MX RT1170内部没有程序存储器FLASH),一般是在外部nor SPI FLASH存储且执行程序代码,xip启动时,FLASH前部必须先放置启动指令字,和指定执行地址,再从指定地址放置代码,为了方便,一般在工程中加入xip文件,加在APP执行文件之前合并一起组成下载到FLASH根地址的镜像。
注2:startup_mimxrt1176_cm7.c(或startup_MIMXRT1176_cm7.S)启动文件,程序入口,从汇编到C需要建立执行环境。这里的启动文件完成堆栈(堆是malloc动态分配内存区,栈是函数调用时局部变量的临时保存区)设置、中断向量表设置;栈指针初始化;调用system_MIMXRT1176_cm7.c文件完成芯片时钟初始化、浮点单元初始化;调用__main函数完成C环境建立即从FLASH存储空间把RW段有初始值全局变量拷贝到RAM执行空间和置零ZI段全局变量;指向中断向量表,如果跳转执行或从FLASH拷贝到(SD)RAM执行还需要拷贝中断向量表重新指定;最后跳转到用户入口main函数。这个过程的顺序在不同的IDE下会略有不同,但是机制和内容相同。
5.3. GUI-Guider-1.4.1-GA
在NXP官网对应的MCU型号下的开发工具栏中选择需要的工具进行下载,GUI-Guider-1.4.1-GA下载后直接安装。此软件工具,用于创建LVGL的工程,并可以进行可视化的界面设计。
6. 创建应用工程
6.1. 导入SDK例程
打开MCUXpresso IDE后,有三个入口可以进入导入例程界面:
u 进入欢迎界面,或点菜单:帮助-欢迎进入欢迎界面,点Home,点Import SDK Examples,点Go straight to the Wizard...
u 点菜单:文件-新建-Import SDK Examples
u 关闭欢迎界面,点菜单:窗口-外观-显示工具栏,在工具栏最右边点Develop图标,点菜单:窗口-显示视图-Quickstart panel,在Quickstart panel栏视图,再点Import SDK Example(s)...
经过以上操作进入SDK Import Wizard界面,先选择MCU型号和开发板型号,界面中会显示选中的SDK版本信息,点下一步,可在Project name prefix栏修改项目名称,在Examples中选择想要导入的例程,比如勾选demo_app下的hello world,其他选项默认,点下一步,注意在同一个工作空间中不能存在同名的工程项目。进入高级设置界面,保持默认选项,存储器配置需要根据实际的硬件进行配置,此处也可以保持默认选项,等创建完工程后,在工程内部进行配置,如果是选用了官方的开发板调试工程此项可不用修改。导入项目可以多选,一次导入多个例程。然后点击完成,创建工程。
例程导入后,点菜单:窗口-外观-显示工具栏,在工具栏最右边点Develop图标,或者点菜单:窗口-显示视图-项目资源管理器,在项目资源管理器栏查看刚才创建已经打开的工程。在项目资源管理器栏对应项目名称上右击可以打开项目工程的设置和操作,最下方的“属性栏”可以对工程的所有需性进行管理。右击选择SDK Management可以打开项目工程的SDK库进行配置管理。
新导入的i.MX RT1170例程(编译后)在MCUXpresso IDE下的工程界面如下图所示:
i.MX RT1xxxx 芯片工程目录中只有Debug以上文件夹才被包含到项目中进行编译,这之下的文件夹仅存在目录中不参与编译。文件夹目录和项目目录evkmimxrt1170_iled_blinky_cm7如下所示:
项目包含源文件和头文件目录如下所示:
evkmimxrt1170_iled_blinky_cm7 | 项目名 | 导入例程名或自建项目名,根目录 | |
.settings | 环境设置 | language.settings.xml | |
Project Settings | 项目设置 | SDK\Lib\MCU\Memory\Options | |
Binaries | 二进制目标文件 | evkmimxrt1170_iled_blinky_cm7.axf | |
Includes | 包含头文件 | 包含系统库和项目本身头文件目录 | |
CMSIS | ARM CMSIS | ARM Cortex微控制器软件接口标准头文件 | |
board | 硬件板级配置 | 板子引脚、时钟、外设、MPU、DCD等配置 | |
component | 软件组件 | NXP常用外部接口电路驱动组件 | |
device | 芯片支持 | 本MCU芯片寄存器定义和芯片初始化文件 | |
drivers | 驱动库 | fsl_开头的芯片底层硬件外设驱动库文件 | |
evkmimxrt1170 | 生成的镜像 | 工程项目编译后命令生成的烧录镜像文件 | |
source | 项目源文件 | 本用户工程项目新创建的源文件和头文件 | |
startup | 启动文件 | IDE工具相关的芯片启动文件,建立C环境 | |
utilities | 调试文件 | fsl_开头的调试相关源文件 | |
xip | XIP文件 | 原地执行文件含芯片和板子的配置文件 | |
Debug | 编译文件 | 编译时生成的中间文件和项目编译配置文件 | |
doc | 文档 | readme.txt项目说明或其他文档类 | |
.cproject | 项目名描述 | MCUXpresso IDE项目名描述文件 | |
.project | 工程文件 | MCUXpresso IDE项目工程文件 | |
evkmimxrt1170_iled_blinky_cm7.mex | 项目配置文件 | 本项目生成的配置文件,可用配置工具打开 | |
iled_blinky.mex | 原配置文件 | 原例程中的配置文件 |
6.1.1. 项目SDK配置
可以对本项目的SDK库重新配置,在项目资源管理器栏对应项目名称上右击选择SDK Management可以打开项目工程的SDK库进行配置管理。
6.1.2. Project Settings 项目设置
可以查看设置SDK、库类型、MCU型号封装、存储器分配、预处理选项。这里是部分设置的快捷入口,全部的项目设置进入项目属性详细设置。可以在项目名称上右击,点最下方属性进入,也可点菜单:项目-属性进入。也可在下面的Options右击点Edit options直接进入项目设置。打开属性界面在C/C++ Build标签下的Settings进行设置。
6.1.3. Board板级配置
这个目录下包含板级支持的文件,这些文件可以由Config Tools配置工具生成。包 含有5个源文件和头文件:
l Board: MPU配置;
l Clock_config: 时钟配置;
l Dcd: 设备配置,含EXTRAM初始化;
l Peripherals: 外设配置,外设初始化;
l Pin_mux: 引脚配置。
6.1.4. Component 软件组件
这个目录下包含官方的一些软件组件,组件可以通过SDK组件管理工具进行选择。组件主要包含外围电路驱动例程,官方驱动文件以fsl_开头。
6.1.5. Device 芯片支持
这个目录下包含本MCU芯片寄存器定义和芯片初始化文件。如MIMXRT1176_cm7.h、system_MIMXRT1176_cm7.c等。
6.1.6. Drivers 驱动库
这个目录下包含MCU芯片外设驱动库文件,以fsl_开头。芯片外设驱动可以通过SDK组件管理工具进行选择。
6.1.7. Source 项目源文件
这个目录下包含本项目的源文件。项目相关的自编写源文件放在本目录下。
6.1.8. Startup 启动文件
这个目录下包含MCU芯片的启动文件。启动文件中会调用芯片支持文件system_MIMXRT1176_cm7.c。
startup_mimxrt1176_cm7.c启动文件,是程序开始入口,从汇编到C需要建立执行环境。这里的启动文件完成堆栈(堆是malloc动态分配内存区,栈是函数调用时局部变量的临时保存区)设置、中断向量表设置;栈指针初始化;调用system_MIMXRT1176_cm7.c文件完成芯片时钟初始化、浮点单元初始化;调用__main函数完成C环境建立即从FLASH存储空间把RW段有初始值全局变量拷贝到RAM执行空间和置零ZI段全局变量;指向中断向量表,如果跳转执行或从FLASH拷贝到(SD)RAM执行还需要拷贝中断向量表重新指定;再进行芯片初始化,最后跳转到用户入口main函数。这个过程的顺序在不同的IDE下会略有不同,但是机制和内容相同。
6.1.9. Utilities 调试文件
这个目录下包含调试文件。
6.1.10. Xip XIP文件
这个目录下包含板级和芯片级的XIP文件。
6.1.11. Debug 编译文件
这个目录是目标编译生成的文件。包含make文件axf、map和ld文件。
ld文件是生成镜像与存储空间的链接文件,对项目、目标和板都是非常重要的,存储空间的分配、指定存储地址和代码段定义等。
目标设置还可以通过项目属性中的C/C++ Build-Settings页面进行。
6.2. 创建项目
6.2.1. 第一步 选择开发板和SDK
菜单-文件-新建 选择MCUXpresso New C/C++ Project进入SDK新建项目向导,还可通过欢迎HOME页面和Quickstart Panel进入新建向导。
在左边选择对应MCU,中间选择评估板SDK,下方显示评估板和SDK的相关信息,点下一步。
6.2.2. 第二步 选择SDK组件
这里可以输入项目名称、指定项目位置、选择芯片规格、选择板子、选择开发语言、选择调试口、选择内核,然后选择SDK库内组件。如果选择的组件有依赖或冲突会在顶部的状态栏进行提示,选择组件后,保证没有错误再点下一步。
SDK库可选组件如下表所示:
Operation Systems | 操作系统4选1,Azure、AzureFPU、FreeRTOS、Baremetal | 默认为裸机 |
Drivers | MCU芯片外设驱动,所有底层硬件基础库 | 根据需要选择 |
CMSIS Drivers | ARM提供的底层驱动模板和DSP库 | 一般不需要 |
CMSIS Include | ARM提供MCU基本文件和初始化文件 | 必须全选 |
Utilizes | 程序调试相关的支持文件 | 一般可选 |
Middleware | 中间件,包含GUI、USB、WIFI、文件系统、网络协议栈等 | 根据需要选择 |
Board Components | 板级组件,NXP官方提供的一些板级例程 | XIP基本必选 |
Abstraction Layer | 抽象层驱动,典型外围电路的抽象层驱动 | 一般不需要 |
Software Components | 软件组件,常用外部接口电路驱动 | 一般不需要 |
Project Template | 项目模板,评估板项目模板、文件系统模板等 | 一般需要选择 |
Others | 其他文件,包含启动文件和文档类 | 启动文件必选 |
Operation Systems | 操作系统4选1,Azure、AzureFPU、FreeRTOS、Baremetal | 默认为裸机 |
Drivers | MCU芯片外设驱动,所有底层硬件基础库 | 根据需要选择 |
CMSIS Drivers | ARM提供的底层驱动模板和DSP库 | 一般不需要 |
CMSIS Include | ARM提供MCU基本文件和初始化文件 | 必须全选 |
Utilizes | 程序调试相关的支持文件 | 一般可选 |
Middleware | 中间件,包含GUI、USB、WIFI、文件系统、网络协议栈等 | 根据需要选择 |
Board Components | 板级组件,NXP官方提供的一些板级例程 | XIP基本必选 |
Abstraction Layer | 抽象层驱动,典型外围电路的抽象层驱动 | 一般不需要 |
Software Components | 软件组件,常用外部接口电路驱动 | 一般不需要 |
Project Template | 项目模板,评估板项目模板、文件系统模板等 | 一般需要选择 |
Others | 其他文件,包含启动文件和文档类 | 启动文件必选 |
6.2.3. 第三步 高级设置
这里选择C库类型、选择浮点单元、选择编程器、配置存储空间。存储空间、地址大小和存储驱动需要根据硬件设计和空间规划进行配置,详见下表所示:
设置结束后点完成即生成新的项目工程。
6.2.4. 第四步 项目设置
生成项目工程后,新建的项目工程资源如下所示:
新建完成的项目可以通过SDK组件管理器重新进行库选择配置。通过SDK生成的项目是依照官方开发板硬件创建的,如果用官方评估板开发调试的项目工程一般不再需要属性设置。当增加自定义源文件或者是非官方的硬件设备新建的项目工程开发调试时,一般需要通过属性设置页面对项目工程特性选项进行设置,属性页见下图所示:
关键属性项设置内容如下表所示:
资源 | 项目工程的位置信息,编码格式设置等 | 无需调整 |
链接的资源 | 路径环境变更,链接资源详细信息 | 无需调整 |
资源过滤器 | 文件夹内的文件过滤后不再被包含进项目中 | 无需调整 |
Builders | 关于构建工具的一些选项 | 无需调整 |
C/C++ Build | 构建目标配置、目标路径设置及构建属性设置 | 一般无需调整 |
Build Variables | 构建变更设置 | 无需调整 |
Environment | 环境变更设置 | 无需调整 |
Logging | 构建日志文件路径设置 | 无需调整 |
MCU Settings | MCU芯片型号和存储空间设置 | 根据硬件调整 |
Settings | 编译、连接、调试等参数的详细设置 | 根据项目需要调整 |
Tool Chain editor | 编译工具链的设置 | 不可调整 |
C/C++ General | 编译器通用设置 | 无需调整 |
Code Analysis | 代码分析设置 | 无需调整 |
Launching | 启动方式设置 | 无需调整 |
Documentation | 文档设置 | 无需调整 |
File Types | 文件类型设置 | 无需调整 |
Formatter | 文件格式设置 | 无需调整 |
Indexer | 索引器设置 | 无需调整 |
Language Mappings | 语言映射设置 | 不可调整 |
Paths and symbols | 路径和符号设置 宏定义、头文件、库文件、源文件路径设置,设置与C/C++ Build下Settings内容同步 | 一般需要调整 |
Preprocessor | 预处理信息 | 无法调整 |
Profiling Categories | 分析类别 | 不可调整 |
MCUXpresso配置工具 | Config tools选项设置,只有当工具打开时有效 | 无需调整 |
Task Tags | 任务标签 | 无需调整 |
Validation | 验证 | 无需调整 |
XML Syntax | XML语法 | 无需调整 |
项目性质 | 项目性质 | 不可调整 |
项目引用 | 项目引用 | 一般不需要 |
运行/调试设备 | 调试工具配置 | 调试时需要 |
MCU Settings | MCU SVD设置 | 无需调整 |
6.2.5. 第五步 编译项目
最后用Build构建项目,构建完成没有错误和警告,则项目创建成功。此后就可以转入编程和调试了。
6.3. 配置工具
MCUXpresso Config Tools有独立版本,可以用于生成MCUXpresso IDE之外的开发工具的工程,如MDK、IAR、GCC等。MCUXpresso IDE工程不能通过MCUXpresso Config Tools生成,只有用导入例程或新建i.MX RT工程向导生成。MCUXpresso IDE内部集成了MCUXpresso Config Tools,MCUXpresso IDE工程打开后生成MCUXpresso Config Tools的配置文件,直接在MCUXpresso IDE内使用MCUXpresso Config Tools进行配置。
MCUXpresso IDE工程生成配置文件,可以通过点击资料管理器窗口右上角的快捷工具,或者右击工程打开菜单选择MCUXpresso 配置工具选中一项新建和打开。已经创建好的配置文件还可以通过在资料管理器窗口对应工程目录的最下方.mex直接双击打开。引脚、时钟、外设项目中都有“功能组”可配置,功能组名即调用相应功能组的函数名,功能组可选是否包含进代码中调用,引脚在进行硬件配置时,建议采用分组的形式进行,便于代码阅读维护。
配置工具可以进行的配置共有5项,如下表所示:
配置项 | 配置内部 | 源文件 | 备注 |
PIN | 引脚 | Board\bin_mux.c | |
CLOCK | 时钟 | Board\clock_config.c | |
Peripheral | 外设 | Board\peripherals.c | |
TEE | 安全 | Board\resource_config.c | 仅RT11XX系列有 |
DCD | 设备 | Board\dcd.c | 配置数据非代码 |
配置完成后进行“更新源代码”,即将配置生成的源码更新到对应的文件,否则源文件内容不变。
6.3.1. 引脚PIN配置
PIN配置下有引脚、外设信号、电源组三类配置页面。
6.3.2. 时钟CLOCK配置
CLOCK配置可用时钟表或时钟树两种形式配置。
6.3.3. 外设Peripheral配置
Peripheral配置可选组件和外设分别进行配置。
6.3.4. 安全TEE配置
TEE配置包含有用户内在区域配置和安全访问配置。
6.3.5. 设备DCD配置
DCD配置是设备初始硬件环境的配置数据。
6.4. 编程开发
6.5. 工程调试
6.6. 下载烧写
6.7. 工程进阶
7. 完善工程
7.1. 给应用工程填加驱动
7.2. 给应用加入输入控制
7.3. 编程架构
7.4. 开发注意事项
7.5. 运行效率及空间研究
7.6. 人机交互设计
8. 应用编程
8.1. 生成空的应用框架
8.2. 填加资源
8.3. 流程设计
9. 工程进阶
9.1. SDK库源文件编译成.a或.lib库
9.1.1. 创建库工程
9.1.2. 把完整的SDK库拷贝到工程
9.1.3. 生成.lib文件
9.1.4. 生成IDE的.a文件
9.1.5. 加入.lib静态库文件
9.1.6. IDE中加入.a静态库文件
9.2. bootload启动程序
9.2.1. 从内部启动加载QSPI FLASH应用程序
9.3. ISP在线升级
9.3.1. 应用镜像文件生成与校验(加密)
9.4. 外部FLASH烧写算法
9.5. 从SDRAM调试程序
9.6. 从外部QSPI FLASH调试程序
9.7. 内部FLASH存储数据
9.8. 独立语音文件烧录
9.9. 资源分离与联合调试
9.10. 应用程序剥离资源并单独烧录
10. 外设功能开发
10.1. SAI之WAV语音合成与播放
10.2. DCMI之PAL模拟摄像头
10.2.1. 模拟摄像头设计(TVP5150)
10.2.2. 模拟摄像头设计(ADV7280A)
10.2.3. 模拟摄像头DMA数据采集
10.2.4. 模拟摄像头YUV(yCbCr)转RGB
10.3. I2C触摸屏设计
10.4. USB MSC(U盘)
10.5. SDMC(SD卡)
10.6. UART DEBUG
10.7. SPI接口
10.8. FDCAN
10.9. ADC(及温度检测)
10.10. RTC时钟
10.11. PWM与定时器设计
10.12. 键盘设计
10.13. 文件系统FATS
11. 问题集锦
11.1. 中文显示编译
11.2. ARM编译器
有部分摘自ARM编译器文档对齐部分
对齐的使用:
1.__align(num)
这个用于修改最高级别对象的字节边界。在汇编中使用LDRD或者STRD时
就要用到此命令__align(8)进行修饰限制。来保证数据对象是相应对齐。
这个修饰对象的命令最大是8个字节限制,可以让2字节的对象进行4字节
对齐,但是不能让4字节的对象2字节对齐。
是存储类修改,他只修饰最高级类型对象不能用于结构或者函数对象。
2.__packed
是进行一字节对齐
不能对packed的对象进行对齐
所有对象的读写访问都进行非对齐访问
及包含float的结构联合及未用__packed的对象将不能字节对齐
对局部整形变量无影响
强制由unpacked对象向packed对象转化是未定义,整形指针可以合法定
义为packed。
则没有意义
对齐或非对齐读写访问带来问题
11.3. 生成代码时的BUG
未完,待续。