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.

[参考译文] CCS/MSP430G2744:C和ASM一起使用的另一个问题?!...

Guru**** 2535880 points


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

https://e2e.ti.com/support/tools/code-composer-studio-group/ccs/f/code-composer-studio-forum/631932/ccs-msp430g2744-another-problem-with-c-and-asm-used-together

部件号:MSP430G2744

工具/软件:Code Composer Studio

大家好!!

我再次来到这里,寻求您的帮助,并尝试解决我的代码中的问题。

我在RAM的头文件"Definizioni_Settingaggi.h"中有一个buffer_eeprom定义为整数组

unsigned int buffer_eeprom [32]; 

我还定义了此数组的前3个成员,如下所示:

#define flag_ATTIVAZIONI		BUFFER_EEPROM[0]
#define Blanch_check			buffer_eepro[1]#define
flag_VISUALIZAZIONI	BUFFER_EEPROM[2] 

现在,这些是我的标志,我想在ASM函数中测试,设置和清除它们的位,该函数与其他一些.c文件共享头文件。

对于Flag_ATTIVAZIONI,我声明:

#define flag_FILTRO5060 0x0001
#define FLAGsonda_Cuore 0x0002
#define FLAGsonda_MAX 0x0004
#define flag_CORREZIONE 0x0008
unsigned int flag_ATTIVAZIONI;

我使用这些名称是指文件"Protocollo_SPI.ASM"中ASM函数AVVIA_CONN中我的flag_ATTIVAZIONI的这些位。

AVVIA_CONN:			NOP
				push.b R13
				CLR.b R13
				mov.b #0x80,&UCA0TXBUF
				bit.b #flag_FILTRO5060,flag_ATTIVAZIONI
				jeq	FILTRO_50HzAA
				nop
				mov.b #CONREG_MAX60,R13
				br	#TRASMETTI 

但代码编辑器在我写入--> bit.b #flag_FILTRO5060, flag_ATTIVAZIONI的行上显示了这个错误:“意外的尾随操作数”。

我真的不明白为什么...

我的代码是否有问题? 解决此问题的最佳方法是什么?

我希望有人能帮助我解决问题,并给我一些有用的建议。

感谢您的关注,

此致

Maria Angela  

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    在这种情况下,我喜欢让编译器来完成工作。 下面是一个测试变量中某位的测试案例:

    #define flag_FILTRO5060 0x0001
    unsigned int flag_ATTIVAZIONI;

    void AVVIA_CONN (void)

    IF (FLAG_ATTIVAZIONI和FLAG_FILTRO5060)
    call1();
    否则
    call2();
    }

    编译器生成以下内容:

    AVVIA_CONN:
    位宽 #1,&FLAG_ATTIVAZIONI+0
    JNE $C$L1
    巴西 #call2.
    $C$L1:
    巴西 #call1.

    这就告诉我你需要写“&FLAG_ATTIVAZIONI”而不是“FLAG_ATTIVAZIONI”。 这是否有帮助?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    有一件事让我感到困惑。  你写的...

    Luigi Quaglia 说:
    #define flag_ATTIVAZIONI buffer_eeprom[0]

    ...和...

    [QUETE USER="Luigi Quaglia"]未签名int flag_ATTIVAZIONI;[/QUETE]

    我看不出来如何在同一个C文件中同时包含这两个文件。  如果你这么做,第二个就变成了...

    unsigned int buffer_eepro[0]; 

    这是另一个定义BUFFER_EEPROM。  这不是法律规范。

    谢谢,此致,

    -George

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    你好,考古学家!
    昨天我尝试了“&解决方案”,但不幸的是,错误仍然存在;(
    我认为问题在于BUFFER_EEPROM和FLAG_ATTIVAZIONI作为整数向量的一部分的定义。
    但是,非常感谢您的回答!
    如果你有任何其他建议,他们一定会感谢你!
    此致,
    Maria Angela
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    您好,George!

    感谢您的回答。 我认为这是我的问题的中心...

    所以我删除了定义

    #define flag_ATTIVAZIONI BUFFER_EEPROM[0] 

    在一个.c文件中,我写了这样的内容:

    BUFFER_EEPROM[0]=FLAG_ATTIVAZIONI; 

    在我的代码中,我需要Flag_ATTIVAZIONI是一个可用变量(它是一个标志,所以我想在其位字段中访问),并且它必须放置在buffer_eeprom中。

    这是否符合我的目的?

    最好的Regads,

    Maria Angela

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

    我不确定问题的根源。  我可以说,更笼统地说,这.

    [报价用户="Luigi Quaglia"]#define flag_ATTIVAZIONI buffer_eepro[0]
    #define Blanch_check buffer_eepro[1]
    #define flag_VISUALIZAZIONI BUFFER_EEPROM[2]

    ...是一种不寻常的编码做法。  通常,由#define创建的符号用所有大写字母书写。  通常情况下,它与阵列位置相对应。  这是#define的典型用法...

    [报价用户="Luigi Quaglia"]#define flag_FILTRO5060 0x0001
    #define FLAGsonda_Cuore 0x0002
    #define FLAGsonda_MAX 0x0004
    #define flag_CORREZIONE 0x0008

    为什么这些#define名称对应于数组位置?  您要解决的总体问题是什么?  如果我能更好地理解这一点,我可能会建议一种更好的方法。

    谢谢,此致,

    -George

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

    George,感谢您的回复。

    我想为我的计划提供的结构如下所示:

    ---------------- 内存---------------------------

    0x200-->  BUFFER_EEPROM[32]

    ----------------------------------

    此数组在每个位置都有一个标志;因此我有:

    BUFFER_EEPROM-->在BUFFER_EEPROM[0]中的第一个位置处的FLAG_ATTIVAZIONI

    Blanch_check被放置在buffer_eepro[1]中

    BUFFER_EEPROM[2]上的FLAG_VISUALIZAZIONI

    以便组织RAM内存的特定部分。

    除此之外,我的想法是,每个buffer_eepro[]的数组位置都可以作为一种位数组单独访问:

     -------- Flag_ATTIVAZIONI--------

    Flag_FILTRO5060是第一位--> 0x001

    FLAGsonda_Cuore是第二位-->0x002

    等等。

    为此,我写下了上述定义。 我希望现在我能更清楚一点。

    再次感谢大家,

    此致,

    Maria Angela

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

    [报价用户="Luigi Quaglia"]

    此数组在每个位置都有一个标志;因此我有:

    BUFFER_EEPROM-->在BUFFER_EEPROM[0]中的第一个位置处的FLAG_ATTIVAZIONI

    Blanch_check被放置在buffer_eepro[1]中

    BUFFER_EEPROM[2]上的FLAG_VISUALIZAZIONI

    以便组织RAM内存的特定部分。

    [/引述]

    您是否需要在该确切位置按该确切顺序提供这些信息?  或者,您是否需要在特定的内存范围内使用它们,而确切的顺序无关紧要?  请说明原因。

    谢谢,此致,

    -George