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

[复制链接]
1082|4
 楼主| lcr52099 发表于 2016-2-25 11:11 | 显示全部楼层 |阅读模式
图片已经发上来了,涉及到res1=xReadCH376Data();的两段代码都被编译掉了


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

  1. unsigned char datatest=0x65;

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



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lcr52099 发表于 2016-2-25 11:12 | 显示全部楼层
咦 代码怎么只有这一点

再来

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

  3.           INT8U ch;
  4.     while(SCI0SR1_RDRF == 0) {           /* Is the transmitter empty? */
  5.     }
  6.    
  7.     ch=SCI0DRL;
  8.     return ch;

  9. }


  10. unsigned char datatest=0x65;

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

  13. INT8U init_ch376s(DatMov pFunc){

  14.     volatile UINT8 res1=0;
  15.     if(pFunc==NULL){ return;}
  16.    
  17.     g_DatProcess=pFunc;
  18.    
  19.     Init_SCI0(InitBaud);             //376的默认波特率9600
  20.      
  21.      xWriteCH376Cmd( CMD11_CHECK_EXIST );
  22.      xWriteCH376Data(datatest);
  23.      res1=xReadCH376Data();
  24.      LED=0b11111110;
  25.      if (res1 != 0x9A ){return (ERR_USB_UNKNOWN );}
  26.      
  27.       
  28.   /*   xWriteCH376Cmd( CMD21_SET_BAUDRATE );  //设置串口通讯波特率
  29.    
  30.    #if        UART_WORK_BAUDRATE >= 6000000/256
  31.              xWriteCH376Data( 0x03 );
  32.              xWriteCH376Data( 256 - 6000000/UART_WORK_BAUDRATE );
  33.    #else
  34.       xWriteCH376Data( 0x02 );
  35.             xWriteCH376Data( 256 - 750000/UART_WORK_BAUDRATE );
  36.    #endif
  37.      Init_SCI0(WorkBaud);                   //设置单片机工作波特率与CH376s相同
  38.      LED=0b11111100;
  39.      res1 = xReadCH376Data( );
  40.      if( res1  != CMD_RET_SUCCESS )  return( ERR_USB_UNKNOWN ); */ // 设置模式错误
  41.             xWriteCH376Cmd( CMD11_SET_USB_MODE );  //设备USB工作模式
  42.             xWriteCH376Data( 0x06 );
  43.       res1 = xReadCH376Data( );
  44.       LED=0b11111100;
  45.      if ( res1 != CMD_RET_SUCCESS ) {   return 0x02; }        
  46.                                                             
  47.    
  48.      Drv_INT0Interrupt();              //使能IRQ中断
  49.      Sys_SemCreate(&sem_ch376, 0);  //创建信号量 sem_key         
  50.    
  51.      Sys_CreateTask(TASK_ID_CH376, Ch376Task, 0);
  52.      return (USB_INT_SUCCESS);   
  53.   




  54. }

 楼主| lcr52099 发表于 2016-2-25 11:16 | 显示全部楼层
问题应该不是局部变量连续赋值而被优化掉 因为我把 res1 改成全局变量过后,直接在xReadCH376Data中把DRL寄存器的值赋值给res1 仍然不编译

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

  4.           //INT8U ch;
  5.     while(SCI0SR1_RDRF == 0) {           /* Is the transmitter empty? */
  6.     }
  7.    
  8.     res1=SCI0DRL;
  9.     //return ch;

  10. }


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
 楼主| lcr52099 发表于 2016-2-25 11:18 | 显示全部楼层
LZ用的编译器是CodeWarrior5.1,芯片是freescale的 XS128
dirtwillfly 发表于 2016-2-25 21:32 | 显示全部楼层
一般用不到的语句,才会被优化掉。你也可以选择不让开发环境优化
您需要登录后才可以回帖 登录 | 注册

本版积分规则

10

主题

26

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部