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.

[参考译文] F28377D-SEP:syscfg 文件的 CPU 使用情况

Guru**** 2867080 points

Other Parts Discussed in Thread: TMS320F28388D, C2000WARE, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/c2000-microcontrollers-group/c2000/f/c2000-microcontrollers-forum/1639553/f28377d-sep-cpu-usage-of-syscfg-file

器件型号: F28377D-SEP
主题中讨论的其他器件: TMS320F28388DC2000WARESysConfig

您好、  

我正在为我的工程使用 TMS320F28388D MCU。 我知道空示例工程中存在 syscfg 文件、它可以帮助我使用 GUI 编写驱动程序级代码。 它会创建以下文件。

  • board.c
  • board.h
  • device.h
  • device.c
  • board.cmd.genlibs
  • board.opt
  • board.json 文件中找到
  • pinmux.csv
  • c2000ware_libraries.cmd.genlibs
  • c2000ware_libraries.c
  • c2000ware_libraries.h
  • c2000ware_libraries.opt
  • clocktree.h
  • example.syscfg。

我的问题是、这些生成的代码占用多大的 RAM 空间? 我理解它与我编写的代码有关、但它对 RAM 空间利用率有多大影响?

其中几个文件为空(例如,c2000ware_libraries.cmd.genlibs)-为什么在输出为空或仅输出注释文件时生成这些文件? 它们是否也会占用空间?

Device_init () 和 Device_initGPIO() 在一条通道中初始化所有端口、引脚和时钟、尽管代码中使用了它。 我知道、如果不解锁这些端口、任何代码都不会让其正常工作、这是确保相同的安全保护措施。 但是、它确实会占用比所需 CPU 周期更多的 CPU、不是吗? 我应该从两个函数(特别是 device_init ()) 中手动选择哪一行代码以确保只启用我要使用的端口?

此致、
Reshma。

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

    你好、Reshma  

    对于空工程、实际的 RAM 影响是最小的、并且它完全随您在 SysConfig 中配置的内容而扩展。
    衡量特定编译情况的最佳方法是在编译后查看.map 文件、CCS 会与.out 一起生成该文件。 检查 board.obj 和 c2000ware_libraries.obj 部分以了解确切的图。

    此类文件c2000ware_libraries.cmd.genlibs可选特征的脚手架/占位符。 它们的存在使建立系统能够无条件地引用它们而不会出现错误。  空文件占用零内存、编译器和链接器只会将其作为 no-ops 进行处理。 它们不会影响您的闪存或 RAM 占用空间。

    您是正确的、Device_init()默认情况下为所有外设启用时钟并Device_initGPIO()解锁所有 GPIO 端口、这会消耗比启动时严格必要的 CPU 周期数更多的 CPU 周期数。 但是、这是一次性启动成本、而不是持续的运行时损失。

    如果您仍想优化,下面是需要从 Device_init () 中选择性地保留的内容。   

    // 1。 禁用看门狗(或配置看门狗)
    sysctl_disableWatchdog ();

    // 2. 设置系统时钟(必需)
    SysCtl_setclock (device_setclock_CFG);//您的 PLL 配置

    // 3. 闪存等待状态(如果从闪存运行)
    FLASH_initModule (FLASH0CTRL_BASE、FLASH0ECC_BASE、DEVICE_FLASH_WAITSTAT);

    // 4. 而不是 Device_enableAllPeripherals()、只调用您需要的内容。 例如:
    SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_TIMER0);//(如果使用 CPU 计时器 0)
    SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_EPWM1);//如果使用 ePWM1
    SysCtl_enablePeripheral (SYSCTL_PERIPH_CLK_SCIA);//(如果使用 SCI-A)
    //...只添加您的应用程序所需的内容

    对于 Device_initGPIO()、它只需调用 GPIO_unlockPortConfig (GPIO_PORT_A、0xFFFFFFFF)(以及 B、C 等)即可删除所有 GPIO 配置寄存器的写锁定。 如果您仅使用端口 A 和 B、则可以调用:

    GPIO_unlockPortConfig (GPIO_PORT_A、0xFFFFFFFF);
    GPIO_unlockPortConfig (GPIO_PORT_B、0xFFFFFFFF);
    //如果未使用、则跳过 C、D、E、F

    如果您手动编辑device.c、SysConfig 将在下次重新生成文件时覆盖您的更改。 保留优化:
    将相关的初始化代码复制到您自己的main.c或自定义的 init 文件中
    device.c从构建中删除 SysConfig 生成的



    接受默认的Device_init()“原样 “、额外的 CPU 周期为一次性启动 总线电压 以微秒为单位进行测量、除非您有严格的引导时间要求、否则可以忽略不计





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

    您好、

    感谢您的快速答复。

    我检查了.map 文件、其中提到了 RAM 和闪存以及应用层代码的用法? 我认为即使是内存分配选项卡也会以图片格式提供相同的信息。 但是、.out 和.obj 文件是二进制文件、我无法制作大部分这些文件? 其中是否有具体内容需要查找? 我附上了屏幕截图、以便在查看 SPI 项目示例的正确文件时进行确认。


       

    如果手动配置同一个基于 SPI 的工程(无 SysConfig)与使用 SysConfig 配置、则 RAM 使用情况有何差异?

    SysConfig 文件本身的存在是否会在运行时引入任何额外的 RAM 开销?

    是否可以在不包含 SysConfig 文件的情况下创建一个空工程、使用独立的 SysConfig 工具生成配置代码、然后仅复制生成的文件:

    • board.c
    • board.h
    • device.c (optional)
    • device.h (optional)
    • 如果使用这种方法、产生的 RAM 使用情况是否与在 IDE 中使用集成 SysConfig 相同?

    TI 建议的有关使用 SysConfig 的过程是什么?

    此致、

    Reshma。

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



    您应该查看 映射文件的模块摘要部分。


    在运行时零差。 SysConfig 完全是一个代码生成工具。 它在构建时写入 board.c / board.h。 编译后、生成的目标代码在功能上与用户手动编写的代码相同。 编译器不知道也不关心源代码是来自 SysConfig 还是手写的。 没有 SysConfig“运行时“、它根本不存在于您的最终二进制文件中。

    .syscfg 文件本身是否会增加 RAM 开销?
    编号 在预编译步骤中、SYSCONFIG 工具完全使用.syscfg 文件。 它会生成.c/.h 文件、然后完成。 syscfg 文件中的任何内容都不会到达您的二进制文件中。

    您是否可以使用独立的 SysConfig 工具并仅复制生成的文件?
    是的、您可以这样做。 使用 sysconfig 生成文件、 然后从主目录中其他 c 文件所在的 sysconfig 文件夹复制这些文件。
    然后、您可以从 generation 中禁用 sysconfig、当您下次编译时它不会生成代码。



    RAM 使用方式将相同、生成的 board.c、board.h、device.c 和 device.h 都是相同的文件、无论 SysConfig 是在 CCS 内运行还是作为独立的 CLI 工具运行。 二进制输出 应相同。

    我们建议使用 CCS 中集成的 SysConfig 作为主工作流程、因为在修改.syscfg 时、它会在每次构建中自动重新生成板级配置文件。 独立方法有效、但需要您手动重新运行该工具、并在配置更改时重新复制文件、这很容易出错。 对于生产工程、集成的 SysConfig 更简洁。 独立复制方法对于固定的、最终确定的配置或在 CCS 之外工作时是合理的。

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

    谢谢 Lakshya!