ucos iii 串口发送用什么信号量

2025-04-07 12:22:16
推荐回答(1个)
回答1:

可以参考下面的例子:

//通过信号量的方法发送数据
void usart1SendData(CPU_INT08U ch)
{
    OS_ERR err;
    CPU_INT08U isTheFirstCh;
     
    OSSemPend(&Usart1Sem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待串口发送资源
    OSSemPend(&Usart1TxBufSem, 0, OS_OPT_PEND_BLOCKING, NULL, &err);//阻塞型等待发送
    isTheFirstCh = 0;
    if(pTxBufRead == pTxBufWrite){  //若读指针等于写指针,表明要写入缓冲区的为当前第一个数据
        isTheFirstCh = 1; //置位第一个数据标志
    }
    *pTxBufWrite = ch;//向当前写指针对应的地址写入数据
    if((pTxBufWrite++) == &Usart1TxBuf[USART1_TX_BUFFER_LEN - 1]){ //若当前写指针写到缓冲区最后一个地址,否则地址自增1
        pTxBufWrite = Usart1TxBuf; //写指针更新为缓冲区第一个地址,环形队列
    }
    if(isTheFirstCh){ //写入的是第一个数据
        USART_ITConfig(USART1, USART_IT_TXE, ENABLE);//开启缓冲区发送空中断,下一步将会进入中断处理数据
    }
    OSSemPost(&Usart1Sem, OS_OPT_POST_1, &err);
}