реклама на сайте
подробности

 
 
> Выход по таймаут.
Jenya7
сообщение Oct 13 2015, 06:32
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 778
Регистрация: 29-03-12
Пользователь №: 71 075



Есть такая функция.
Код
uint32_t SPI_TransferByte(uint32_t sendbyte)
{
    /* Check that transmit buffer is empty */
    while (!(SPI_USART->STATUS & USART_STATUS_TXBL));
    SPI_USART->TXDATA = (uint32_t)sendbyte;
     /* Wait for transmitting to finished */
        while (!(SPI_USART->STATUS & USART_STATUS_TXC));
       //return data;
    return majority32const(&SPI_USART->RXDATA);
}

Есть большая вероятность что она заткнется в while(...)
Watchdog не хочу запускать. это не причина ресетовать всю систему.
решил сделать так.
Код
uint32_t SPI_TransferByte(uint32_t sendbyte)
{
    uint32_t timeout = 10000;
    /* Check that transmit buffer is empty */
    while (!(SPI_USART->STATUS & USART_STATUS_TXBL) && timeout)
    {
        timeout--;
    }
    SPI_USART->TXDATA = (uint32_t)sendbyte;
    timeout = 10000;
    /* Wait for transmitting to finished */
    while (!(SPI_USART->STATUS & USART_STATUS_TXC) && timeout)
    {
        timeout--;
    }
    //return data;
    return majority32const(&SPI_USART->RXDATA);
}

насколько это криво? или все таки нормальное решение?

Сообщение отредактировал Jenya7 - Oct 13 2015, 06:34
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th July 2025 - 02:55
Рейтинг@Mail.ru


Страница сгенерированна за 0.01357 секунд с 7
ELECTRONIX ©2004-2016