0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

高实时性程序优化设计

先楫半导体HPMicro 2024-07-03 08:18 次阅读

工程苗小兵

先楫资深FAE工程师

电力电子与电力传动专业硕士研究生,一个从事了20多年的功率控制的工程小兵,有多年的电机驱动和电源控制经验,专注电力电子控制方向。

简 介

先楫半导体为客户提供了480MHz - 1GHz的不同主频高性能MCU,适用于不同高算力、实时控制要求的场合。在电机、电源应用场合,需要us级响应和运算,对响应时间的一致性、快速性都有非常高的要求。随着MCU主频提高,MCU的存储方式和总线频率也更加多样化,先楫MCU中内部有ILM、DLM、AXI_SRAM、flash等多种存储空间,但同时不同存储需要的时钟也不同,给软件工程师设计带来很大困扰。先楫在官网已经提供了优化DSP和FFT运算、使用片上SRAM等相关应用文档。

本文重点简述基于电机、电源应用的具体代码优化方案。

经验分享

1

ILM程序优化

以下展示的是HPM6280的系统框图

b034b3e4-38d1-11ef-a655-92fbcf53809c.png

CPU内部包含了ILM、DLM、cache,这些内存都可达 600Mhz主频。AXI总线上有AXI_SRAM和ILM_SLV、DLM_SLV,访问频率可达200MHz,总线宽度64bit,可以cache缓存。XPI接口为QSPI总线,最高频率133Mhz,双沿采样,通常只有4bit宽度。其中AHB总线还有32kbyte SRAM,但主要用于外设存储,这里不做赘述。

b0635730-38d1-11ef-a655-92fbcf53809c.png

实际应用中程序都会放到flash中存储,而XPI的接口速度极大限制了代码执行效率。此外,由于XPI接口是可以cache缓存,导致XPI执行时cache命中和没有命中的运行时间差别非常大,代码一致性很差。为了方便客户使用,可以生成工程时选用debug/release模式,指定程序在ILM中执行。随后通过先楫manufacture tool可以实现镜像功能,即生成在从FLASH 加载的RAM启动镜像。通过这种方式实现代码完全在ILM中执行。

镜像助手可将SDK中的debug/release 构建的应用转化为FLASH启动镜像。

关键参数:

固件首地址相对容器首地址偏移

加载地址

入口点地址

b091d0ce-38d1-11ef-a655-92fbcf53809c.png

2

SEGGER编译优化在AXI_RAM执行

由于ILM空间限制,很多电源或电机复杂应用无法将程序全部放到ILM中执行,会导致因读取存储速度限制了CPU算力。

HPM6200、HPM6E00系列在AXI总线的大容量SRAM可以配置成程序存储,其中HPM6260、HPM6E60还可以将CPU1的ILM、DLM配置到AXI总线上,基本满足了绝大部分应用。AXI RAM主频可达200Mhz,64bit位宽,有cache缓存,可以大大减少程序读取对CPU性能的影响。

segger编译器可以自动生成flash加载到RAM的拷贝代码,只要在linker文件中配置相应特性,不需要额外修改flash拷贝代码。

在linker文件中重新划分AXI RAM,增加代码区域。在软件中指定代码生成后存放区域。

通过SDK GUI直接指定修改后的linker文件,即可实现代码在ILM+AXIRAM中执行。

b0be2e58-38d1-11ef-a655-92fbcf53809c.png

代码指定区域可以通过SEEGER IDE批量指定文件或文件夹的程序放置区域,也可以在函数名前面增加函数宏定义。

b0ecbb88-38d1-11ef-a655-92fbcf53809c.pngb126fc8a-38d1-11ef-a655-92fbcf53809c.png

3

GCC编译优化在AXI_RAM执行

先楫产品支持Andes加速指令,可以加速三角函数、指数运算等复杂运行速度,但同时需要GCC编译器支持。

在linker文件中重新划分AXI RAM,增加代码区域。在软件中指定代码生成后存放区域。

与segger编译器不同,GCC编译需要增加额外代码实现flash加载到RAM的拷贝,需要修改相应的reset.c文件。

支持Andes加速指令需要引用hpm_math.h库文件,会调用libdspf.a、libdspd.a、libdsp.a等封装库。由于封装库非明文代码,无法通过常规方法指定代码存放区域,导致调用该代码时会因代码放置在flash降低整体执行速度。需要在linker文件中额外配置响应代码区域分配。

GCC编译后无法像segger一样编译后通过图形显示生成代码的占有率,且map文件阅读性差。对gcc编译的map文件需要引用AMAP.EXE工具。

b15589ec-38d1-11ef-a655-92fbcf53809c.png

b42bfd04-38d1-11ef-a655-92fbcf53809c.png

b45aa87a-38d1-11ef-a655-92fbcf53809c.png

GCC编译需要增加额外代码实现flash加载到RAM的拷贝,相应代码位于 SOC/HPM6XXX/TOOLCHAINS/GCC/reset.c中。


在reset.c中函数c_startup实现flash到RAM程序的拷贝。

程序运行时,会以start.s开始,进入main函数之前先调用c_startup 函数完成程序搬移,在客户的应用代码中不会因程序放置位置不同而增加额外操作。

b49859ae-38d1-11ef-a655-92fbcf53809c.png

4

优化小知识

segger编译器会将所有常数默认为定点数,即使该常数为小数,也需要在对应常数前加强制浮点转换或者在常数后面加“f”做说明。

函数的inline定义在optimization level=0时是无效的,需要把优化等级设为1或更高。

