最近在使用28035做一个项目,在CCS5.2的编译环境下,但是出现了一些问题,比如说是GpioDataRegs.GPADAT.bit.GPIO24 =1;
GpioDataRegs.GPADAT.bit.GPIO21 =1;
GpioDataRegs.GPADAT.bit.GPIO8=0;
这样的几条语句时,当我在设置断点调试的时候是完全正常的,当时当我取消断点是全速运行程序,就发现GpioDataRegs.GPADAT.bit.GPIO24 =1;和GpioDataRegs.GPADAT.bit.GPIO21 =1;就没有被执行,感觉好像是被编译器优化了,后来我在几句程序中间加入了asm(" nop");语句,变成如下的形式:
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO24 =PFC_ON; //PFC on
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO21 =ZVS_ON; //ZVS on
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO8=0;
这样以后在开启全速运行,程序是一切正常了,我想问一下,这中情况下是不是程序被优化了呢,为什么会出现这样的问题呢?
Joey Mao:
关于IO口的置1和清零,建议您使用SET和CLEAR,例如
GpioDataRegs.GPASET.bit.GPIO24 = 1; // GPIO24置1
GpioDataRegs.GPACLEAR.bit.GPIO24 = 1; // GPIO24清零
最近在使用28035做一个项目,在CCS5.2的编译环境下,但是出现了一些问题,比如说是GpioDataRegs.GPADAT.bit.GPIO24 =1;
GpioDataRegs.GPADAT.bit.GPIO21 =1;
GpioDataRegs.GPADAT.bit.GPIO8=0;
这样的几条语句时,当我在设置断点调试的时候是完全正常的,当时当我取消断点是全速运行程序,就发现GpioDataRegs.GPADAT.bit.GPIO24 =1;和GpioDataRegs.GPADAT.bit.GPIO21 =1;就没有被执行,感觉好像是被编译器优化了,后来我在几句程序中间加入了asm(" nop");语句,变成如下的形式:
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO24 =PFC_ON; //PFC on
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO21 =ZVS_ON; //ZVS on
asm(" nop");
asm(" nop");
asm(" nop");
GpioDataRegs.GPADAT.bit.GPIO8=0;
这样以后在开启全速运行,程序是一切正常了,我想问一下,这中情况下是不是程序被优化了呢,为什么会出现这样的问题呢?
jiyang chen:
回复 Joey Mao:
我只是这样说的一个例子而已,实际上使用中是将i/o设置成为的是输入读取状态,我的意思是说CCS5.2有这样的一种现象,想知道为什么会出现这样的原因