MSP430 MEMORY ADDRESS IN CCS6
我已经编写了我的第一个 MSP-EXP430F5529LP LED 开/关程序。
我想分析我的程序。但我在第一步遇到了问题。
我从板上提取了我的 LED 程序,但我得到了不清楚的数据。 (3)
这是我的第一个问题。那是什么文件格式?我的意思是我想知道我的内存转储文件的文件格式。 (3)
我的第二个问题是为什么 CCS 6 不能正确指示内存地址?
我知道 MSP430 是 16 位 MCU。所以每个内存地址都应该是 16 位宽。但我从 CCS6 反汇编视图中复制的汇编代码 (2) 向我显示地址,就像 01XXXX 格式一样。
相对数据取消引用和执行流程分支运行良好。但为什么 CSS6 让我感到困惑?我的意思是我想知道为什么 CCS6 显示内存地址为 24 位宽??
任何知道解释我想知道什么的 TI 文档在哪里的人,请告诉我。请不要提及 MSP430xxxx 用户指南。
对不起我的英语:(
1.c 代码
1 2 3 4 5 6 7 8 9 10 11 12 | #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.汇编代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 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.内存转储(主)
1 2 3 4 5 6 7 | :1044000031400044b113ec000c930224b1130000be :104410000c43b113c200b113f00000000200000011 :10442000840001001a44000000240000ffffffff89 :10443000ffffffffffffffffffffffffffffffff8c :10444000ffffffffffffffffffffffffffffffff7c ... ... |
如果有人阅读用户指南(这就是它们存在的原因),那么就会被告知程序计数器是 20 位的。所以,现在您知道为什么会看到 20 位范围内的地址了。
MSP430 用户指南链接:http://www.ti.com/lit/ug/slau208n/slau208n.pdf
The 20-bit PC (PC/R0) points to the next instruction to be executed.
Each instruction uses an even number of bytes (2, 4, 6, or 8 bytes),
and the PC is incremented accordingly. Instruction accesses are
performed on word boundaries, and the PC is aligned to even addresses.
Figure 6-3 shows the PC.
以上内容摘自用户指南。这一点我怎么强调都不过分——但您确实需要阅读用户指南。不这样做并尝试对微控制器进行编程会损害您的心理健康。
内存转储似乎是 Intel hex 文件格式 https://en.wikipedia.org/wiki/Intel_HEX