本帖最后由 donkey89 于 2011-6-30 10:15 编辑
下面这段代码是用iar编译的,左移4次以后就不会修改了,所以应该不会出现比0x0F大的情况,实际却是一定大于0x0f,本来应该是0x03的,一定会变成0x30,本来应该是0x0a的,一定会变成0xa0,百思不得其解.
更为神奇的是,这段代码不可跟踪,调试到这里iar自动退出.没有二话.即使在函数里面设断点,也一定是停在别的函数里面.
另外,怎么查看对应的汇编?找不到lst文件- uint8_t i2c_read(void)
- {
- uint8_t rd =0;
- uint8_t i;
- GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_IN_FL_NO_IT);//设置端口为输入
- //SDIO_HIGH;//外部上拉,所以要先设置成高,才可以读端口
- i2c_delay(50);
- for ( i=0;i<8 ;i++ )
- {
- SCLK_LOW;
- i2c_delay(50);
- if(i<4)//只移动4次
- rd<<=1;
- SCLK_HIGH;
- nop();
- nop();
- if(i<4)//只会被修改4次
- rd|=GPIO_ReadInputPin(SDIO_PORT,SDIO_PIN);
- }
- GPIO_Init(SDIO_PORT,SDIO_PIN,GPIO_MODE_OUT_OD_HIZ_SLOW);//恢复端口为输出
- return rd;
|