TI中文支持网
TI专业的中文技术问题搜集分享网站

F5438 指令BUG

各位好:

    我在使用F5438的时候,想把RAM写一遍0XAA,但是for循环执行第二次的时候,指针运行不对,查看反汇编,原来第二次执行*ram_start++ = 0xAA;这句话PC跳转的字节由6字节变为8字节,本来*ram_start++ = 0xAA;对应的汇编指令应该是6个字节,而PC却跳转了8个字节,到底是编译器问题,还是芯片问题?

#include <msp430f5438.h>

__no_init unsigned char *ram_start@0x1c00;__no_init unsigned int i@0x1c04;//unsigned int num;
int main(void)
{
WDTCTL =WDTPW+WDTHOLD;
//num = sizeof(unsigned char *);
//num = sizeof(i);

ram_start = (unsigned char *)0x1C06; // 把ram的首地址给 ram_start

 asm("incx.a &ram_start");    //这句话PC跳转了八个字节,

 asm("NOP");//由于上一句指令多跳转了两个字节,所以此句话执行不到

 asm("NOP");

for(i =0;i < 16378;i ++) // 0x5cff-0x1c04=3ffb=16379
{ *ram_start++ = 0xAA;
} while(1);

}

Evan Lee:

这个问题看起来像是编译器的问题,能够告知你使用的IDE是什么?建议可以使用CCS5.x尝试编译一下,看看反汇编是否还有同样的问题出现?

或者修改一下程序的写法,看看有何影响?

for(i =0;i < 16378;i ++) // 0x5cff-0x1c04=3ffb=16379{     *ram_start = 0xAA;

     ram_start++;}

hongzhen zhang:

回复 Evan Lee:

您建议的

for(i =0;i < 16378;i ++) // 0x5cff-0x1c04=3ffb=16379{     *ram_start = 0xAA;

     ram_start++;}

我试了,不可以,但是把  ram_start++;  改成 _NOP(); 可以了,可能是_NOP(); 指令2个字节,刚好跳过去他不执行把。

我用的开发环境是IAR 5.4

赞(0)
未经允许不得转载:TI中文支持网 » F5438 指令BUG
分享到: 更多 (0)