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.

[参考译文] MSP430FR5962:IDE 错误? 大括号匹配不符合编译器指令(#if)、并且与禁用的分支匹配

Guru**** 2442090 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1007080/msp430fr5962-ide-bug-brace-matching-doesn-t-honour-compiler-directives-if-and-matches-against-disabled-branches

器件型号:MSP430FR5962

我的代码中有几个#if 编译器选项来处理一些 if-else 分支、具体取决于协议栈的选项。

当使用 IDE 执行对标识块的括号匹配时、非编译分支(例如#else 分支)具有跳转到该区域的括号匹配机制、而不是实际活动代码。  因此,与编译输出代码匹配的大括号会变得不同步(代码可能正常,这可能只是一个 IDE 问题,需要验证)。

请参阅此示例、其中 SNAP_NUM_PREAMING_Bytes 为1 (>0)、这意味着此处的#else case 不包含在生成的代码中并呈灰色显示。  但是、大括号匹配会忽略灰显的段、并与找到的第一个大括号匹配、而不是编译后的实际大括号。  这会导致#else 语句上方的语句由于不匹配而出现括号不匹配。

#if ( SNAP_NUM_PREAMBLE_BYTES > 0 )
                if ( rxChar == SNAP_PREAMBLE_BYTE ) {
                    info_p->preamble_start = true;
                    info_p->preamble_count++;
                }
                else if ( rxChar == SNAP_SYNC_BYTE ) {
#else
                if ( rxChar == SNAP_SYNC_BYTE ) {
#endif
                    // sync byte code
#if ( SNAP_NUM_PREAMBLE_BYTES > 0 )
                    // check preamble type
                    switch ( info_p->preamble_type ) {
                    case SNAP_PREAMBLE_NONE:
                        info_p->rx_frame_state = SNAP_RXFS_HDR2;
                        break;
                    case SNAP_PREAMBLE_RELAXED:
                        if ( info_p->preamble_count == 0 ) {
                            info_p->fault_type = SNAP_FAULT_BAD_PREAMBLE;
                            info_p->rx_frame_state = SNAP_RXFS_PROCESS_FAULT;
                            redo_flag = true;
                        }
                        else {
                            info_p->rx_frame_state = SNAP_RXFS_HDR2;
                        }
                        break;

<< ... >>

我没有检查生成的代码,但认为代码可能可以-此错误似乎只是 IDE 大括号匹配问题。  我的代码没有编译器问题;这只是编码/调试/可视化问题。

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

    您好、Scott、

    您运行的是哪个版本的 CCS?

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

    很抱歉,我应该这样做。  我运行的是10.2.0.00009。   

    最棒的

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

    很抱歉,我应该这样做。  我运行的是10.2.0.00009。   

    最棒的

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    [引用 userid="457730" URL"~/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/1007080/msp430fr5962-ide-bug-brace-matching-doesn-t-honor-compiler-directives-if-and-matches-against-disabled-branches ]但是,括号匹配会忽略灰色的部分并与找到的第一个括号匹配,而不是编译的实际括号。  [/报价]

    我发现这些 Eclipse 错误处于与此相关的新状态:

    错误 222032  - [editor]支架匹配器应忽略未激活的代码

    错误 445323  Brace 匹配在禁用预处理器的部分中无法正常工作

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

    您好、Scott、

    由于这是一个已知的 Eclipse 问题、我们无法控制、因此我将此帖子的状态更改为已解决。
    如果情况并非如此,请单击“这无法解决我的问题”按钮,并使用更多信息回复此主题。
    如果此主题锁定、请单击"提出相关问题"按钮、然后在新主题中描述您的问题的当前状态以及您可能需要帮助我们帮助解决您的问题的任何其他详细信息。