Jump to content

    

Сергей Борщ

Модераторы
  • Content Count

    9331
  • Joined

Posts posted by Сергей Борщ


  1. 1 час назад, dimka76 сказал:

    Вот здесь

    Все равно выглядит вредным советом. Ибо далее предлагается

    Цитата

    Then you need the following in an accessible header file or at the top of a C file that will use it

    #define RAMFUNC __attribute__ ((long_call, section (".ramfunctions")))

    А если прочитать документацию, то 

    Цитата
    long_call/short_call
    This attribute specifies how a particular function is called on ARM and Epiphany. Both attributes override the -mlong-calls (see ARM Options) command-line switch and #pragma long_calls settings. The long_call attribute indicates that the function might be far away from the call site and require a different (more expensive) calling sequence. The short_call attribute always places the offset to the function from the call site into the `BL' instruction directly.

     

  2. 45 минут назад, jcxz сказал:

    Ну так если в барабан револьвера зарядить только один патрон и сыграть в русскую рулетку, то тоже скорей всего останешься живым

    Отвлечение от темы: читал где-то версию, что в исправном и правильно смазанном револьвере барабан под весом патрона всегда поворачивается отсеком с единственным патроном вниз. Выглядит правдоподобно.

  3. 1 час назад, jenya7 сказал:

    плату разводят, нет? :)) без мягкого знака? 

    Правописание -тся и -ться определяется отдельным и совсем несложным правилом.

    1 час назад, jenya7 сказал:

    может быть, я давно в школе учился, забывать стал :))

    Смешного тут мало. Как написали на одном форуме, "орфография в интернете — это твоя «одежка» из знаменитой русской пословицы, и чтобы сразу же не послали, надо сразу писать хорошо или хотя бы стараться писать хорошо."

  4. 2 часа назад, dimka76 сказал:

    Вот еще советуют при размещении функции в ОЗУ использовать ключ –mlong-calls

    Интересно, чем руководствуются авторы таких советов. "Сделайте свою маленькую быструю программу большой и медленной". Компоновщик сам в состоянии использовать длинные вызовы только там, где это необходимо. Зачем мешать ему делать свою работу?

  5. 1 час назад, AHTOXA сказал:

    После того, как были выданы все номера до последнего (не помню значение, то ли 99, то ли 256)

    255. У меня было, когда партию синезубых устройств тестировал. 2012 год примерно.

  6. 2 часа назад, Fillya сказал:

    приму ссылку на литературу Русского или Английского языка

    Да, до этих штучек мастер
     этот самый Джон Ланкастер.
    Но жестоко просчитался
     пресловутый мистер Пек.
    Обезврежен он и даже
     он пострижен и посажен,
    а в гостинице "Советской"
     поселился мирный грек.

  7. 24 минуты назад, Arlleex сказал:

    Без нее хост будет либо глючить, либо работать через нештатные драйверы.

    Ну, композитное устройство из нескольких VCP - это по-любому нештатные драйверы.

    16 минут назад, Eddy_Em сказал:

    Когда разрабатывал эмулятор PL2303, проверял: отключал настройку EP1, и все нормально работало

    Меня не интересует эмулятор какой-то там PL. Меня интересует usb-cdc. Думаю, автора темы тоже.

    18 минут назад, Eddy_Em сказал:

    Убираем отсюда инициализацию EP1

    Никакого желания ковыряться в ваших исходниках. Давайте ссылку на рабочий "из коробки" пример cdc-acm.

  8. 1 час назад, Eddy_Em сказал:

    Кстати, "системный драйвер" CDC рассчитывает на то, что IN и OUT сидят на разных конечных точках.

    А всю жизнь использовал один номер конечной точки, все работает. Все примеры из интернета используют один номер конечной точки. "Что мы делаем неправильно"?

  9.  

    1 час назад, Eddy_Em сказал:

    А я внимательно изучил код модулей ядра для PL2303 и CDC ACM. Не используется там конечная точка прерываний! Так что, и в железяке ее можно не использовать.

    Я не знаю, что вы там изучали, но если убрать из дескриптора конфигурации дескриптор конечной точки - Linux Mint не определяет такое устройство как cdc-acm с ошибкой -22. Все заканчивается на команде SET_CONFIGURATION. Если же в дескрипторе конечная точка указывается, то система посылает для нее Token packet. И Linux и винда. И им глубоко все равно  - используется эта конечная точка дальше в драйверах или нет. Я не помню уже, как именно оно не работало , если в дескрипторе указать несуществующую конечную точку, но оно не работало 100% - это я проверял сам лично.

    Поэтому контрольный вопрос вам в голову: вы делали в железе устройство без interrupt конечной точки или это ваши теоретические рассуждения? Варианты с убиранием декскриптора конечной точки и с указанием несуществующей конечной точки я проверял лично - они не работают. Даже под линухом. Я ожидаю от вас ссылки на ваш гитхаб, где лежат исходники работающего хотя бы под линухом примера без interrupt конечной точки, в противном случае вы просто балабол и общаться с вами смысла нет.

  10. 31 минуту назад, Сергей Борщ сказал:

    Но вы ведь можете легко проверить - уберите из дескриптора конфигурации дескриптор управляющей конечной точки.

    Проверил сам - не взлетело. Даже под линухом. Прочитал документацию внимательнее:

    Цитата

    The Communications Class interface shall provide device management by furnishing a management element (endpoint 0); the interface optionally can provide host notification by furnishing a notification element. Only the management element is required for a complete Communications Class interface. The management element also meets the requirements for devices as outlined in the USB Specification. Call management is provided in the communications interface and optionally multiplexed on a data interface. The following configurations describe how the device might provide call management with and without the use of the Communications Class interface:
    • The device does not provide any call management on the Communications Class interface and is made up of only a management element (endpoint 0). In this case, the Communications Class interface is minimally represented and only provides device management over a management element (endpoint 0). This corresponds to the Multi-Channel Control Model and the CAPI Control Model, as described in the ISDN Subclass Specification.
    • The device does not provide an internal implementation of call management and only accepts minimum set of call management commands from the host. In this case, both a management element and a notification element represent the Communications Class interface. This corresponds to the Direct Line Control Model, as described in the PSTN Subclass Specification.”
    • The device provides an internal implementation of call management over the Data Class interface but not the Communications Class interface. In this case, the Communications Class interface is also minimally represented and only provides device management over a management element (endpoint 0). This configuration most closely corresponds to the Abstract Control Model in which commands and data are multiplexed over the Data Class interface. Activation of the command mode from data mode is accomplished using the Heatherington Escape Sequence or the TIES method. For more information about the Abstract Control Model, see the PSTN Subclass Specification.
    • The device provides an internal implementation of call management that is accessed by the host over the Communications Class interface. In this case, the Communications Class interface performs both call and device management, and consists of a management element (endpoint 0) and a notification element (normally a interrupt endpoint). The management element will transport both call management and device management commands. The notification element will transport asynchronous event information from the device to the host, such as notification of an available response, which then prompts the host to retrieve the response over the management element. This corresponds to the Abstract Control Model. For more information about the Abstract Control Model, seethe PSTN Subclass Specification.

    Наши виртуальные последовательные порты используют Abstract Control Model (CDC-ACM) и попадают в последнюю категорию. Микрософт не виноват :blush:

    Вот еще безумная мысль:

    Цитата

    Notification elements pass messages via an interrupt or bulk endpoint, using a standardized format. Messages are formatted as a standardized 8-byte header, followed by a variable-length data field. The header identifies the kind of notification, and the interface associated with the notification; it also indicates the length of the variable length portion of the message

    Интересно, а можно ли использовать одну и ту же interrupt контрольную точку в нескольких виртуальных портах? Но это я проверить не могу - нет у меня исходника с двумя портами.

  11. 1 час назад, AlexandrY сказал:

    Стандартные драйвера COM порта требуют управления сигналами RTS, CTS...

    Которое происходит через конечную точку 0.

    57 минут назад, AlexandrY сказал:

    Так все этим интересуются.
    Но ответ таков, что стандартный драйвер винды с таким работать не будет. 

    Ну, интересуются в основном нахождением готовых решений. Созданием решений занимается меньшинство. Хотелось бы, чтобы ответ был не в стиле "готового решения в интернете не нашел", а "я проверял, это не работает". Или "вот тут человек пишет, что проверял и у него не получилось".

    Читаем описание (Universal Serial Bus Class Definitions for Communications Devices. Revision 1.2 (Errata 1) November 3, 2010):

    Цитата

    The Communications Class defines a Communications Class interface consisting of a management element and optionally a notification element. The management element configures and controls the device, and consists of endpoint 0. The notification element transports events to the host, and in most cases, consists of a interrupt endpoint.

    Прошу обратить внимание на слово "optionally". Если микрософт "забил" на слово "optionally" - жаль.

    41 минуту назад, Arlleex сказал:

    Печаль тогда, конечно.

    Но вы ведь можете легко проверить - уберите из дескриптора конфигурации дескриптор управляющей конечной точки.

  12. 3 часа назад, dxp сказал:

    За основу возможно подойдёт тот же TMutex, только вместо простого флага там счётчик завести.

    Может я чего-нибудь не понял, но вы описали TRecursiveMutex.

  13. 1 час назад, MX_Master сказал:

    Ошибку видно?

    Нет. В одном случае был указатель на массив, во втором случае массив внесли в структуру. Оба варианта рабочие с точки зрения кода. Прибивать MAC  гвоздями внутри кода - так это не единственное "удачное" место в кубе. Использовали другое имя макроса для адреса PHY. Сочувствую. Вы сами выбрали использовать куб.

  14. 1 час назад, destroit сказал:

    всегда остаются следы ...всегда

    Зажать в тиски через прокладку из кожи, нагреть до температуры разрушения фиксатора резьбы (что-то около 260 градусов) феном и через прокладку из кожи хватать крышку газовым ключом. Велика вероятность не оставить следов.

  15. Я по видео понял, что после тестирования система уходит в циклическую перезагрузку. Жаль, что видео снято не от момента включения - возможно, сообщение "booting system" было и перед тестировнием флешки, т.е. "booting sysem" - тестирование - "booting sysem" -"booting sysem"... Тогда можно предположить высохшие емкости в преобразователе питания - после их прогрева емкость падает, пульсации возрастают,  устройство уходит на перезагрузку и уже не успевает дойти даже до тестирования. Для начала можно силами заказчика вскрыть прибор и визуально оценить наличие вздутых электролитов.

  16. 3 часа назад, __inline__ сказал:

    Для классов с инитом конструкторов - тольлько  new/delete.  Без вариантов! :don-t_mention:

    Есть вариант:

    auto ptr = malloc(sizeof(T));
    if(ptr == nullptr)
    {
        return errorcode;
    }
    
    auto t_ptr = new(ptr) T(параметры конструктора);
    
    ......
      
    t_ptr->~T();
    free(ptr);

    Подсказка: placemet new()