while(1) { /* Toggle on user LED, indicating a SPI transfer is in progress */ //GPIO_toggle(CONFIG_GPIO_LED_1); memset(slaveRxBuffer, 0, sizeof(slaveRxBuffer)); transferOK = SPI_transfer(slaveSpi, &transaction); UART_PRINT("transferOK = %d \n\r", (int)transferOK); if (transferOK) { Semaphore_pend(semSPIHandle, BIOS_WAIT_FOREVER); UART_PRINT("SPI Continuing \n\r"); GPIO_write(CONFIG_SPI_SLAVE_READY, 0); /* Wait until transfer has completed */ sem_wait(&slaveSem); UART_PRINT("SPI tx wait done\r\n"); GPIO_write(CONFIG_SPI_SLAVE_READY, 1); } else { } delay_1ms(1); }
上面这段代码,在SPI通讯成功若干次之后,会发生transferOK返回true,但是SPI回调函数(里面有一句sem_post(slaveSem))没有调用,从而导致程序卡在了sem_wait(&slaveSem)这里,请问这是为什么?
证实是这个问题,因为串口中SPI continuing的log打印了,但是没有打印spi tx wait done的log