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混合组装功能的问题

Guru**** 2587365 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/620557/ccs-msp430g2744-problems-with-c-mixed-assembly-function

部件号:MSP430G2744

工具/软件:Code Composer Studio

每个人都很好!

我写的代码有一些调试问题,但首先让我解释一下我的程序。

我希望带有向上和向下按钮的小键盘通过递增或递减起点值来更改显示屏上的值,并且在定时器A的ISR中, 我需要每隔10毫秒调用一次.asm函数,以便能够知道用户是否按下了常规按钮(即我的变量TASTO)。

读取该值后,我调用.c函数 "Button_Pushed",以便在按下的按钮为向上或向下按钮时执行一些不同的操作。

我有一个与.asm文件共享的.c头文件: 下面是 我要在.asm文件中使用的所有变量和函数的定义。

在此头文件中,我声明了变量 TASTO ,如下所示:

extern unsigned char TASTO;

在.asm文件中,我写了如下内容:

.BSS TASCO,1.

全球TAPCO

直到这一点,一切看起来都很棒: 事实上,当我编译我的代码时,我没有任何错误和警告。

但是很遗憾,我无法对调试步骤进行同样的描述,因为我的程序不能执行我想要的操作(如上所述)。

似乎链接程序文件与.c头文件中的变量TASTO与我在.asm函数中使用的变量不匹配。

有可能吗? 我写错了吗?

在C头文件中声明变量并在.asm文件中使用该变量,共享该头文件的最简单方法是什么?

(以前处理的文件附在本帖子中)。

我希望有人能真正帮助我找到解决方案,以便我继续工作。

非常感谢大家的关注,

此致,

Maria Angela

e2e.ti.com/.../0654.Code.txt

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

    Maria Angela,您好!

    我想您可能真的要声明TASDO变量两次,但您真的希望TASDO成为.asm文件也可以修改的全局变量,对吗? 我认为您不应该 在.asm文件中声明TASTO变量,只需确保包含头文件,然后开始在汇编文件中使用它。  下面是我为装配体函数可以使用和修改的全局变量所做的一个示例:

    主要c:

    /* main.c */
    #include <MSP40.0.h>
    #include "ASM_func.h"
    
    unsigned char test = 0;
    unsigned char i = 0;
    
    /**
    * main.c
    */
    void main(void)
    {
    	WDTCTL = WDTPW | WDTHOLD;//	停止看门狗计时
    	
    	器while (1){
    	
    	对于(i = 0;i < 255;I++)
    	{
    	ASM_func();
    	__no_operation();
    	}
    
    	测试=0;}}
    	
    

    asm_func.h

    /*
    * asm_func.h
    *
    *创建时间:2017年8月25日
    * 作者:a28.2836万
    */
    
    #ifndef ASM_FUNC_H_
    #define ASM_FUNC_H_
    
    extern unsigned char test;
    void ASM_func (void);
    
    #endif /* ASM_FUNC_H_*/
    

    ASM_func.asm

    		;ASM_func.asm
    
    		.cdecls C, list,"msp430g2744.h"
    		.cdecls C, list,"ASM_func.h"
    
    ASM_func:.asmfunc
    		push.w R5
    		mov.b test, R5
    		inc test
    		pop.w R5
    		ret
    		.endasmfunc
    

    这是否有帮助?

    此致,

    Katie

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    尊敬的Katie:
    非常感谢您的宝贵回答和热情。
    它真的帮了我很多忙,我的调试问题!! :)

    此致,
    Maria Angela
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    很棒! 我很高兴我能提供帮助。
    -Katie