Size: a a a

2017 November 12

MC

Mikhail Cheshkov in embedded.rs
а если реализация методы из трейта сложная
источник

L

LexsZero in embedded.rs
Andrew Strokov
я пытаюсь понять фразу «Must not be tied to a specific asynchronous model. The API should be usable in blocking mode, with the futures model, with an async/await model or with a callback model.»
ну то есть мне надо предусмотреть в типаже и блокирующие и неблокирующие вызовы? Не всегда можно снаружи натянуть оптимальные обертки, чтобы из блока сделать неблок
из неблокирующего блокирующий проще делать, обычно
источник

MC

Mikhail Cheshkov in embedded.rs
в смысле композитная
источник

MC

Mikhail Cheshkov in embedded.rs
типа чтобы прочитать из ацп надо записать - дождаться окончания записи - прочитать
источник

MC

Mikhail Cheshkov in embedded.rs
вот это место "дождаться окончания записи" всё ломает
источник

AS

Andrew Strokov in embedded.rs
LexsZero
из неблокирующего блокирующий проще делать, обычно
да. Но не всегда легко можно сделать отвязанный от шедулинга неблокирующий вызов.

Типа тебе надо пополлить бит в регистре у АЦП (ну то есть вообще никуда от этого не денешься, нету возможности прерывание повешать). У тебя асинхронный вызов. Где ты будешь поллить?
источник

AS

Andrew Strokov in embedded.rs
Mikhail Cheshkov
вот это место "дождаться окончания записи" всё ломает
ну вот, мы об одном и том же говорим
источник

L

LexsZero in embedded.rs
Andrew Strokov
да. Но не всегда легко можно сделать отвязанный от шедулинга неблокирующий вызов.

Типа тебе надо пополлить бит в регистре у АЦП (ну то есть вообще никуда от этого не денешься, нету возможности прерывание повешать). У тебя асинхронный вызов. Где ты будешь поллить?
параметризовать тип интерфейсом для дерганья шедулера, который в случае его отсутствия заменяется затычкой с бизивейтингом?
источник

L

LexsZero in embedded.rs
тьфу, не тип, а конструктор
источник

AS

Andrew Strokov in embedded.rs
ну непонятно. Это ж должна быть какая-нибудь таска, в которой дергается какой-нибудь метод периодически, и изнутри этого метода уже зовется callback
источник

MC

Mikhail Cheshkov in embedded.rs
тогда уж тип как раз, статический диспатчинг
источник

MC

Mikhail Cheshkov in embedded.rs
автор делает странное
    future::loop_fn(timer, |timer| {
       match timer.wait() {
           Ok(())                     => Ok(Loop::Break(timer)),
           Err(nb::Error::WouldBlock) => Ok(Loop::Continue(timer)),
       }
   })


Но в трейте таймера вейт имеет невер в ошибке
pub trait Timer {
   type Time;
   fn get_timeout(&self) -> Self::Time;
   fn pause(&mut self);
   fn restart(&mut self);
   fn resume(&mut self);
   fn set_timeout<T>(&mut self, timeout: T)
   where
       T: Into<Self::Time>;
   fn wait(&self) -> Result<(), !>;
}
источник

MC

Mikhail Cheshkov in embedded.rs
короче автор предлагает использовать фьючуры и обёрнутый ими поллинг
источник

MC

Mikhail Cheshkov in embedded.rs
как отказаться от поллинга в пользу прерываний с ними я пока не понимаю
источник

MC

Mikhail Cheshkov in embedded.rs
короче бизивейт и ебло
источник

NN

Nikita Nazarenko in embedded.rs
Лепить tickless шедулер вестимо
источник

NN

Nikita Nazarenko in embedded.rs
Поверх систика
источник

NN

Nikita Nazarenko in embedded.rs
Ну или передавать таймер на котором лепится
источник

AS

Andrew Strokov in embedded.rs
я не хочу ничего лепить, у менч уже есть  шедулер
источник

AS

Andrew Strokov in embedded.rs
и не  только у меня
источник