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.
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宏的应用。问题该如何解决?
是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
运行项目仍然有报警。这个报警会在清理项目后再次运行项目产生,如果不清理连续运行,报警就没有显示。
请尝试新版本的编译器吗?
版本:21.6.1.LTS
发布日期:2022年9月29日
不确定是否会修复此问题,您能帮我检查一下吗?
另外,这是我身边的两个文件:
C:\ti\ccs1280\CCS\tools\compiler\ti-CGT-MSP430_21.6.1.LTS\include
_atomic.hintrinsics.h