Вот листинг старой версии (трэш и угар

но работает)
CODE
void SaveToFlash(unsigned int *DstPtr, unsigned int *SrcPtr, unsigned int NumOfWords)
{
3ef0: 0b 12 push r11
3ef2: 0b 4f mov r15, r11
3ef4: 0c 4e mov r14, r12
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:42
_DINT();
3ef6: 32 c2 dint
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:43
FCTL3 = FWKEY; // Clear Lock bit
3ef8: b2 40 00 a5 mov #-23296,&0x012c ;#0xa500
3efc: 2c 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:44
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
3efe: b2 40 40 a5 mov #-23232,&0x0128 ;#0xa540
3f02: 28 01
memcopy():
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:22
//###############################################################
static inline
void memcopy(unsigned int DstPtr[], unsigned int SrcPtr[], unsigned int NumOfWords)
{
while(NumOfWords--)
3f04: 3d 53 add #-1, r13 ;r3 As==11
3f06: 3d 93 cmp #-1, r13 ;r3 As==11
3f08: 0a 24 jz $+22 ;abs 0x3f1e
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:24
{
DstPtr[NumOfWords] = SrcPtr[NumOfWords];
3f0a: 0f 4d mov r13, r15
3f0c: 0f 5f rla r15
3f0e: 0e 4f mov r15, r14
3f10: 0e 5b add r11, r14
3f12: 0f 5c add r12, r15
3f14: ae 4f 00 00 mov @r15, 0(r14) ;0x0000(r14)
3f18: 3d 53 add #-1, r13 ;r3 As==11
3f1a: 3d 93 cmp #-1, r13 ;r3 As==11
3f1c: f6 23 jnz $-18 ;abs 0x3f0a
SaveToFlash():
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:46
{
_DINT();
FCTL3 = FWKEY; // Clear Lock bit
FCTL1 = FWKEY + WRT; // Set WRT bit for write operation
memcopy(DstPtr, SrcPtr, NumOfWords);
FCTL1 = FWKEY; // Clear WRT bit
3f1e: b2 40 00 a5 mov #-23296,&0x0128 ;#0xa500
3f22: 28 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:47
FCTL3 = FWKEY + LOCK; // Reset LOCK bit
3f24: b2 40 10 a5 mov #-23280,&0x012c ;#0xa510
3f28: 2c 01
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:48
_EINT();
3f2a: 32 d2 eint
D:\work\PROJECTS\..\1002DT_430_01_00/flash/flash.c:49
}
3f2c: 3b 41 pop r11
3f2e: 30 41 ret
А вот новая.
Код
000042d6 <SaveToFlash>:
SaveToFlash():
42d6: 0b 12 push r11
42d8: 0a 12 push r10
42da: 32 c2 dint
42dc: 03 43 nop
42de: b2 40 00 a5 mov #-23296,&0x012c;#0xa500
42e2: 2c 01
42e4: b2 40 40 a5 mov #-23232,&0x0128;#0xa540
42e8: 28 01
42ea: 0c 43 clr r12
42ec: 0b 4d mov r13, r11
42ee: 0b 5b rla r11
42f0: 0f 5b add r11, r15
42f2: 0e 5b add r11, r14
42f4: 07 3c jmp $+16 ;abs 0x4304
42f6: 3d 53 add #-1, r13;r3 As==11
42f8: 0b 4f mov r15, r11
42fa: 0b 5c add r12, r11
42fc: 0a 4e mov r14, r10
42fe: 0a 5c add r12, r10
4300: ab 4a 00 00 mov @r10, 0(r11);0x0000(r11)
4304: 2c 83 decd r12
4306: 0d 93 tst r13
4308: f6 23 jnz $-18 ;abs 0x42f6
430a: b2 40 00 a5 mov #-23296,&0x0128;#0xa500
430e: 28 01
4310: b2 40 10 a5 mov #-23280,&0x012c;#0xa510
4314: 2c 01
4316: 32 d2 eint
4318: 3a 41 pop r10
431a: 3b 41 pop r11
431c: 30 41 ret
Немного переделал (заинлайнил erase и save внутри вызывающей функции). Чтобы все на виду. Такой вариант тоже не работал.
Код
4330: 32 c2 dint
4332: 03 43 nop
4334: b2 40 02 a5 mov #-23294,&0x0128;#0xa502
4338: 28 01
433a: b2 40 00 a5 mov #-23296,&0x012c;#0xa500
433e: 2c 01
4340: 3f 40 00 10 mov #4096, r15;#0x1000
4344: b2 40 00 a5 mov #-23296,&0x0128;#0xa500
4348: 28 01
434a: b2 40 10 a5 mov #-23280,&0x012c;#0xa510
434e: 2c 01
4350: 32 d2 eint
4352: 32 c2 dint
4354: 03 43 nop
4356: b2 40 00 a5 mov #-23296,&0x012c;#0xa500
435a: 2c 01
435c: b2 40 40 a5 mov #-23232,&0x0128;#0xa540
4360: 28 01
4362: af 4b 00 00 mov @r11, 0(r15);0x0000(r15)
4366: af 4a 02 00 mov @r10, 2(r15);0x0002(r15)
436a: af 4c 04 00 mov @r12, 4(r15);0x0004(r15)
436e: af 4d 06 00 mov @r13, 6(r15);0x0006(r15)
4372: af 4e 08 00 mov @r14, 8(r15);0x0008(r15)
4376: b2 40 00 a5 mov #-23296,&0x0128;#0xa500
437a: 28 01
437c: b2 40 10 a5 mov #-23280,&0x012c;#0xa510
4380: 2c 01
4382: 32 d2 eint
Сразу раскрутился цикл

Лично я никакого криминала не нашел.
Есть ещё последний вариант с тактированием флеш-контроллера.
Код
BCSCTL2 = (DIVS)|(DIVM_0)|(SELM_0)|(SELS); // SMCLK=XT2CLK, DIVS=1, DIVM=1, MCLK=DCOCLC
117c: f2 40 0a 00 mov.b #10, &0x0058;#0x000a
1180: 58 00
FCTL2 = FWKEY | FSSEL_1 | FN3 | FN2 | FN1; // MCLK/14 for Flash Timing Generator
1182: b2 40 4e a5 mov #-23218,&0x012a;#0xa54e
1186: 2a 01
Нет, все совпадает... Чудеса, однако.
Попутно ещё один небольшой глючок:
Цитата
msp430-objdump -dStl .\exe\1002TD_430_01_00.elf > .\exe\1002TD_430_01_00.lst
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
BFD: Dwarf Error: mangled line number section.
...
Отсюда и отсутствие исходного текста в новых листингах