概述
本文档仅介绍如何通过使用eclipse、arm-gcc编译工具、gnu-arm插件、j-link或at-link等资源来配置及调试at32f403a的slib,并提供slib方案商开发算法范例及终端用户应用范例。关于at32f403a的slib详细介绍及说明,请详阅:《an0040_at32f403a_407_security_library_application_note》。环境说明:本文档安装说明基于windows 7 x64系统下实现,开发板使用at-start-f403a。关于eclips调试环境的安装及eclipse工程的建立,请参阅《an0033_eclipse_with_gcc》。本文档所使用的软件都打包到setup_slib_with_eclipse_and_gcc_v2.0.0.zip,直接解压重新编译后即可运行。解压后eclipse的workspace位于目录:setup_slib_with_eclipse_and_gcc_v2.0.0\utilities\slib_with_eclipse_and_gcc_demo。其中包含文件:图1. eclipse工作目录.metadata:此workspace的环境设定project_l0:方案商开发算法范例project_l1:终端用户应用范例
project_l0方案商范例
_在此阶段的范例程序,将完成下列几个项目:
将低通滤波器函数编译成可执行(executr-only)的代码;
将低通滤波器函数的代码编排放置到主闪存区地址0x08004000~0x08004fff(sector8~9);
将低通滤波器函数的系数编排放置到主闪存区地址0x08005000~0x08005fff(sector10~11);
验证成功后,将sector8~9设置为指令安全库区,将sector10~11设置为数据安全库区,此部分可在范例的主程序中以调用slib_enable()函数来完成,或使用artery icp programmer来完成(建议使用icp工具完成设置);
产出终端用户程序调用低通滤波函数时,需用到的头文件及符号定义文件。
产生只执行(exacute-only)代码
设置方式如下:
1) 选择c文件群组或个别的c文件,范例中是把要保护的相关c文件都放在fir_filter群组,点击fir_filter群组内需要设置只执行的文件,按鼠标右键选择“properties”
图2. 设置要保护的c文件
2) 点选c/c++build->settings->gnu arm cross c complier->miscellaneous,在”other compiler flags”填入-mpure-code以及-mslow-flash-data这两个关键字,然后按apply使设定生效
图3. 设置miscellaneous
编排安全库区的地址
project_l0范例的主闪存映像及ram的使用分区如下图,ram的分区主要是为了避免slib保护区的代码与终端用户的代码用到相同的ram而产生的冲突问题。图4. 主闪存映像及ram的使用分区
其中滤波器函数的代码编排放置到主闪存区的地址0x08004000~0x08004fff(sector8~9),并将滤波器函数的系数编排放置到主闪存区的地址0x08005000~0x08005fff(sector10~11)。ram的部分则是将0x20000000到0x200000ff共256个字节保留给slib保护区的代码使用。
步骤如下:
1) 依据”at32f403axc_flash.ld”linker descriptor文件做修改,编写一个ld文件,如project_l0\eclipse_gcc\ld目录下的slib.ld。2) 在slib.ld当中,将主闪存及ram分区划分如下:3) 将算法代码放到.slib_inst section,低通滤波器的系数放到.slib_data section,并将算法使用到的全局变量指定到.slib_ram section,如下图:图5. 配置code、data、ram section4) 在project->properties->c/c++build->setting->gnu arm cross c linker->general设定中的script files,加入slib.ld。图6. 设置script files5) 本范例会使用到gcc的数学运算函数库libm.a,在properties->gnu arm cross c linker->miscellaneous设定中的other linker flags填入--specs=rdimon.specs,linker才不会出现错误讯息。图7. 设置other linker flags关于ld文件的语法,可参考gnu linker的相关名文件。
产生头文件及符号定义文件
头文件(header file)跟符号定义文件(symbol definition file)是终端客户应用范例project_l1在调用fir低通滤波函数时需要用到。在范例中,就是main.c中包含的fir_filter.h文件。符号定义文件则是定义低通滤波函数的实际地址。
产生符号定义文件的方法:
1) 进入project->properties->c/c++build->setting的build steps设定画面。图8. 设置build steps
在post-build steps的命令行中输入以下命令:
arm-none-eabi-objcopy.exe--keep-symbols=..\keep_sym.txt-s--remove-section=.arm.attributes--extract-symbol${buildartifactfilebasename}.elf..\fir_filter_symbol.sym2) 此处fir_filter_symbol.sym是要产出的符号定义文件,keep_sym.txt放在project_l0\eclipse_gcc目录下,是用来选择要产生哪些函数的符号,内容如下:3) 重新编译整个项目后,在project_l0\eclipse_gcc目录下,就会产生一个名为fir_filter_symbol.sym的符号定义文件。
启用安全库区保护
要启用安全库区的保护功能,有以下两种方式:1) 使用icp刻录工具artery icp programmer(建议用此方式)。使用icp programmer启用slib的方法,请参阅《at32f403a security library application note》。2) 使用范例程序main.c之中的slib_enable()函数。在低通滤波函数测试正确后执行过一次此函数,就可以启用安全库区的保护功能。要执行此函数,只要在main.c中使能#define use_slib_function即可。
project_l1终端用户范例
_
project_l1范例会使用到在project_l0中调试好,并已经被刻录到at32f403a芯片的主闪存中且被slib保护的fir低通滤波器函数。根据project_l0提供的头文件、符号定义文件以及主闪存区块映像,终端用户就可以参照project_l1做到
建立一个应用项目;
引用project_l0提供的头文件及符号定义文件到项目里;
调用fir低通滤波器函数;
开发并调试用户自己的应用程序。
注:project_l1必须使用跟project_l0开发时一样的工具链及相同版本的编译程序,不然有可能会因为版本差异的兼容性问题,而无法使用project_l0提供的代码。
建立用户的应用项目
因为project_l0启用的安全库区已经占用了一些特定的主闪存页面,project_l1的代码必须参照project_l0提供的主闪存区块映像来编排放置的地址。其中sector8~11为安全库区所占用,终端用户需使用ld文件将这个区域隔离起来,避免代码在编译时被编排到这个区域内,方式如下:
参照project_l1\eclipse_gcc\ld目录下的end_user_code.ld文件,将主闪存空间切成两个区块flash_1及flash_2,中间空出来的区域就是slib保护区。此外,ram的区域也要保留0x20000000到0x200000ff的区域。如下图:
图9. end-user-code.ld配置
其中slib_code及slib_data两个区域,方案商已事先刻录代码,所以设定为noload,在下载project_l1代码到主闪存时,就不会再次被下载。
在项目中加入符号定义文件
project_l0所产生的符号定义文件fir_filter_symbol.sym必须被添加到project_l1项目中,才能被正确的编译并链结到slib保护区的代码。方法如下:
1) 将fir_filter_symbol.sym这个文件加到fir_filter群组;
2) 打开project->properties->c/c++build->settings->tool setting->gnu arm cross c linker->miscellaneous设定画面,在other objects选单中加入此文件,在编译项目时就会可以被引用到。图10. 设置other objects
关于雅特力雅特力科技于2016年成立,是一家致力于推动全球市场32位微控制器(mcu)创新趋势的芯片设计公司,专注于arm cortex-m4/m0+的32位微控制器研发与创新,全系列采用55nm先进工艺及arm cortex-m4高效能或m0+低功耗内核,缔造m4业界最高主频288mhz运算效能,并支持工业级别芯片工作温度范围(-40°~105°)。雅特力目前已累积相当多元的终端产品成功案例:如微型打印机、扫地机、光流无人机、热成像仪、激光雷达、工业缝纫机、伺服驱控、电竞周边市场、断路器、adas、t-box、数字电源、电动工具等终端设备应用,广泛地覆盖5g、物联网、消费、商务及工控等领域。
关于使用电感降低噪声的方法分析
用于低侧开关的高侧电流感应电路原理图
莱迪思力推CertusPro-NX汽车级FPGA
Vadatech公司推出两款基于Xilinx 7系列 FPGA的μTCA开发板
你们觉得小米MIX4的拍照真能超过华为吗?
AT32讲堂008 | AT32 MCU如何用Eclipse插件调试sLib
油品计量作业中误差产生的原因
人工智能迁移学习 规范化的使用与相关运用领域的限制必不可少
松下轻触开关高级指南
低成本的2.4Ghz收发芯片,适用于遥控玩具市场
镍氢电池常见问题之电池搁置后,容量恢复困难
浅谈环形变压器的基本结构及七大优点
FM25V02A-GTR型号存储器的产品介绍
如何使用P/N沟道MOSFET构建通用全桥或H桥MOSFET驱动电路
[组图]稳压二极管
CPU使用率达到100%会怎样
CMET北京站:详论医疗电子现状及发展趋势
PLC模拟量模块使用注意要点
一加5即将发布:一加5强势来袭出乎意料,小米6刚刚发布就被“围剿”!你是选择等待还是抢购?
神经网络复杂性的基本下界