您好,我用的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么?还是我程序写的不对呢?求大神解答……
mangui zhang:
已回复 请查看
肯定不是编译器的bug
您好,我用的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么?还是我程序写的不对呢?求大神解答……
Seven Han:
同贴:http://www.deyisupport.com/question_answer/microcontrollers/c2000/f/56/t/139811.aspx
您好,我用的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么?还是我程序写的不对呢?求大神解答……
BIN YAO1:
IO口控制不建议使用GPADAT寄存器,拉高使用GPASET,拉低使用GPACLEAR试试,GPADAT用作读取管脚状态更适合