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.

[参考译文] SysConfig:SysConfig 1.21.2:SysConfig 1.21.2中的代码生成器可能存在错误

Guru**** 2538930 points
Other Parts Discussed in Thread: AM6442, SYSCONFIG

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

https://e2e.ti.com/support/microcontrollers/arm-based-microcontrollers-group/arm-based-microcontrollers/f/arm-based-microcontrollers-forum/1449020/sysconfig-sysconfig-1-21-2-potential-bug-in-code-generator-in-sysconfig-1-21-2

器件型号:SysConfig
主题中讨论的其他器件:AM6442

工具与软件:

尊敬的 TI 团队:

 为 AM6442使用 SysConfig 1.21.2和 MCU+ SDK v10.00.00.02时、会出现以下行为:

*在生成的文件中  ti_power_clock_config.c  结构  SoC_ModuleClockFrequency  声明方式如下:

typedef struct {

    uint32_t moduleId;
    uint32_t clkId;
    uint32_t clkRate;
    uint32_t clkParentId;
} SOC_ModuleClockFrequency;

然后,在运行中  void Module_clockSetFrequency (void)  比较语句中使用了上述类型的全局变量:

void Module_clockSetFrequency(void)
{
    int32_t status;
    uint32_t i = 0;

    while(gSocModulesClockFrequency[i].moduleId!=SOC_MODULES_END)
    {
        if (gSocModulesClockFrequency[i].clkParentId != -1)
        {
            /* Set module clock to specified frequency and with a specific parent */
            status = SOC_moduleSetClockFrequencyWithParent(
                        gSocModulesClockFrequency[i].moduleId,
                        gSocModulesClockFrequency[i].clkId,
                        gSocModulesClockFrequency[i].clkParentId,
                        gSocModulesClockFrequency[i].clkRate
                        );
        }
        else
        {
            /* Set module clock to specified frequency */
            status = SOC_moduleSetClockFrequency(
                        gSocModulesClockFrequency[i].moduleId,
                        gSocModulesClockFrequency[i].clkId,
                        gSocModulesClockFrequency[i].clkRate
                        );
        }
        DebugP_assertNoLog(status == SystemP_SUCCESS);
        i++;
    }
}

显然,该领域的比较  clkParentId (类型 uint32_t)  或者会与  -1.  这容易出错、并可能导致未定义的行为。

请发表评论。  


谢谢、此致!

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

    嗨、Angel、

    感谢您的提问。

    Unknown 说:
    比较字段  clkParentId (类型 uint32_t)  或者会与  -1.  容易出错、可能导致未定义的行为。

    如果您看到  gSockModulesClockFrequency 纲要、它包含 clkParentId 物理类型 uint32_t 就是这样 无符号 谐振。 因此、将值-1转换为无符号整数将导致0xFFFFFFFF。 值-1表示 clkparentId (SOC_MODUES_END)无效。  

    clkparentId 实际上正在与宏 SOC_MODULES_END(0xFFFFFFFF )进行比较。

    我将创建一个 Jira 以使其使用  SoC_modules_end  宏命令、而不是将它与-1进行比较。

    希望上述内容得到澄清。

    此致、

    Tushar

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

    尽管有上述解释、但我仍然认为它是 一个容易出错的代码、对编译器和优化的依赖。