建议将常用函数或变量通过attribute属性定义到“.fast”和“.fast_ram”。

先楫MCU为多总线系统,当CPU读写外设时会有时钟同步问题,建议在配置外设时尽量提高外设频率,减少时钟同步延迟。

HPM6260以及HPM6E60可以通过ILM_SLV、DLM_SLV接口可以将CPU1的内部存储作为AXI_RAM使用。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • mcu
    mcu
    +关注

    关注

    146

    文章

    16254

    浏览量

    345649
  • cpu
    cpu
    +关注

    关注

    68

    文章

    10552

    浏览量

    207802
  • 程序优化设计

    关注

    0

    文章

    3

    浏览量

    1170
收藏 人收藏

    评论

    相关推荐

    关于uCos实时的疑惑

    uCos 是实时内核,但我还是有些疑问,我觉得它只能保证优先级最高任务的实时,比如,创建任务A, B, C, 优先级以此为 5,6,7void TASK_A(void *parg)
    发表于 07-24 08:23

    SHT30程序可移植不强的问题怎么优化

    针对上篇文章对于程序可移植不强的问题进行优化,基本思路是首先搭建好IIC底层驱动程序,该程序可用于任何IIC通讯设备,然后针对不同的IIC
    发表于 02-21 06:19

    什么是实时呢?影响RTOS实时的因素都有哪些呢?

    在嵌入式实时系统中,一般对实时都具有很高的要求,那么什么是实时呢?实时
    发表于 06-21 16:32

    Zephyr与FreeRTOS实时测试比较

    1、Zephyr与FreeRTOS实时测试比较分析用Rhealstone基准程序方法,分别测试Zephyr和FreeRTOS两个RTOS的六个实时性能指标,发现Zephyr指标较差。
    发表于 08-19 16:12

    嵌入式实时程序设计中C/C++代码的优化

    本文简单介绍了嵌入式实时程序设计的特点和嵌入式系统设计中语言的选择,着重介绍了以下几种在嵌入式实时程序设计中优化 C/C++代码的方法[关键
    发表于 08-07 08:47 15次下载

    优化电压IGBT,优化电压IGBT是什么意思

    优化电压IGBT,优化电压IGBT是什么意思 中心议题: 优化电压IGBT
    发表于 03-24 09:49 1229次阅读
    <b class='flag-5'>优化</b><b class='flag-5'>高</b>电压IGBT,<b class='flag-5'>优化</b><b class='flag-5'>高</b>电压IGBT是什么意思

    DSP程序优化总结

    DSP程序优化总结
    发表于 10-23 14:24 2次下载
    DSP<b class='flag-5'>程序</b><b class='flag-5'>优化</b>总结

    基于RTSJ的实时嵌入式系统API的优化研究

    描述了一个基于RTSJ的应用程序接口,该API的功能是提供高级的并发实时计算结构,优化实时嵌入式系统开发。同时,部署和优化(在开销足迹/时间
    发表于 11-30 12:20 368次阅读

    如何对C语言程序进行优化

    程序进行优化,通常是指优化程序代码或程序执行速度。优化代码和
    发表于 11-15 11:08 11次下载
    如何对C语言<b class='flag-5'>程序</b>进行<b class='flag-5'>优化</b>

    车辆工程基于某MATLAB地动力仿真分析报告及优化设计程序

    本文档的主要内容详细介绍的是车辆工程基于某MATLAB地动力仿真分析报告及优化设计程序免费下载。
    发表于 03-04 17:24 12次下载

    xenomai实时的影响因素及优化措施

    本文讲述一些有利于提高xenomai实时的配置建议,部分针对X86架构,但它们的底层原理相通,同样适用于其他CPU架构和系统,希望对你有用。
    的头像 发表于 06-13 12:01 4391次阅读

    实时控制系统中使用传感器优化数据可靠的3个技巧

    实时控制系统中使用传感器优化数据可靠的3个技巧
    发表于 10-28 11:43 0次下载
    在<b class='flag-5'>实时</b>控制系统中使用传感器<b class='flag-5'>优化</b>数据可靠<b class='flag-5'>性</b>的3个技巧

    实时控制系统中使用传感器优化数据可靠的3个技巧

    实时控制是闭环系统在定义的时间窗口内收集数据、处理数据并更新系统的能力。作为文章“实时控制简介及其重要”的续篇,本文将详细介绍实时控制系统的第一个功能块“检测(收集)数据”,并针对如
    的头像 发表于 11-16 09:07 580次阅读
    在<b class='flag-5'>实时</b>控制系统中使用传感器<b class='flag-5'>优化</b>数据可靠<b class='flag-5'>性</b>的3个技巧

    实时控制系统中使用传感器优化数据可靠的3个技巧

      实时控制是闭环系统在定义的时间窗口内收集数据、处理数据并更新系统的能力。作为文章“实时控制简介及其重要”的续篇,本文将详细介绍实时控制系统的第一个功能块“检测(收集)数据”,并针
    发表于 03-15 09:23 523次阅读
    在<b class='flag-5'>实时</b>控制系统中使用传感器<b class='flag-5'>优化</b>数据可靠<b class='flag-5'>性</b>的3个技巧

    如何优化MCU SPI驱动程序以实现ADC吞吐速率

    如何优化MCU SPI驱动程序以实现ADC吞吐速率
    的头像 发表于 10-24 16:03 426次阅读
    如何<b class='flag-5'>优化</b>MCU SPI驱动<b class='flag-5'>程序</b>以实现<b class='flag-5'>高</b>ADC吞吐速率