打印
[G32A]

G32R501-运行性能优化的配置经验

[复制链接]
618|2
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
zyz0926|  楼主 | 2025-2-24 17:19 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
以本人开发的通用高压伺服软件为例来进行说明,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库函数参与运算。

使用特权

评论回复
沙发
VelvetNight| | 2025-3-8 15:43 | 只看该作者
楼主 对比结果出来了吗?
堆栈 有必要放置在TCM里面吗?
我觉得把关键变量与代码放在里面更好一些吧!

使用特权

评论回复
板凳
银河漫步| | 2025-3-28 14:21 | 只看该作者
TCM的使用是要精细一些。
就是不知道会有多大的差别

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

12

主题

15

帖子

0

粉丝