打印

求高手帮忙看一下,我的代码为什么会被优化掉

[复制链接]
799|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
图片已经发上来了,涉及到res1=xReadCH376Data();的两段代码都被编译掉了


/**********************代码分界线*************************************************/

unsigned char datatest=0x65;

//unsigned char datarecv;
DatMov g_DatProcess;  //回调函数指针



编译掉了代码.png (17.59 KB )

编译掉了代码.png

相关帖子

沙发
lcr52099|  楼主 | 2016-2-25 11:12 | 只看该作者
咦 代码怎么只有这一点

再来

UINT8        xReadCH376Data( void )  /* 从CH376读数据 */
{

          INT8U ch;
    while(SCI0SR1_RDRF == 0) {           /* Is the transmitter empty? */
    }
   
    ch=SCI0DRL;
    return ch;

}


unsigned char datatest=0x65;

//unsigned char datarecv;
DatMov g_DatProcess;  //回调函数指针

INT8U init_ch376s(DatMov pFunc){

    volatile UINT8 res1=0;
    if(pFunc==NULL){ return;}
   
    g_DatProcess=pFunc;
   
    Init_SCI0(InitBaud);             //376的默认波特率9600
     
     xWriteCH376Cmd( CMD11_CHECK_EXIST );
     xWriteCH376Data(datatest);
     res1=xReadCH376Data();
     LED=0b11111110;
     if (res1 != 0x9A ){return (ERR_USB_UNKNOWN );}
     
      
  /*   xWriteCH376Cmd( CMD21_SET_BAUDRATE );  //设置串口通讯波特率
   
   #if        UART_WORK_BAUDRATE >= 6000000/256
             xWriteCH376Data( 0x03 );
             xWriteCH376Data( 256 - 6000000/UART_WORK_BAUDRATE );
   #else
      xWriteCH376Data( 0x02 );
            xWriteCH376Data( 256 - 750000/UART_WORK_BAUDRATE );
   #endif
     Init_SCI0(WorkBaud);                   //设置单片机工作波特率与CH376s相同
     LED=0b11111100;
     res1 = xReadCH376Data( );
     if( res1  != CMD_RET_SUCCESS )  return( ERR_USB_UNKNOWN ); */ // 设置模式错误
            xWriteCH376Cmd( CMD11_SET_USB_MODE );  //设备USB工作模式
            xWriteCH376Data( 0x06 );
      res1 = xReadCH376Data( );
      LED=0b11111100;
     if ( res1 != CMD_RET_SUCCESS ) {   return 0x02; }        
                                                            
   
     Drv_INT0Interrupt();              //使能IRQ中断
     Sys_SemCreate(&sem_ch376, 0);  //创建信号量 sem_key         
   
     Sys_CreateTask(TASK_ID_CH376, Ch376Task, 0);
     return (USB_INT_SUCCESS);   
  




}

使用特权

评论回复
板凳
lcr52099|  楼主 | 2016-2-25 11:16 | 只看该作者
问题应该不是局部变量连续赋值而被优化掉 因为我把 res1 改成全局变量过后,直接在xReadCH376Data中把DRL寄存器的值赋值给res1 仍然不编译

extern res1;
UINT8        xReadCH376Data( void )  /* 从CH376读数据 */
{

          //INT8U ch;
    while(SCI0SR1_RDRF == 0) {           /* Is the transmitter empty? */
    }
   
    res1=SCI0DRL;
    //return ch;

}


编译2.png (212.09 KB )

编译2.png

使用特权

评论回复
地板
lcr52099|  楼主 | 2016-2-25 11:18 | 只看该作者
LZ用的编译器是CodeWarrior5.1,芯片是freescale的 XS128

使用特权

评论回复
5
dirtwillfly| | 2016-2-25 21:32 | 只看该作者
一般用不到的语句,才会被优化掉。你也可以选择不让开发环境优化

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

26

帖子

0

粉丝