我已经写了我的第一个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
...
...
答案 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