以本人开发的通用高压伺服软件为例来进行说明,G32R501-运行性能优化的配置经验介绍如下:
1.程序走ITCM这条路径,整体性能会有30%左右的cycle优化。
工程选择安装最新的pack包:Geehy::G32R5xx_DFP@1.0.0
配置界面中的DEBUG中,FLASH DOWMLOAD界面,编程区域选择第二个即可。
然后在SCT文件中,将ROM的基地址改为 0x00100000
#define __ROM_BASE 0x00100000
#define __ROM_SIZE 0x00040000
2.数据放在DTCM
主要是在SCT文件里面定义区域,本工程主要是测试堆栈放在RAM或者DTCM的差异
#define __STACK_TOP_LOCATION 3
#if __STACK_TOP_LOCATION == 0
#define __STACK_TOP (__DTCM_BASE + __DTCM_SIZE) /* Default: starts at end of DTCM0 */
#elif __STACK_TOP_LOCATION == 1
#define __STACK_TOP (__RAM1_BASE + __RAM1_SIZE) /* starts at end of SRAM1 */
#elif __STACK_TOP_LOCATION == 2
#define __STACK_TOP (__RAM2_BASE + __RAM2_SIZE) /* starts at end of SRAM2 */
#elif __STACK_TOP_LOCATION == 3
#define __STACK_TOP (__RAM3_BASE + __RAM3_SIZE) /* starts at end of SRAM3 */
#else
#error "Invalid STACK_TOP_LOCATION!"
#endif
3.中断运行在RAM
SCT文件里面在ITCM区域定义子模块instruction
RW_ITCM __RW4_BASE __RW4_SIZE { ; ITCM data
.ANY (+RW +ZI)
.ANY (itcm.instruction)
}
在中断函数前加上代码
__attribute__((section("itcm.instruction")))
即可实现功能。
4.i/d-cache开启或关闭
通过函数Flash_enableCache(0x50010000);实现,可在初始化中配置。
5.prefetch预取开启或关闭
通过函数Flash_enablePrefetch(0x50010000); 实现,可在初始化中配置。
6.flash等待周期
通过函数Flash_setWaitstates(0x50010000, 4);实现,可在初始化中配置。
7.调用zidian库
工程导入zidian_math.h,通过宏定义开启硬件算法加速。目前只支持少量函数加速。本程序中主要是定点计算居多。浮点计算中以浮点触发居多,但调用zidian除法,程序改动量太大。建议有浮点运算的可以调用zidian库函数参与运算。 |