Get Skill
2018-01-16
> 001 防止数组越界的一种方法
1 char array[5]; 2 array[n%5] = value;
> 002 超时机制
在等待某个事件或标志时,设定一定时限,时限到,等待的事件或标志还未发生,则输出一条提示信息
拒绝死等,即永无时限的等待某个事件或标志发生,这样在调试程序很麻烦,不方便定位问题
1 /** 2 * @brief 使用SPI发送一个字节的数据 3 * @param byte:要发送的数据 4 * @retval 返回接收到的数据 5 */ 6 u8 bsp_SpiSendByte(u8 byte) 7 { 8 SPITimeout = SPI_TIMEOUT; 9 10 /* 等待发送缓冲区为空,TXE事件 */ 11 while (SPI_I2S_GetFlagStatus(BSP_SPI, SPI_I2S_FLAG_TXE) == RESET) 12 { 13 if((SPITimeout--) == 0) 14 return SPI_TIMEOUT_UserCallback(0); 15 } 16 17 /* 写入数据寄存器,把要写入的数据写入发送缓冲区 */ 18 SPI_I2S_SendData(BSP_SPI, byte); 19 20 SPITimeout = SPI_TIMEOUT; 21 22 /* 等待接收缓冲区非空,RXNE事件 */ 23 while (SPI_I2S_GetFlagStatus(BSP_SPI, SPI_I2S_FLAG_RXNE) == RESET) 24 { 25 if((SPITimeout--) == 0) 26 return SPI_TIMEOUT_UserCallback(1); 27 } 28 29 /* 读取数据寄存器,获取接收缓冲区数据 */ 30 return SPI_I2S_ReceiveData(BSP_SPI); 31 } 32 33 34 /** 35 * @brief 等待超时回调函数 36 * @param None. 37 * @retval None. 38 */ 39 static uint16_t SPI_TIMEOUT_UserCallback(uint8_t errorCode) 40 { 41 /* 等待超时后的处理,输出错误信息 */ 42 SPI_ERROR("SPI 等待超时!errorCode = %d",errorCode); 43 return 0; 44 }
> 003 spi总线时钟的4种模式