MSP430F5529: _disable_interrupts宏编译报警

Part Number: MSP430F5529
Other Parts Discussed in Thread: MSP430-SDK,

Description Resource Path Location Type
#48-D incompatible redefinition of macro "_disable_interrupts" (declared at line 129 of "D:/CCS11.0.0/ccs/tools/compiler/ti-cgt-msp430_21.6.0.LTS/include/intrinsics.h") .ccsproject /ADC-FB line 108, external location: D:\CCS11.0.0\ccs\tools\compiler\ti-cgt-msp430_21.6.0.LTS\include\_atomic.h C/C++ Problem。这是项目代码在编译过程中产生的报警,这个问题是由于在_atomic.h文件中重新定义了_disable_interrupts宏,而intrinsics.h文件中已经定义了该宏。这是编译器中的两个文件互相重复定义导致的编译错误。而项目代码中没有_disable_interrupts宏的应用。问题该如何解决?

  • 您好

    请问您用的是TI哪个版本的SDK,哪个例程?

  • 是MSP430Ware_3_80_14_01版MSP430-SDK。项目是adc采集值转为电压之后,计算相关的3个值,将这4个值显示12864分辨率的oled上,同时将4个值利用tinymodbus rtu协议发送到上位机。ADC、uart都基于SDK库函数,oled的iic是模拟的,有供应商的库代码。项目代码的总体结构是adc采集与oled显示是一条线工作,tinymodbus rtu向上位机通信是另一条线工作。项目代码程序虽然能够运行和编译,但是存在以上报警,为了避免重复定义报警,重新定义了宏:

    #ifndef CUSTOM_MACROS_H_
    #define CUSTOM_MACROS_H_

    #include <stdint.h>
    #include <intrinsics.h>

    #define MY_MUTEX_DISABLE_IRQ() (my_disable_interrupts())
    #define MY_MUTEX_ENABLE_IRQ(state) (my_restore_interrupts((state)))

    static inline uint32_t my_disable_interrupts() {
    uint32_t sr = __get_SR_register();
    __disable_interrupt();
    return sr;
    }

    static inline void my_restore_interrupts(uint32_t sr) {
    __bis_SR_register(sr);
    }

    #endif // CUSTOM_MACROS_H_

    为了避免冲突加了条件编译

    #ifndef MUTEX_H
    #define MUTEX_H

    #include <stdint.h>
    #include <stdbool.h>
    #include <stdatomic.h>
    #include <msp430f5529.h> // 包含正确的 MSP430 头文件
    #include "custom_macros.h"


    typedef struct {
    atomic_bool locked;
    } mutex_t;

    void mutex_init(mutex_t *mutex);
    void mutex_lock(mutex_t *mutex);
    void mutex_unlock(mutex_t *mutex);

    // 使用条件编译来避免宏定义冲突
    #ifndef MY_MUTEX_DISABLE_IRQ
    #define MY_MUTEX_DISABLE_IRQ() MY_DISABLE_IRQ()
    #endif

    #ifndef MY_MUTEX_ENABLE_IRQ
    #define MY_MUTEX_ENABLE_IRQ(state) MY_RESTORE_IRQ(state)
    #endif

    #endif // MUTEX_H

    运行项目仍然有报警。这个报警会在清理项目后再次运行项目产生,如果不清理连续运行,报警就没有显示。

  • 我们会为您调查。

    由于公共假期,答复有所延迟,最晚下周回复。

    带来不便还请谅解。

  • 请尝试新版本的编译器吗?

    www.ti.com/.../MSP-CGT

    版本:21.6.1.LTS
    发布日期:2022年9月29日
    不确定是否会修复此问题,您能帮我检查一下吗?
    另外,这是我身边的两个文件:
    C:\ti\ccs1280\CCS\tools\compiler\ti-CGT-MSP430_21.6.1.LTS\include
    _atomic.hintrinsics.h