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.

[参考译文] MSP430G2553:在 msp430g2553中使用汇编语言交换数据块

Guru**** 2540720 points


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

https://e2e.ti.com/support/microcontrollers/msp-low-power-microcontrollers-group/msp430/f/msp-low-power-microcontroller-forum/585959/msp430g2553-exchange-a-block-of-data-using-assembly-language-in-msp430g2553

器件型号:MSP430G2553

大家好、

我正在尝试一个程序来与 另一个块交换数据块。我成功编译了程序、但看不到 o/p。代码写在下面。

请告诉我是否需要任何更改,以及如何检查输出:-

--------------------------------------------------
cdecls C、list、"msp430.h";包含器件头文件

;------------------------------------------------------------------
.text;汇编到程序存储器中
全局复位
.retain;覆盖 ELF 条件链接
;并保留当前部分
.retainrefs;另外保留任何段
;具有电流基准
;部分
;------------------------------------------------------------------
重置 mov.w #_stack_end、SP;初始化 stackpointer
StopWDT mov.w #WDTPW|WDTHOLD、&WDTCTL;停止看门狗计时器

mystr1;DB "Hello World\n"
mystr2;DB "Hiiiii\n"
;------------------------------------------------------------------
;这里是主循环
;------------------------------------------------------------------
MOV.w #mystr1、R9
MOV.w #mystr2、R10

环路

MOV.w R9、r11

MOV.w R10、R9

MOV.w r11、R10

;------------------------------------------------------------------
;堆栈指针定义
;------------------------------------------------------------------
.global __stack_end
.sect .stack

;------------------------------------------------------------------
;中断矢量
;------------------------------------------------------------------
.sect ".reset";MSP430复位矢量
短路复位
.end

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您尝试声明的字符串的长度远长于一个字(两个字节)、由于通用寄存器只是一个字的大小、因此需要更多的处理来相应地切换代码块。 为什么您使用 ASM 而不是 C、这将使此过程更加简单? 您应该使用 IDE 的调试工具来验证您的代码是否按预期执行操作。

    此致、
    Ryan
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Abishek、您好!
    在 IDE 中、您能否在执行此代码后查看器件的存储器视图?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    1)但是 SIR 第一个字符串"hello world\n"是13位、第二个字符串"hiiii\n"是8位、两个都小于1字或16 位。

    先生,是否有任何问题?

    2)其次、正确编译的代码没有任何错误、但在 Debug 窗口中、内核寄存器值没有变化、即 R9、R10、r11寄存器值。 我看不到我输入的字符串。

    如何查看字符串 SIR?

    3)先生, 我是否可以在“控制台”窗口中看到我的输出? 我还可以 在"Console"窗口中输入我的值吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1)没有、SIR 我看不到任何东西。在调试窗口中、当我打开内核寄存器 R9、R10、r11时、运行代码时没有发生任何更改。
    如何查看输入的字符串和交换值 SIR?
    2)如果要输入我的值,我可以使用“控制台”窗口,如果是,那么如何使用它意味着我应该在程序中编写什么代码?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Abishek、您好!

    您的字符串长度为13字节、而不是13位。 使用您的声明、您应该在闪存中找到问题、而不是在 RAM 中。 不可能以这种方式交换闪存的数据。

    此致、

    Peter Weber

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    1) 1)好的,先生我减小了字符串的大小,现在我的字符串大小仅为2字节。即使我无法获得 o/p?
    2) 2)您告诉我、不可能在如此远的位置交换闪存的数据、那么交换闪存或 RAM 存储器中批量数据的正确方法是什么?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Abhishek、
    您使用的是汇编语言而不是 C 语言吗?

    您使用的是什么 IDE? 如果您使用的是 CCS、则可以打开"View"菜单并单击"Memory Browser"来查看存储器内容。 这是验证程序功能的最简单方法、而不是从汇编语言打印到控制台。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    好的、SIR 我现在不需要控制台窗口、我可以在存储器窗口中看到输出。但是 SIR 有一些指令  、例如 mov.w #0x0200h、0x0202h 或 mov.w #0x0200h、R5或 mov.w r5、0x0200h 或 mov.w @r5、0x0200h 不受支持。 如果不支持该指令、SIR 如何将这些值加载到存储器中?

    您能告诉我任何与存储器相关的指令吗?我可以在其中更改该存储器在 SRAM 中的位置的值吗?  

    假设存储器位置0x0200h 中存在的值为00、那么如何将其更改为10或任何值。此外、如果要在0x0200h 之后写入存储器位置、 例如0x02001、0x0202h、0x0203h、那么指令是什么?