CCS6中的MSP430存储器地址

时间:2014-07-21 14:49:15

标签: msp430

我已经写了我的第一个MSP-EXP430F5529LP LED开/关程序。

我想分析我的程序。但是我的第一步遇到了问题。

我从板上提取了我的LED程序,我的数据不清楚。 (3)

这是我的第一个问题。那个文件格式是什么?我的意思是我想知道我的内存转储文件的文件格式。 (3)

我的第二个问题是为什么CCS 6没有正确指出内存地址?

我知道MSP430是16位MCU。所以每个内存地址应该是16位宽。但是从CCS6反汇编视图复制的汇编代码(2)显示的地址就像01XXXX格式一样。

相对数据取消引用和执行流程分支工作良好。但为什么CSS6会让我困惑?我的意思是我想知道为什么CCS6显示内存地址24位宽?

任何知道TI文件在哪里解释我想知道的人都请告诉我。请不要提及MSP430xxxx用户指南。

抱歉我的英语:(

1.c代码

#include <msp430f5529.h>

volatile unsigned int i;

void main(void) {
    WDTCTL = WDTPW | WDTHOLD;
    P1DIR |= 0x01;
    while(1){
        P1OUT ^= 0x01;
        for(i = 20000;i > 0; i--);
    }
}

2.assembly code

0100c2:   40B2 5A80 015C      MOV.W   #0x5a80,&Watchdog_Timer_WDTCTL
0100c8:   D3D2 0204           BIS.B   #1,&Port_A_PADIR
0100cc:   E3D2 0202           XOR.B   #1,&Port_A_PAOUT
0100d0:   40B2 4E20 2400      MOV.W   #0x4e20,&i
0100d6:   3C02                JMP     (0x00dc)
0100d8:   8392 2400           DEC.W   &i
0100dc:   9382 2400           TST.W   &i
0100e0:   27F5                JEQ     (0x00cc)
0100e2:   3FFA                JMP     (0x00d8)
0100e4:   4303                NOP     
0100e6:   D032 0010           BIS.W   #0x0010,SR
0100ea:   3FFD                JMP     (0x00e6)
0100ec:   431C                MOV.W   #1,R12
0100ee:   0110                RETA    
0100f0:   4303                NOP     
0100f2:   3FFF                JMP     (0x00f2)

3.memory dump(MAIN)

:1044000031400044b113ec000c930224b1130000be
:104410000c43b113c200b113f00000000200000011
:10442000840001001a44000000240000ffffffff89
:10443000ffffffffffffffffffffffffffffffff8c
:10444000ffffffffffffffffffffffffffffffff7c
...
...

1 个答案:

答案 0 :(得分:1)

如果读取用户指南(这就是它们存在的原因),则会通知一个程序计数器是20位。所以,现在你知道为什么你会看到20位范围内的地址。

链接至MSP430用户指南:http://www.ti.com/lit/ug/slau208n/slau208n.pdf

  

20位PC(PC / R0)指向要执行的下一条指令。   每条指令使用偶数个字节(2,4,6或8个字节),   并且PC相应地增加。指令访问是   在字边界上执行,并且PC与偶数地址对齐。   图6-3显示了PC。

以上是用户指南的摘录。我不能强调这一点 - 但你真的需要阅读用户指南。不这样做并尝试对微控制器进行编程对您的心理健康非常重要。

内存转储似乎采用Intel hex文件格式https://en.wikipedia.org/wiki/Intel_HEX