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.

[参考译文] RTOS/MSP430F5528:C 语言"if"语句无法正确执行

Guru**** 2535750 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/822037/rtos-msp430f5528-a-c-language-if-statement-fails-to-execute-correctly

器件型号:MSP430F5528
主题中讨论的其他器件:MSP432P401R

工具/软件:TI-RTOS

大家好、    我的代码中有一条简单的错误语句。  两 个测试变量(temperature、 hi_temp_threshold)都声明为 float。

当我处于调试器中时、在 if 语句之前的断点上停止、 我将温度修改为值3000。   HI_TEMP_THRESHOLD 的值为2285。

尽管尝试次数很多、if 语句始终会导致 错误结果、并且不会执行我的后续代码。   

if (temperature > hi_temp_threshold)

A0 = a0_80;

A1 = 0;

A2 = 0;

 这对我来说似乎是某种内存问题、但我不确定如何继续。  请提供任何帮助。

注意: 在四处看看时、我发现项目 CFG 文件中的 BIOS.heapSize 设置为零。  就像实验一样、我将其提升到512字节的值。

这不起作用、因此该值恢复为零。

我的总 SRAM 使用率为52%、 并且我对项目进行了全新的清理/构建。  相关代码在 RTOS 任务内执行。

谢谢

罗伊    

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

    如果添加 assign 语句会发生什么情况:

    温度= 3000;而不是通过调试器进行设置?

    如果您使用以下命令会发生什么情况:

    如果(3000 > hi_temp_threshold)

    您是否在上面键入了代码、或者复制并粘贴了代码? 如果键入了分号、请仔细查看是否有任何额外的分号。

    关闭优化。

    创建一个小型测试用例、对其进行测试、然后将其发布在此处。

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

    这在我的 MSP432P401R 上运行正常:

    /*-版权所有-、BSD
    *版权所有(c) 2017、德州仪器(TI)公司
    *保留所有权利。
    *
    *
    只要
    符合以下条件*、允许以源代码和二进制形式重新分发和使用:
    *
    *源代码的重新分发必须保留上述版权
    声明*、此条件列表和以下免责声明。
    *
    ***二进制形式的再发行必须在
    
    *随发行提供的文档和/或其他材料中复制上述版权声明、本条件列表和以下免责声明。
    *
    ***未经
    
    事先书面许可、不得使用德州仪器公司的名称或*其贡献者的名称认可或推广从本软件衍生的产品*。
    *
    *本软件由版权所有者和贡献者"按原样"提供
    *、
    
    不承担任何明示或暗示的保证、包括但不限于*适销性和特定用途适用性的暗示保证*。 在任何情况下、版权所有者或
    *贡献者都不对任何直接、间接、偶然、特殊、
    *模范、 或相应的损害(包括但不限于
    *采购替代产品或服务;丧失使用、数据或利润;
    *或业务中断)、但出于任何责任理论
    、*无论是在合同中、严格责任还是由于
    使用本软件而以任何方式产生的侵权行为(包括疏忽或*其他)
    、*即使已获悉可能会发生此类损坏。
    *--/版权--*/
    
    * MSP432 GPIO -切换输出高电平/低电平
    *
    说明:在此非常简单的示例中,P1.0上的 LED 使用
    DriverLib 的 GPIO API 配置为*输出。 然后、无限循环开始
    *、它将持续切换 GPIO 并有效地使 LED 闪烁。
    *
    * MSP432P401
    * ----------
    * /|\| |
    * || |
    * -|RST P1.0 |-->P1.0 LED
    * | |
    * | |
    * | |
    * | |
    *
    (小部分 /*
    DriverLib 包括*/
    #include 
    
    /*标准包括*/
    #include 
    #include 
    
    //![Simple GPIO Config]
    int main (void)
    {
    volatile uint32_t ii;
    浮动温度;
    float hi_temp_threshold;
    
    /*停止看门狗*/
    MAP_WDT_A_HOLDTimer();
    
    /*将 P1.0配置为输出*/
    MAP_GPIO_setAsOutputPin (GPIO_PORT_P1、GPIO_PIN0);
    MAP_GPIO_setOutputLowOnPin (GPIO_PORT_P1、GPIO_PIN0);
    
    温度= 3000.0;
    hi_temp_threshold = 2285.0;
    
    如果(温度> hi_temp_threshold)
    {
    
    while (1)
    {
    /*延迟环路*/
    对于(ii = 0;ii < 5000;ii +)
    {
    }
    
    MAP_GPIO_toggleOutputOnPin (GPIO_PORT_P1、GPIO_PIN0);
    }
    }
    
    while (1){};
    }
    //![简单 GPIO 配置]
    
    
    

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

    您好、Keith、

    代码现在工作。   

    感谢你的帮助。

    罗伊