Показано с 1 по 10 из 20

Тема: Контрольная сумма ТРМ201

Комбинированный просмотр

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #1

    По умолчанию

    ваши умозаключения неуместны - вот это факт,

    я читать умею, и как уже сказал, делал как раз по написанному, а
    если вы такой хорошоший специалист, давайте прямо здесь посчитаем пакет по пункту 3.3:

    адрес будет 513
    запрос будет стандартный - dev:

    1. делим адрес на 8 старших и 3 младших бита: 01000000 001b => 0x40 0x01
    2. извлекаем старшую часть адреса: 0x40
    3. извлекаем младшую часть адреса: 0x01
    4. ставим во второй байт бит запроса: 0x09
    5. ставим во второй байт размер 0: 0x09
    6. ставим хеш имени команды: 0xd681
    7. данных нет, контрольную сумму пока пропускаем
    8. формируем пакет: 40 09 d6 81

    а теперь покажите мне безграмотному, как из этого получить #GHLGTMOHTISS\r, т.е. 01 50 d6 81, грамотный вы наш,
    я вам даже предлагаю покрутить этот кубик рубик (попереварачивать байты местами)
    почему не получится, да потому что очевидно

    во первых берется 8 младших битов,

    во вторых - последовательность формирования кадра в описании нарушена, но это еще не все

    битовая схема да - иногда она рисуется октетами, тогда порядок бит будет обратный в каждом байте,
    только ведь это обязательно надо отмечать либо в тексте, либо направлением либо MSB-LSB прямо в схеме, загляните в любой rfc и посмотрите как там описаны протоколы,

    а раз вы не знаете слова "стандарт", то я уже показал вид заголовка на овеновские устройства на си,
    причем сделал это не для вас, а для тех, кому непосчасливится вновь читать этот документ

  2. #2

    По умолчанию

    > а теперь покажите мне безграмотному, как из этого получить #GHLGTMOHTISS\r, т.е. 01 50 d6 81, грамотный вы наш,

    короткий ответ: никак.

    во-первых, заголовок пакета должен выглядеть так:

    Код:
    typedef union tagOwenHeader
    {
    	struct
    	{
    		int	High : 8;
    		int	Size : 4;
    		int	Query : 1;
    		int	Low : 3;
    	};
    
    	unsigned char Bytes[2];
    }OWEN_HEADER, *POWEN_HEADER;
    во-вторых, так как адрес у вас 11-битный, засовывать его в заголовок надо так:

    Код:
    hdr.High = addr >> 3;
    hdr.Low = addr & 0x07;
    и в результате вы получите то, что и должны:

    40 30 D6 81 11 6D и #KGJKTMOHHHMT\В

    ну и для всех остальных.

    порядок и размер членов битового поля стандартом C не определяется. на другой платформе или компиляторе вы можете получить другие результаты. использование union -- плохая практика, особенно когда записывается один элемент, а читается другой.

    и вообще, все это стрельба из пушки по воробьям, потому что проще и понятней писать сразу в буфер (Command в нашем случае).

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •