В нюансах scmRTOS кто-нибудь шарит? Не удается въехать, почему не
передается тело OS::message между процессами. Т.е. событие send
передается, но на приемной строне в "теле" сообщения - мусор. Сейчас для отладки просто пытаюсь тупо передать раз в 500мс без всякой лишней логики.
struct UiMsg
{ UiEvent event;
int16_t value; // для энкодера — количество шагов, для кнопки — код};
Собственно сообщение:
OS::message<UiMsg> ui_msg;
Отправка из процесса 1 раз в 500мс:
for (;;)
{
// process_encoders();
// process_encoder_buttons();
// scan_matrix();
// Период опроса 5–10 мс
// OS::sleep(5); // или sleep_ms(5) в зависимости от вашей версии scmRTOS
OS::sleep(500);
send_event(UiEvent::Enc1BtnDown, 0);
}
static void send_event(UiEvent ev, int16_t val = 0)
{
UiMsg m{ev, val};
ui_msg = m;
ui_msg.send();
}
Прием в процессе 2:
for (;;)
{
if (ui_msg.wait())
{
UiMsg m; //Вот здесь структура данных ui_msg уже содержит мусор
ui_msg.out(m);
switch (m.event)
{
}
}
По отладчику вижу, что данные в ui_msg в порядке до самого конца, то бишь окончания ожидания события ui_msg.wait(), которое наступает регулярно и своевременно. Как только случилось - мусор!
ИЧСХ, дебаг даже по недрам scmRTOS пока не выявил ничего подозрительного.
Боюсь, что внезапно заработает, а я не пойму причину.
p.s. размер стеков обоих процессов 1000 байт, по-моему, с запасом.