

flammmable
Свой-
Posts
236 -
Joined
-
Last visited
Reputation
0 ОбычныйAbout flammmable
-
Rank
Местный
Recent Profile Visitors
2,219 profile views
-
Как поменять делитель тактового сигнала шины APB1 на лету?
flammmable replied to flammmable's topic in STM
Ваш комментарий помог отсечь весьма обширную область поиска ошибки. Большое спасибо! Всё заработало. -
Почему не происходит вход в ветку if ?
flammmable replied to flammmable's topic in STM
Нет, вы ничего не придумали, USB-CDC именно так и построен. Ваш совет мне помог. Ешё раз, большое вам спасибо! :) -
Как поменять делитель тактового сигнала шины APB1 на лету?
flammmable posted a topic in STM
В регистре RCC_CFGR есть поле PPRE[2:0]. Согласно даташиту оно отвечает за делитель тактового сигнала шины APB1. Я пытаюсь программно поменять данный делитель в STM32F070, применив следующий код: RCC->CFGR &= ~(RCC_CFGR_PPRE_Msk); RCC->CFGR |= RCC_CFGR_PPRE_DIV4; Однако, никаких изменений не происходит. Я прочитал, что для смены множителя PLL системы тактирования STM32 необходимо: 1) переключиться на HSI 2) выключить PLL 3) поменять множитель 4) включить PLL 5) переключиться на PLL Но касается ли это делителя PPRE? Он же находится "выше по течению", есть ли ему дело, включен ли PLL или нет? Если ему есть дело, то почему? Если нет и танцы с включением/выключением PLL здесь не причём, то как тогда поменять данный делитель на лету? P.S. Иллюстрация здесь не от STM32F070. В STM32F070 нет шины APB2, но принцип тот же. -
Почему не происходит вход в ветку if ?
flammmable replied to flammmable's topic in STM
Большое спасибо! -
Почему не происходит вход в ветку if ?
flammmable posted a topic in STM
Играюсь с CDC на STM32F070. В функции CDC_Control_FS(...) файла usbd_cdc_if.c есть длинная структура switch-case. Её условие CDC_SET_LINE_CODING срабатывает, если происходит попытка передать в STM32-CDC конфигурацию UART (битрейт, количество стоп-битов и всё такое). Для кое-каких нужд я объявил в main.c глобальную переменную reconf_flag. В функции main() перед бесконечным циклом я присвоил ей ноль. А в самом бесконечном цикле я при помощи if(reconf_flag) проверяю, не поднялся ли флаг. Затем в usbd_cdc_if.c я объявил reconf_flag как extern. И в условии CDC_SET_LINE_CODING я присваиваю этой переменной единицу. Код, однако, не работает. Сначала я раскидал GPIOx->ODR по тексту, то есть отлаживал при помощи загорающихся LED: в условие CDC_SET_LINE_CODING программа заходит, в if(reconf_flag) внутри main() - нет. Затем прошёл отладчиком, поставив на if(reconf_flag) и на присвоение внутри CDC_SET_LINE_CODING точки останова. Видно, как сначала reconf_flag равен нулю, затем, как в CDC_Control_FS(...) ей присваивается единица, а затем уже в main() эта единица осознаётся отладчиком. Но! В тело if(reconf_flag) вход не происходит! Я посмотрел ассемблер на точке останова if(reconf_flag), он показывает 0x800037c: b.n 0x800037c У меня включена оптимизация -Os (optimization for size), без которой код просто не залезет в STM32F070 (у него маловато памяти). И я полагаю, что оптимизатор слишком вольно интерпретирует if(reconf_flag), перед которым происходит reconf_flag=0; Я думаю, оптимизатор видит, что в main.c переменная reconf_flag больше нигде не изменяется и вфигачивает этот ноль жёстко в условие if(0), которое никогда не отрабатывается. 1) Если оно так, то как сказать компилятору не делать этого? 2) Если оно не так, то почему не происходит вход в условие? -
Встречал ли кто-нибудь контрафактные микросхемы Prolific, которые бы определялись драйвером, как "THIS IS NOT PROLIFIC PL2303. PLEASE CONTACT YOUR SUPPLIER"? Если да, сохранились ли у кого-нибудь подобные микросхемы?
-
fakemodem гораздо более лаконичен (хотя ioctl.c у него будь здоров) в сравнении с VirtualSerial2. По моему мнению начинать нужно с малого и двигаться к большому. Так-то исходный код com0com тоже выложен, но с начальными знаниями определить, что является в нём основным, а что вспомогательным, не представляется возможным.
-
Вполне запустился и выдал отладку ) Разумеется, есть проблемы с запуском неподписанных драйверов. Но у Павла Йосифовича написаны рекомендации, как притупить бдительность системы проверки цифровой подписи, которым я следовал )
-
Возможно ли программно создать виртуальный COM порт?
flammmable replied to flammmable's topic in Программирование
Я считаю данные объяснения сугубо флеймом. Есть конкретная задача. Она чётко изложена в вопросе. Всё несущественное - отсечено ради лаконичности. Если у прочитавших есть ответ - хорошо. Если нет - вступать в дискуссию почему нужно именно это не вижу смысла. Ну, положим, докажу я вам, что утилитой com0com не обойтись. Вы что, скажете тогда "А, ну да. Тогда - да. Тогда - хорошо. Тогда <ответ по существу>"? Ведь нет же )) Это - во-вторых. А во-первых - ответ на интересующий меня вопрос уже был дан в самом первом посте )) Есть собеседники, компетенции которых позволяют дать прямой ответ на прямой вопрос. Моя задача (в целом, регулярно достигаемая) - контакт с ними. А не с теми, кто хочет править исходный вопрос до тех пор, пока он не войдёт в сферу их компетенции. Да, на Исходниках нашлась масса обормотов, которые начали рассказывать не то, что нужно, а то, что они знают. В духе: Но также там был и Majestio, который ответил по сути вопроса. На первых я просто не обращаю внимание ))) -
Добрый день! Разбираюсь в процессе написания драйверов. Почитал Павла Йосифовича. Выкачал WDK, настроил Visual Studio, создал виртуалку с Windows. Вывел через KdPrint("Hello, world!"). И по скопипащенному из книги примеру при помощи драйвера и консольного приложения поменял приоритет треда. В последнем примере в функции DriverEntry создаётся (при помощи IoCreateSymbolycLink) текстовая ссылка (условно "MyDriver"), при помощи которой в main() приложения получается хэндлер: HANDLE hDevice = CreateFile(L"\\\\.\\MyDriver", ... Хочу создать виртуальный COM-порт. Для этого взял пример fakemode из майкрософтовских примеров. Я его успешно собрал, установил на виртуалку и запустил. COM-порт в диспетчере устройств не появился (что, наверное, логично). Значит, надо как-то сообщить драйверу о необходимости создания этого COM-порта. Но как? В DriverEntry у примера fakemodem нет создания текстовой ссылки: NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) { NTSTATUS status = STATUS_SUCCESS; WDF_DRIVER_CONFIG config; KdPrint(("Fakemode Function Driver Sample - Driver Framework Edition.\n")); KdPrint(("Built %s %s\n", __DATE__, __TIME__)); WDF_DRIVER_CONFIG_INIT( &config, FmEvtDeviceAdd ); status = WdfDriverCreate( DriverObject, RegistryPath, WDF_NO_OBJECT_ATTRIBUTES, &config, // Driver Config Info WDF_NO_HANDLE ); if (!NT_SUCCESS(status)) { KdPrint( ("WdfDriverCreate failed with status 0x%x\n", status)); } return status; } Но даже если как-нибудь (может, дописав в код fakemodem создание текстовой ссылки, а может , при помощи OpenDriver(...), но это не точно) удастся получить в приложении хэндлер, то что делать дальше? В примере от Microsoft нет кода приложения usermode для использования самого драйвера fakemodem.sys. Как ему внушить, что мне требуется создать COM-порт?
-
Возможно ли программно создать виртуальный COM порт?
flammmable replied to flammmable's topic in Программирование
Вместо Марка Руссиновича я читаю Павла Йосифовича ) Я уже выкачал WDK, настроил Visual Studio, создал виртуалку с Windows, вывел через KdPrint("Hello, world!"). И по скопипащенному из книги примеру при помощи драйвера и консольного приложения поменял приоритет треда. Да, консультации не заменят чтения, но заметно ускорят процесс, так как чтиву не задашь уточняющий вопрос. Вообще, мой опыт запросов платных консультаций говорит о несколько парадоксальной ситуации. Задаёшь вопрос на форуме: - <Вопрос> - <Странный, не раскрывающий суть ответ> [я не про текущий случая, а в целом; здесь вы сразу, лаконично, ёмко и по сути ответили] - Вы рассказываете здесь что-то не то. - А что вы хотели? Здесь всё бесплатно и добровольно, нам за это не приплачивают, между прочим. - Хорошо, давайте за деньги. - Ой, вы знаете, я, на самом деле, не специалист, а если и специалист, то давно этим не занимался, а если и занимался недавно то... Ой птичка, смотрите-смотрите! <убегает в противоположную сторону> Непонятный феномен ))) Ну да ладно. Попробую позадавать вопросы в данном разделе по мере возникновения ) -
Возможно ли программно создать виртуальный COM порт?
flammmable replied to flammmable's topic in Программирование
Большое спасибо за ответ по существу! Мне нужно, чтобы функционал моего приложения создавал в диспетчере устройств COM-порт в отсутствие внешних подключений. Я начал погружаться в тематику написания драйверов, но решил уточнить: зря или не зря. Если создание виртуального COM-порта невозможно без написания драйвера, то не зря. Большое спасибо, что вы есть! На форумах хватает "советчиков", которые на самом деле не знают ответа на конкретный вопрос, но отписаться желают. Потому они читают исходный вопрос через слово, перемешивают отдельные фразы в голове, формулируют какой-то свой вопрос и на него же отвечают. Это просто бич электронного комьюнити! Ещё один важный вопрос: кто разбирается в написании драйверов для Windows и может за деньги проконсультировать меня по Скайпу? -
Возможно ли программно создать виртуальный COM порт?
flammmable posted a topic in Программирование
Возможно ли без написания драйвера UMDF/KMDF и без применения готового ПО, вроде com0com, создать при помощи WinAPI приложение, которое бы имитировало бы работу COM порта в операционной системе? -
Как вытащить данные из callback-а?
flammmable posted a topic in STM
Я сгенерировал CubeMX-ом код для USB_DEVICE класса CDC. В числе прочего сренерировался файл usbd_cdc_if.c, в котором имеется функция-колбэк, предоставляющая принятые через USB данные: static int8_t CDC_Receive_FS(uint8_t* Buf, uint32_t *Len) { /* USER CODE BEGIN 6 */ USBD_CDC_SetRxBuffer(&hUsbDeviceFS, &Buf[0]); USBD_CDC_ReceivePacket(&hUsbDeviceFS); return (USBD_OK); /* USER CODE END 6 */ } Как вытащить из неё данные (Buf/Len), скажем, в main(), для последующей обработки/анализа? -
Почему список классов устройств USB такой странный?
flammmable replied to flammmable's topic in Интерфейсы
0) флешка - кастомное устройство? 1) сколько раз в жизни вы лично пихали флешку в десктоп? 2) сколько раз в жизни вы лично пихали флешку в китайский смартфон? 3) сколько раз в жизни вы лично пихали флешку в сервер хранения данных? 4) сколько раз в жизни вы лично пихали флешку в стойку управления станком с ЧПУ?