伟福仿真器keil c编译器,程序某些行不被编译跟执行(急)
伟福仿真器keil c编译器,程序某些行不被编译和执行(急)

uchar CH376SecWrite(uchar *buf,uchar ReqCount) /* 以扇区为单位在当前位置写入数据块,不支持SD卡 */
{
uchar s,cnt;
uchar temp;
unsigned long StaSec;
do
{
xWriteCH376Cmd( CMD1H_SEC_WRITE );
xWriteCH376Data( ReqCount );
s = Wait376Interrupt( );
if (s!=USB_INT_SUCCESS) return s;
xWriteCH376Cmd(CMD01_RD_USB_DATA0);
temp=xReadCH376Data( );
cnt=xReadCH376Data( ); /* 长度 */
temp=xReadCH376Data( );
temp=xReadCH376Data( );
temp=xReadCH376Data( );
StaSec=CH376Read32bitDat( );
if (cnt== 0) break;
s = CH376DiskWriteSec(buf,StaSec,cnt); /* 将缓冲区中的多个扇区的数据块写入U盘 */
if (s!=USB_INT_SUCCESS ) return(s);
buf+=cnt*DEF_SECTOR_SIZE;
ReqCount -= cnt;
}while(ReqCount);
return s;
}
这个函数中xWriteCH376Cmd(CMD01_RD_USB_DATA0)为什么不被编译呢,执行时也不执行这一行。
------解决方案--------------------
你单步跟踪看到的不被执行?我遇到过这样的情况,某些IDE会有类似的问题(比如AVR studio和IAR),实际上语句可能已经执行了,但是执行的光标没有指示到正确的行,而是指到了别的行,所以不要看光标,要看具体的实际变量是不是变了。还有,发生这样的情况,通常是
1、用了中文的字符,比如中文输入法的情况下打了换行或空格这类不易发现的字符。注意要用ascii字符输入。
2、调试时,优化选项不要选优化。否则优化情况下,单步执行的指针你会觉得跳来跳去,根本看不懂。
uchar CH376SecWrite(uchar *buf,uchar ReqCount) /* 以扇区为单位在当前位置写入数据块,不支持SD卡 */
{
uchar s,cnt;
uchar temp;
unsigned long StaSec;
do
{
xWriteCH376Cmd( CMD1H_SEC_WRITE );
xWriteCH376Data( ReqCount );
s = Wait376Interrupt( );
if (s!=USB_INT_SUCCESS) return s;
xWriteCH376Cmd(CMD01_RD_USB_DATA0);
temp=xReadCH376Data( );
cnt=xReadCH376Data( ); /* 长度 */
temp=xReadCH376Data( );
temp=xReadCH376Data( );
temp=xReadCH376Data( );
StaSec=CH376Read32bitDat( );
if (cnt== 0) break;
s = CH376DiskWriteSec(buf,StaSec,cnt); /* 将缓冲区中的多个扇区的数据块写入U盘 */
if (s!=USB_INT_SUCCESS ) return(s);
buf+=cnt*DEF_SECTOR_SIZE;
ReqCount -= cnt;
}while(ReqCount);
return s;
}
这个函数中xWriteCH376Cmd(CMD01_RD_USB_DATA0)为什么不被编译呢,执行时也不执行这一行。
------解决方案--------------------
你单步跟踪看到的不被执行?我遇到过这样的情况,某些IDE会有类似的问题(比如AVR studio和IAR),实际上语句可能已经执行了,但是执行的光标没有指示到正确的行,而是指到了别的行,所以不要看光标,要看具体的实际变量是不是变了。还有,发生这样的情况,通常是
1、用了中文的字符,比如中文输入法的情况下打了换行或空格这类不易发现的字符。注意要用ascii字符输入。
2、调试时,优化选项不要选优化。否则优化情况下,单步执行的指针你会觉得跳来跳去,根本看不懂。