This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

[参考译文] TDA3XEVM:雷达 SDK:如何启用或禁用单个文件的优化

Guru**** 2608345 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/650890/tda3xevm-radar-sdk-how-to-enable-or-disable-optimization-for-single-file

器件型号:TDA3XEVM

您好专家、

CTM 希望基于 C:\processor_sdk_radar_03_00_00_00\vision_sdk\apps\src\rtos\radar\src\usecases\radar_capting_FFT_null 构建自己的程序。  

因为他们需要对工程进行 O3优化、所以我们将 C:\processor_sdk_radar_03_00_00_00\vision_sdk\build\rtos\makerules\rules_66.mk line105~line113修改为  

# CFLAGS (基于所选配置文件的 CFLAGS)
ifeq ($(profile_$(core))、debug)
CFLAGS_INTERNAL +=-symdebug:dwarf -O3 -keep_asm -D_define C66XDSP_=1
CFLAGS_XDCINTERNAL =-Dxdc_target_name___=C66 -Dxdc_Bld_profile_debug -D_debug_=1
ifndef module_name
CFLAGS_XDCINTERNAL +=-Dxdc_cfg_header__=$(CONFIGURO_DIR)/package/cfg /$(XDC_HFILE_NAME)_pe66.h
字节序
LNKFLAGS_INTERNAL_PROFILE =
字节序

但是、CTM 希望禁用单个文件的优化、例如 chains_radarcapturefftnull.c、那么如何为此请求设置 make 规则?  

谢谢你。

此致、

艾伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Allen、

    我已将您的问题转交给一位专家征求意见。

    此致、
    Yordan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allen、

    对于这个特定的情况 、chains_radarcapturefftnull.c 是为 IPU1_0而不是 DSP 构建的。  rules_66.mk 中提到的优化级别 不会影响此文件。

    谢谢、此致、

    Piyali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Piyali、

    很抱歉我没有注意到这一点。 我的意思是、如果我们在这个目录中有一个用于 DSP 的文件、那么如何单独启用或禁用优化。

    谢谢。

    艾伦

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Allen、

    我快速了解了编译系统、似乎要设置特定文件的优化级别、需要添加一个单独的变量、该变量捕获所有具有不同编译时间标志的文件、而不是其他文件。 使用这个单独的变量、我们应该构建这些使用不同编译标志的文件。

    我需要在最后尝试一下、然后再建议确切的步骤。 您能告诉我需要的日期吗?

    谢谢、此致、
    Piyali
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Piyali、

    由于客户需要优化他们的算法代码、而不是驱动程序代码、因此在使用 O3选项时发现了一些问题、您能否在下周(2018年1月6日)之前帮助我了解这些步骤?
    非常感谢。

    此致、
    艾伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allen、

    给定文件与其余文件具有不同的优化级别所需的更改如下所示:

    在文件 vision_sdk\build\rtos\makerules\rules_66.mk 中、以粗体添加部分:

    #创建目标文件
    #第一个$(CC)为每个对象生成依赖项生成文件
    #第二个$(CC)编译源以生成对象
    $(obj_paths):$(OBJDIR)/%.$(OBJEXT):%.c
    $(echo)\#编译$(platform):$(core):$(profile_$(core)):$(app_name)$(module_name):<<
    $(CC)-PPD=$(DEPFILE).P $(_CFLAGS)$(INincludes)$(CFLAGS_DIROPTS)$(CFLAGS_$(basename $(notdir <<))))-fc <<
    $(CC)$(_CFLAGS)$(INGS)$(CFLAGS_DIROPTS)$(CFLAGS_$(basename $(notdir <<)))-fc <<

    例如、假设我正在使用发布模式构建整个可执行文件、并且我希望构建一个像 vision_sdk\apps\src\rtos\radar\src\ALG_plugins\ALG_Fxns\radarfft2\radarFft2.c 这样的文件、而不进行任何优化。

    因此、在文件 vision_sdk\apps\src\rtos\radar\src\ALG_plugins\ALG_Fxns\radarfft2\SRC_files.mk 中添加以下行:

    CFLAGS_radarFft2 =-opt_level=0

    格式为 CFLAGS_ =

    因此、该文件会获得此选项、您应该会看到此更改:

    在生成的生成文件中:vision_sdk\binaries\apps\tda3xx_alps_BIOS_radar\obj\app_alG_plugins\tda3xx-evm\66\release\radarFft2.se66

    (默认为"发布")

    ;*优化:速度第一,尺寸第二*
    ;*基于选项:-o3、-ms0 *

    更改为  

    (已指定选项)

    ;*优化:编译时间,易于开发*
    ;*基于选项:-o0、-ms0 *

    请在您的结尾处尝试、并告诉我这是否适合您。

    此外、如果您能够澄清在 DSP 上执行的驱动程序代码不能与客户的更高优化级别配合使用、那将会非常好。

    谢谢、此致、

    Piyali

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Piyali、

    解决了。 谢谢你。

    客户编写了自己的 EDMA 驱动程序代码、并使用 while 循环来轮询完整标志寄存器。 代码是

    volatile unsigned int tmp;
    操作

    tmp =*(unsigned int *)(0xAABBCCDD);
    } while (((tmp&0x1)=0)

    我们在 CGT v7.4.23中发现、如果启用了 O3、则该循环的 asm 代码错误、只有在代码首次运行到循环中时、它才会读取寄存器、然后它是无限循环。 如果我们将 O3更改为 O0、则 asm 代码正确、循环运行良好。

    此致、
    艾伦
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    读取也应该是易失性的。

    请尝试以下操作并检查它是否在 O3优化中工作

    tmp =*(volatile unsigned int *)(0xAABBCCDD);

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好、Allen、

    很高兴听到这在你的终点工作 我同意 Sivaraj 关于将读写改为易失性无符号读写的说法。

    谢谢、此致、

    Piyali