您好,我用的F28035,编译器是CCS5.4.0,有这样一段程序:
if(q.out >= 0.15 )
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0;
GpioDataRegs.GPADAT.bit.GPIO5 = 1;//方向控制
}
else if(q.out > -0.15)
{
GpioDataRegs.GPADAT.bit.GPIO4 = 1;//失能
ipout = 0;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0; //使能
GpioDataRegs.GPADAT.bit.GPIO5 = 0;//方向控制
}
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0;
GpioDataRegs.GPADAT.bit.GPIO5 = 1;//方向控制
}
else if(q.out > -0.15)
{
GpioDataRegs.GPADAT.bit.GPIO4 = 1;//失能
ipout = 0;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0; //使能
GpioDataRegs.GPADAT.bit.GPIO5 = 0;//方向控制
}
这段程序是写在时钟中断里的,现象是GPIO4变为1之后,以后无论判断条件如何都不会再变为0;只有在上述程序第一行设置断点,进行单步在线调试,GPIO4=0才会被执行。
这是怎么回事呢?是编译器有bug么?还是我程序写的不对呢?求大神解答……
关于时钟中断,如果中断程序的执行时间大于中断时间,是会继续执行中断程序对么?还有在执行时钟中断的时候PWM输出、编码器eQEP采集模块会停止运行么?
Seven Han:
你好,先测试IO口输出正确,将level条件使用enum定义,然后尝试下:
您好,我用的F28035,编译器是CCS5.4.0,有这样一段程序:
if(q.out >= 0.15 )
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0;
GpioDataRegs.GPADAT.bit.GPIO5 = 1;//方向控制
}
else if(q.out > -0.15)
{
GpioDataRegs.GPADAT.bit.GPIO4 = 1;//失能
ipout = 0;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0; //使能
GpioDataRegs.GPADAT.bit.GPIO5 = 0;//方向控制
}
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0;
GpioDataRegs.GPADAT.bit.GPIO5 = 1;//方向控制
}
else if(q.out > -0.15)
{
GpioDataRegs.GPADAT.bit.GPIO4 = 1;//失能
ipout = 0;
}
else
{
GpioDataRegs.GPADAT.bit.GPIO4 = 0; //使能
GpioDataRegs.GPADAT.bit.GPIO5 = 0;//方向控制
}
这段程序是写在时钟中断里的,现象是GPIO4变为1之后,以后无论判断条件如何都不会再变为0;只有在上述程序第一行设置断点,进行单步在线调试,GPIO4=0才会被执行。
这是怎么回事呢?是编译器有bug么?还是我程序写的不对呢?求大神解答……
关于时钟中断,如果中断程序的执行时间大于中断时间,是会继续执行中断程序对么?还有在执行时钟中断的时候PWM输出、编码器eQEP采集模块会停止运行么?
BIN YAO1:
回复 Jim1:
TO Jim1,
判断2加了else了,肯定是小于0.15的