Как работает связь UART между двумя устройствами?

Я думаю, вы пропустили привязки здесь, вам нужно добавить webHttpBinding и basichttpbing под вкладкой bindings в теге system.serviceModel.

    <services>
  <service name="VInfotech.Server.Intranet.IntranetService" behaviorConfiguration="IntranetService.Service1Behavior">
    <!-- Service Endpoints -->
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="Binding1" contract="VInfotech.Server.Intranet.IIntranet">
      <!-- 
          Upon deployment, the following identity element should be removed or replaced to reflect the 
          identity under which the deployed service runs.  If removed, WCF will infer an appropriate identity 
          automatically.
      -->
      <identity>
        <dns value="localhost"/>
      </identity>
    </endpoint>
  </service>
  <service name="VInfotech.Server.Intranet.MobileServicesController" behaviorConfiguration="ServBehave">
    <endpoint address="RestService" bindingConfiguration="StreamedRequestWebBinding" binding="webHttpBinding" behaviorConfiguration="restPoxBehavior" contract="VInfotech.Server.Intranet.IMobileServices" />
  </service>
</services>
<bindings>
  <webHttpBinding>
    <binding name="StreamedRequestWebBinding"
    bypassProxyOnLocal="true"
             useDefaultWebProxy="false"
             hostNameComparisonMode="WeakWildcard"
             sendTimeout="10:15:00"
             openTimeout="10:15:00"
             receiveTimeout="10:15:00"
             maxReceivedMessageSize="9223372036854775807"
             maxBufferPoolSize="9223372036854775807"
             maxBufferSize="2147483647"
             transferMode="StreamedRequest" >
      <readerQuotas maxArrayLength="2147483647" maxStringContentLength="2147483647" />
    </binding>
  </webHttpBinding>
  <basicHttpBinding>
    <binding name="Binding1" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/>
    </binding>
    <!-- For Cyber Source bindings-->
    <binding name="ITransactionProcessor" closeTimeout="04:01:00" openTimeout="04:01:00" receiveTimeout="04:10:00" sendTimeout="04:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="1073741824" maxBufferPoolSize="1073741824" maxReceivedMessageSize="1073741824" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
      <readerQuotas maxDepth="1073741824" maxStringContentLength="1073741824" maxArrayLength="1073741824" maxBytesPerRead="1073741824" maxNameTableCharCount="1073741824"/>
      <security mode="TransportWithMessageCredential">
        <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
        <message clientCredentialType="UserName" algorithmSuite="Default"/>
      </security>
    </binding>
  </basicHttpBinding>
  <!--Cyber Source bindings ends here-->
</bindings>
-2
задан JackOfHearts 17 January 2019 в 08:27
поделиться

1 ответ

Есть два подхода, которые используются.

В прошлом было принято использовать аппаратное управление потоком. При этом используется дополнительный провод в каждом направлении. Отправитель ждет, пока провод не покажет, что получатель готов. Когда приемник не готов к приему данных, он сигнализирует другой стороне. Аппаратные средства буферизуют как минимум один байт и, если буфер заполнен, сигнализируют другой стороне не отправлять по этому проводу.

Это менее распространено сегодня. UART настолько медленны по сравнению с современным оборудованием, а большие буферы настолько дешевы и просты в обеспечении, что проблема больше не возникает. Отправитель просто заполняет аппаратный буфер получателя, а получатель периодически очищает аппаратный буфер. Программное обеспечение должно было бы долго игнорировать буфер, чтобы он переполнился.

Промежуточным решением является использование управления потоком данных в потоке данных. Как правило, два символа зарезервированы, один для остановки потока и один для его возобновления. Получатель отправляет символ управления потоком отправителю, если его буфер приближается к полному, и еще один, если его буфер приближается к пустому. Это действительно полезно, только если поток данных не должен обрабатывать двоичные данные. Это чрезвычайно редко и традиционно использовалось главным образом для соединений, на которых был человек на одном конце. Вы также можете приостановить поток, если информация поступает быстрее, чем вы могли ее прочитать.

Как правило, используемые протоколы допускают переполнение и включают некоторую форму подтверждения высокого уровня и / или повторной передачи в зависимости от ситуации. Одно устройство может подождать, пока другая сторона отправит какой-то ответ на свою команду, и, если оно не получит, повторите команду. Протокол разработан так, чтобы не делать ничего страшного, если команда получена дважды, поскольку это может быть потерянный ответ.

0
ответ дан David Schwartz 17 January 2019 в 08:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: