优化这段代码 uint8_t my_i2c_write(uint8_t reg_addr, uint8_t *txbuff, uint8_t len){ uint8_t buff1[len+1]; status_t status; buff1[0] = reg_addr; for(uint8_t i=1; i<len+1; i++){ buff1[i] = txbuff[i-1]; } FLEXIO_I2C_DRV_MasterInit(INST_FLEXIO_I2C, &flexio_i2c_MasterConfig0, &i2cMasterState); status = FLEXIO_I2C_DRV_MasterSendDataBlocking(&i2cMasterState, buff1, sizeof(buff1), true, 20UL); //打印写寄存器错误时的错误信息 //return_status(status); if(status == STATUS_SUCCESS){ return 0; }else{ return -1; } } uint8_t my_i2c_read(uint8_t reg_addr, uint8_t *rxbuff, uint8_t len){ uint8_t reg[1]; status_t status1; status_t status2; reg[0] = reg_addr; FLEXIO_I2C_DRV_MasterInit(INST_FLEXIO_I2C, &flexio_i2c_MasterConfig0, &i2cMasterState); status1 = FLEXIO_I2C_DRV_MasterSendDataBlocking(&i2cMasterState, reg, 1, false, 10U); //return_status(status1); status2 = FLEXIO_I2C_DRV_MasterReceiveDataBlocking(&i2cMasterState, rxbuff, len, true, 20U); //return_status(status2); /* if(reg_addr == 0x20){ return_status(status1); return_status(status2); printf2("status1=%x\rstatus2=%x\r\n",status1,status2); } */ if((status1 == STATUS_SUCCESS) && (status2 == STATUS_SUCCESS)){ return 0; }else{ return -1; } }
时间: 2024-04-26 16:24:42 浏览: 119
code uint8-t *p-flash 与uint8-t code *p-flash的区别
这段代码可以进行以下优化:
1. 在函数内部初始化 I2C 主机的代码可以移到主函数中,避免每次读写寄存器时都要初始化一次,提高效率。
2. 在 my_i2c_write 函数中,可以使用 memcpy 函数将 txbuff 中的数据拷贝到 buff1 中,避免使用 for 循环一个一个赋值的操作。
3. 在 my_i2c_read 函数中,可以将 status1 和 status2 的判断条件合并为一个条件语句,避免使用两个 if 语句判断。
阅读全文