ВходНаше всё Теги codebook 无线电组件 Поиск Опросы Закон Суббота
23 ноября
1168183 Топик полностью
SciFi (26.01.2022 10:25, просмотров: 337) ответил Argon на Мысль вслух про protothreads: а ведь можно накидать отдельный протопоток для 1wire, крутящийся в прерывании. Т.о. получится алгоритм с четкими неблокирующими таймингами!
Я так и делал. Не 1-wire, а I2C, но суть-то похожая. 
PT_THREAD(i2c_thread(void))
{
    PT_BEGIN(&i2c_pt);
    I2C1->CR1 |= I2C_CR1_START;
    PT_YIELD(&i2c_pt);
    (void)I2C1->SR1;
    I2C1->DR = ADDRESS;
    PT_YIELD(&i2c_pt);
    (void)I2C1->SR1;
    (void)I2C1->SR2;
    ...
    PT_END(&i2c_pt);
}

void
i2c1_handler(void)
{
    PT_SCHEDULE(i2c_thread());
}
ส็็็็็็็็็็็็็็็็็็็็็็็็็༼ ຈل͜ຈ༽ส้้้้้้้้้้้้้้้้้้้้้้้