Takže pátrám dále po chybě.
Pokud "debuguji" po LAN, což je docela fajn, tak jsem dospěl sem.
Pokud odpojím GYRO, tak se nastaví proměnná timeGyro na hodnotu 32 a dále se s ní nic neděje. Úplně stejně je tomu tak i u proměnné timeABS.
Ale pokud odpojím jedno zařízení, vše je OK, viz výše. Ale přidám-li k tomu druhé zařízení, tak se program zastaví. A výpis po LAN taktéž. Takže ještě si asi přidám i nějaké blikání LED a budu muset najít kde se mi program kousne a proč.
Ale aspoň vím, že řešení kontroly zařízení na CANu funguje. Ještě odstranit ten průser, když tam není žádné zařízení.
-- Spojený príspevok 03 Jan 2017, 07:56 --
Klucííííí, já jsem asi trouba.
Pokud odesílám data po frontě, tak tyto data musím odesílat až za všema těma kontrolama.
A ne, že data budu odesílat pouze, pokud přijmu data po CANu.
Protože, když odpojím všechny zařízení z CANu, tak je jasné, že už taky nic neodešlu.
Nebo-li.
Původní kód.
Kód: Vybrať všetko
if (!g_ul_recv_status) {
/* nic jsem neprijal :) */
}
else
{
if ((rx_mailbox.ul_id >> 18) == FIRST_GYRO_ID)
{
GyroX = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
GyroY = (int16_t)((rx_mailbox.ul_datal >> 16) & 0x0000ffff);
timeGyro = 0;
prepni = 0;
}
if ((rx_mailbox.ul_id >> 18) == ID_ABS_SNIMAC_READ)
{
uhel = (int16_t)(rx_mailbox.ul_datal & 0x0000ffff);
timeABS = 0;
prepni = 1;
}
xQueueSend(vypis_data_ethernet, (void *)&data, 1);
g_ul_recv_status = 0; //clear flag of receive message
}
Takže jediné, co je potřeba, tak vzít tento řádek:
Kód: Vybrať všetko
xQueueSend(vypis_data_ethernet, (void *)&data, 1);
A vložit jej až za tu poslední závorku.
No nic, vlastní nepozornost..............
Tak snad mě nebudete proklínat.
Důležité ale je, že chyba byla nalezená.