| Микроконтролери и електроника http://mcu-bg.com/mcu_site/ |
|
| търся помощ за CAN, J1939, bitfield codec http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=16375 |
Страница 1 от 1 |
| Автор: | NikB [ Вто Фев 26, 2019 6:22 pm ] | |||||||||||
| Заглавие: | търся помощ за CAN, J1939, bitfield codec | |||||||||||
Опитвам се да проумея endian разбирането в една библиотека за bitfield codec в GitHub. (Някъде бях мярнал, че тази библиотека се ползва във Форд, за codec за битови полета за CAN, J1939 протокола) В цитираната библиотека, във файла 8byte.c, във функцията uint64_t eightbyte_get_bitfield() и подобните, разликата между Litle и Big endian е единствено едно преподреждане на целия пакет:
Обаче, това не ми изглежда вярно - така се сменя и началото на битовото поле. В приложение съм постнал тълкуването на Brusa за подредбата на битови полета ПИТАНЕТО: Има ли общоприето тълкуване на Big/Litle endian за подреждането на битови поледа с различна дължина в байтовете на пакета? ПП Ако имате логове, тестове, картинки или документация от различни фирми по темата - ще ми бъде много полезно
|
||||||||||||
| Автор: | Zdrav [ Вто Фев 26, 2019 8:58 pm ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
Това е най-идиотското нещо от CAN. Не е само за J1939. И много подвеждащо е че на много места го водят като Little/Big Endian. Щото в случая става дума за преподреждане на битовете. Не съм поглеждал кода от линка в GitHub, Но диаграмите са верни. Като в моята скромна практика съм срещал само втория вариант. Имай предвид че изпращането започва от бита най-горе в ляво, после ги кара по хоризонталния ред до края на реда. След което минава на най-левия бит от следващия ред и т.н. |
|
| Автор: | NikB [ Сря Фев 27, 2019 10:36 am ] | |||||||||
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec | |||||||||
Благодаря |
||||||||||
| Автор: | ¶ [ Сря Фев 27, 2019 3:25 pm ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
В J1939 стандартно данните са само Little Endian, т.е. втората диаграма. Номерацията на битовете в един байт започва от единица, отдясно е младши, отляво е старши битът (SAE J1939-71). Не съм сигурен дали J1939 стандарта позволява в Proprietary Messages данните да са в Big Endian, трябва да проверя, но съм почти на 99% сигурен, че не го позволява Функцията __builtin_bswap64() е предназначена за конвертиране на 64-битови числа от/към Big/Little Endian, с bit order вътре в байта отляво старши, отдясно младши. При друг bit order само с прост swap на байтове няма да стане. |
|
| Автор: | Zdrav [ Чет Фев 28, 2019 12:51 am ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
логове нямам. за "странните" ID- та изглежда че са 11 битови. по принцип е позволено в една мрежа да имаш съобщения и с 11 и с 29 битови ID-та. имал съм такава ситуация, макар че беше временно, докато трае развоя, имахме ECU -та които пращаха съобщения с 11 битови ID- та. накрая всички съобщения бяха с extended 29 bit ID-та. |
|
| Автор: | NikB [ Пет Мар 01, 2019 3:19 am ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
Това, че са 11 и 29 бита е маловажно (Пишеш, че в една мрежа сте ги имали - по-горе е описание на един девайс, който има и двата вида Id) - за нашите драйвери при приемане няма значение какво е Id, а при предаване се указва и всичко е ок. Проблемът е че нямам достатъчно информация за bitfield подредбите, за да си направя тестовете. |
|
| Автор: | Zdrav [ Пет Мар 01, 2019 8:50 am ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
предполагам не търсиш информация за точно тези "измислени" съобщения, които се виждат на твоите картинки. Щото няма как да ги видиш в "мои" логове. Съжалявам, но не пазя никакви логове или .dbc файлове и явно не мога да ти бъда полезен за да си направиш тестовете. |
|
| Автор: | NikB [ Пет Мар 01, 2019 9:24 am ] |
| Заглавие: | Re: търся помощ за CAN, J1939, bitfield codec |
| Страница 1 от 1 | Часовете са според зоната UTC + 2 часа [ DST ] |
| Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |
|