Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Выход по таймаут.
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > ARM, 32bit
Jenya7
Есть такая функция.
Код
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);
}

насколько это криво? или все таки нормальное решение?
Сергей Борщ
Нормальное. Я бы только написал
Код
while (!(SPI_USART->STATUS & USART_STATUS_TXBL))
{
    if(!--timeout)
        break;
}
Jenya7
Цитата(Сергей Борщ @ Oct 13 2015, 11:44) *
Нормальное. Я бы только написал
Код
while (!(SPI_USART->STATUS & USART_STATUS_TXBL))
{
    if(!--timeout)
        break;
}

спасибо.
Kabdim
Имхо если начали появляться таймауты это уже повод потратить время для переписывания на асинхронный лад.
Jenya7
Цитата(Kabdim @ Oct 13 2015, 13:53) *
Имхо если начали появляться таймауты это уже повод потратить время для переписывания на асинхронный лад.

асинхронный это как?
Kabdim
Это: процесс запустил передачу и заснул, а разбудят его либо по окончании операции, либо по истечении таймаута.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.