Jump to content

    

Oleg_IT

Свой
  • Content Count

    936
  • Joined

  • Last visited

Everything posted by Oleg_IT


  1. Посмотрел, но ни чего "криминального" не увидел. Вся логика скрыта в библиотеке, в открытом коде только обработка статусов закрыт, свободен и канал открыт. Таймаут стоит 4 секунды, но команда FIN выдается сразу. Вообще после некоторых попыток открыть канал статус сокета становится ..._SYN_SENT и больше не меняется.
  2. Собственно сеанс связи так и не начинается. На ARM работает немного усечённый пример из пакета Keil LEDClient, на PC пробовал две программы, первая простейший эхо сервер на Qt, вторая тестовая программа servcons. Открытие канала проходит нормально, но потом программа на ARM (библиотека TCP_ARM_L) выдаёт команду FIN, канал закрывается и всё повторяется снова. Сканы со снифира в приложении. Почему разрывается соединение? Как исправить?
  3. Так и прочитал наконец то:)
  4. Решил проблему. Нужно было Thumb Mode во вкладке ASM поставить и MicroLIB во вкладке Target. Только как об этом с самого начало догадаться.
  5. Вижу где происходит падение программы, но как исправить не знаю. Рисунок rt_lib.PNG, программа переходит по адресу 0x0004b1, т.е. в никуда, рисунок rt_lib_1.PNG это следующая команда после перехода, больше ни куда программа не идёт. Функций MemManage_Handler BusFault_Handler UsageFault_Handler HardFault_Handler не вижу. И ещё, скажите правильно я меня переменная Size инициализирована, рисунок Mem.PNG?
  6. Мк LPC2478 с 256Мб внешней памяти, среда разработки Keil. После того как в программу добавил библиотеку она перестала доходить до main-а. Предполагаю, что ей не хватает памяти стека. Как ни пытался в конфигураторе LPC2400.s увеличивать значения ни чего не помогает. Может я не правильно ошибку понимаю? Как запустить программу?
  7. С этим спорить не буду, там более, что заголовки так и задумывались как 32 битные. Думаю, что к заголовкам вообще ни какие свапы применять нельзя, они, заголовки, должны изначально строится под конкретную архитектуру, пусть с дефайнами. А htonl/ntohl и пр... применимы только к данным. По поводу данных. Кто мне помешает ради экономии памяти сделать поля 13 и 3 бита а 16 битном слове. Как в этом случае быть с htonl/ntohl?
  8. Не правда Ваша, по ссылке пункт 3.1 "Fragment Offset"
  9. Кажется начинаю понимать обстановку. Без дефайнов не обойтись. Но всё равно не понятности остались, например в протоколе есть поле размером 13 бит, это байт и ещё немножко. Как в этом случае работает htnl/nthl?
  10. По факту получается не так, и порядок байт и порядок бит разный. А ставить эти биты так или иначе не имеет значения ини будут на одном и том же места и это правильно и понятно. Скорей всего мы друг друга недопонимаем:)
  11. Так ни битовые поля, ни работа с флагами задачу не решают. Функции по ссылке http://www.opennet.ru/man.shtml?topic=hton...3&russian=0 только помогут, они специально для этого сделаны.
  12. Раньше у них так и было, на каждый модуль свой документ. Сейчас, получается, всё объединили в один.
  13. Ошибся, битовое поле. Если я битовом поле union { struct { uint16_t FIN : 1; // No more data from sender uint16_t SYN : 1; // Synchronize sequence numbers uint16_t RST : 1; // Reset the connection uint16_t PSH : 1; // Push Function uint16_t ACK : 1; // Acknowledgment field significant uint16_t URG : 1; // Urgent Pointer field significant uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t DOff : 4; // Data Offset - 5 }; uint16_t L1; }; бит SYN, первый бит, ставлю в 1, то это будет тоже сомое, что L1 |= (1 << 1) Проверено.
  14. Понятно. Спасибо. А со странички процессора ссылка на этот документ есть?
  15. Интересно. Спасибо за ссылочки.
  16. Нет это не то. У них каждый модуль, может я не так их называю, LCD, UART, USB,... имеет свой отдельный документ. В старой версии всё было видно на страничке процессора, а сейчас я их потерял.
  17. Поторопился я радоватся, что битовый массив, что #define FLAG_1 1 ........................ Flags |= (1 << FLAG_1); одно и тоже.
  18. Самому определять это понятно, а в компиляторе такой информации нет?
  19. Я вас сходу по флажкам не понял. Переделал, работает. Но вопрос нужен swap или нет остался. Может я опять простого решения не вижу:)
  20. Обновили техасовци странички описания ARM-ов, OMAP-ов. Не могу найти документацию по модулям, например здесь.
  21. Так порядок бит, задаваемый этими дефайнами всё равно как-то учитывать нужно.
  22. Догадываюсь, потому и хочу разграничить версии соответствующими дефайнами. Так это же юнион, struct и L1 это два инени оного и того же куска пямяти размером два байта. А про выравнивание я не сказал, пользуюсь #pragma push #pragma pack(1) …………………… #pragma pop
  23. По количеству бит там всё правильно 4 длина+6 пусто+6*1 флаги, итого 16. А вот по порядку, правильно, по стандарту, закомментированный union ниже, а не правильный порядок оказывается правильным по факту. Я такие чудеса не понимаю, но в WireShark всё правильно отображается. Если swap на правильный по стандарту union сделать WireShark выдаёт ошибку.
  24. Я теже озадачен, но по факту так typedef struct TCP_Head_tag { uint16_t SRC_Port; // Порт отправителя uint16_t DST_Port; // Порт получателя uint32_t SeqNum; // Sequence Number uint32_t AckNum; // Acknowledgment Number union { struct { uint16_t FIN : 1; // No more data from sender uint16_t SYN : 1; // Synchronize sequence numbers uint16_t RST : 1; // Reset the connection uint16_t PSH : 1; // Push Function uint16_t ACK : 1; // Acknowledgment field significant uint16_t URG : 1; // Urgent Pointer field significant uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t DOff : 4; // Data Offset - 5 }; uint16_t L1; }; /* union { struct { uint16_t DOff : 4; // Data Offset - 5 uint16_t Res1 : 6; //: 4; // Reserved - 0 uint16_t URG : 1; // Urgent Pointer field significant uint16_t ACK : 1; // Acknowledgment field significant uint16_t PSH : 1; // Push Function uint16_t RST : 1; // Reset the connection uint16_t SYN : 1; // Synchronize sequence numbers uint16_t FIN : 1; // No more data from sender }; uint16_t L1; }; */ uint16_t Window; // Window - - uint16_t Checksum; // Checksum uint16_t UrgPoint; // Urgent Pointer } TCP_Head; Закомментированное по стандарту, а рабочее, что бы на стороне PC все правильно воспринималось, не закомментированное. И ещё swap на L1 нужен. Может я в чём-то ошибаюсь. Поправьте.