Посоветуйте язык программирования для PC

Подключаем наши девайсы к компьютеру. Обсуждаются: порты, протоколы, драйвера, языки программирования и т.д.
Ответить
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Сообщение Cheba »

асм. вставки - прошлый век. Любой нынешний оптимизирующий компилятор напишет код не хуже заправского гуру-ассемблерщика.
И драйвера уж точно не на Бэйсике нужно писать - для этого есть Си. Но кто поскромнее и не столь пальцат, вполне может и на C# драйвер за вечер накатать. :tea: Для этого уже настроены соответствующие шаблоны и темплейты. Что касается работы с железом, то общий подход в Windows - не давать пользовательским процессам работать с железом. И это очень правильно. Пишем драйвер периферии и к нему callback helper. А уж в нем делаем, что хотим. При этом в мире Windows Visual Studio как среда разработки и C# как язык сейчас покрывают максимум потребностей. Всякие странные маргинальные PureBasic и прочие - это, безусловно, вещи достойные существования, но малополезные. Хотим мы этого, или не хотим, но есть монополист, диктующий определенные правила в своей сфере влияния, и глупо этими правилами пренебрегать. То же самое касается qt - это продукт другой платформы, из мира юниксов и андроидов, где он, безусловно, достоин того, чтобы любой мало мальски профессионал его освоил.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 6323
Зарегистрирован: Вт апр 24, 2007 07:45:40
Откуда: Minsk

Сообщение Jack_A »

QT -- и никаких альтернатив ! ... Такая категоричность меня смущает. И никто даже не поинтересовался у ТС, на каком железе реализован у него переход PC - UART. Есть ли там реликтовый COM-порт или уже совсем нет, тогда направление мысли определяет связка USB - UART . Мой скромный опыт. Занимался МК, в т.ч. и интерфейсами с ПК. Прогу "на другом конце" -- на ПК -- писали другие. Когда же мой юный друг-программер ввиду малости зряплат в науке ушел на вольные хлеба, понял, что круг замкнулся, и цикл : разработка схемы -- разработка ПО МК -- монтаж образца -- отладка firmware -- прога для ПК -- комплексная отладка и тестирование -- ложится на мои плечи. Взял микру FT245, разобрался с драйвером для неё, настрочил на свежеосвоенной Дельфи прогу -- и вуаля. Работает, куда ж ей деться.
Скажут -- а переносимость ? А она нужна в конкретном случае? Нужна работающая система. Есть конкретная задача -- и кратчайший в данных условиях путь решения. Да и жутко сомневаюся я, что у ТС система изваяна ка Mac'ах .
Sorry за многословие -- погода бабье_лето_вская, старика на разговоры потянуло. :)

------------
Самый лучший язык программирования -- тот, который ты хорошо освоил. (С) Народ
Последний раз редактировалось Jack_A Сб сен 07, 2013 09:54:13, всего редактировалось 1 раз.
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Cheba писал(а):асм. вставки - прошлый век. Любой нынешний оптимизирующий компилятор напишет код не хуже заправского гуру-ассемблерщика.
Ага, попробуйте сделать подобное без асм. вставки (имею в виду работу с инструкцией CPUID).

Код: Выделить всё

Procedure.s GetCPUName()
  Protected sBuffer.s{48}

  !MOV eax, $80000002
  !CPUID
  ; the CPU-Name is now stored in EAX-EBX-ECX-EDX
  !MOV [p.v_sBuffer +  0], EAX ; move eax to the buffer
  !MOV [p.v_sBuffer +  4], EBX ; move ebx to the buffer
  !MOV [p.v_sBuffer +  8], ECX ; move ecx to the buffer
  !MOV [p.v_sBuffer + 12], EDX ; move edx to the buffer

  ;Second Part of the Name
  !MOV eax, $80000003
  !CPUID
  ; the CPU-Name is now stored in EAX-EBX-ECX-EDX
  !MOV [p.v_sBuffer + 16], EAX ; move eax to the buffer
  !MOV [p.v_sBuffer + 20], EBX ; move ebx to the buffer
  !MOV [p.v_sBuffer + 24], ECX ; move ecx to the buffer
  !MOV [p.v_sBuffer + 28], EDX ; move edx to the buffer

  ;Third Part of the Name
  !MOV eax, $80000004
  !CPUID
  ; the CPU-Name is now stored in EAX-EBX-ECX-EDX
  !MOV [p.v_sBuffer + 32], EAX ; move eax to the buffer
  !MOV [p.v_sBuffer + 36], EBX ; move ebx to the buffer
  !MOV [p.v_sBuffer + 40], ECX ; move ecx to the buffer
  !MOV [p.v_sBuffer + 44], EDX ; move edx to the buffer
 
  ProcedureReturn PeekS(@sBuffer, 48, #PB_Ascii)
EndProcedure

Debug GetCPUName()
Или вот это.

Код: Выделить всё

pTeb.l

EnableASM 
!MOV EAX, [FS:0x18] 
MOV pTeb, EAX 
DisableASM

Debug pTeb
Cheba писал(а):Но кто поскромнее и не столь пальцат, вполне может и на C# драйвер за вечер накатать.
Видимо вы совсем новичок в программировании, потому что чушь написали. :)))
Запомните, драйвер это неуправляемый код, который работает с функциями ядра (импортирует их из ntoskrnl.exe и т. д.), а не с WinAPI или .NET.
Вот теперь ответьте, как на C# можно создать неуправляемый код, независимый от .NET?
Cheba писал(а):И драйвера уж точно не на Бэйсике нужно писать
А вот тут вы ошибаетесь. На бейсике можно создать неуправляемый код, и независимый от WinAPI и .NET или прочего рантайма и работающий только с функциями ядра. Причем это сделать реально просто - драйвер написать на бейсике и откомпилировать не сложнее чем обычную прогу.
Cheba писал(а):но есть монополист, диктующий определенные правила
Вы забываете про кроссплатформенные среды программирования (и упомянутый PureBasic является одной из них). Есть же не только винда, но и Linux, а так же MacOS X.
Тогда монополист, уже не монополист. :)))
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Сообщение ldir »

Позволю себе влезть в дискуссию. Скажу сразу, я за Qt. PureBasic, конечно хорош тем, что его можно быстро освоить. Но писать на нем GUI программы это сплошная головная боль. Бросил его в пользу C++ и Qt. А его
Мурик писал(а):кроссплатформенные среды программирования (и упомянутый PureBasic является одной из них)
, хромает на обе ноги. А причиной тому скудность возможностей. Постоянно приходится тыкаться в WinAPI, следовательно тут и заканчивается волшебная кроссплатформенность. Возможности же Qt в этом плане намного шире.
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

ldir писал(а):Но писать на нем GUI программы это сплошная головная боль. Бросил его в пользу C++ и Qt
Разница в том, что PureBasic использует контролы, предоставляемые системой (в винде, юзается WinAPI, в лине - GTK 2 или GTK 3, а в макосе, вроде Cocoa), а Qt рисует все контролы с помощью своих функций.
Присутствует весь набор контролов, каких именно вам не хватило, хз. Наверное понадобились какие-то нестандартные.
Реклама
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Сообщение ldir »

Мурик писал(а):Присутствует весь набор контролов
Он то присутствует, но возможности ограниченны. При написании программы в PB я активно использовал ListIconGadget и TreeGadget (вроде так). Так вот редактирование в таблице было невозможным без WinAPI, редактирование "на месте" элементов дерева было не возможным без WinAPI. И еще много чего по мелочам. Отсюда вопрос. Зачем мне использовать платный PureBasic со скромными возможностями, если я могу использовать бесплатный Qt с очень богатыми функционалом (а про редакторы форм одного и другого я вообще молчу, тут и обсуждать нечего)?
Мурик, а Вы когда нибудь использовали Qt?
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

ldir писал(а):Мурик, а Вы когда нибудь использовали Qt?
Для практической разработки не использовал в виду, размера рантайма (не приемлемо).
ldir писал(а):Так вот редактирование в таблице было невозможным без WinAPI
Во вложени проги для винды и линукс с редактируемыми таблицами. В них явно не использовано ни одной WinAPI функции.
Вложения
Table.zip
(216.54 КБ) 185 скачиваний
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Сообщение ldir »

Мурик писал(а):проги для винды и линукс с редактируемыми таблицами
Это сторонние библиотеки, которых у меня не было во время написания программы. Да, их еще по буржуйским сайтам, долго и упорно выискивать надо. А для начинающего это как раз интересное занятие.
Мурик писал(а):Для практической разработки не использовал
Все познается в сравнении.
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

ТС уже походу давно забил, а вы тут очередной холивар устроили :facepalm:
Изображение only pure true norwegian blackx Изображение
Открыл глаза
Аватара пользователя
Сообщения: 52
Зарегистрирован: Чт сен 05, 2013 11:01:55
Откуда: MoscowCity

Сообщение *BoyKot* »

Ничего я не забил. И пока еще не сделал выбор. Если с С все так сложно, то правда лучше PureBasic. Только не хочу запутаться, т.к. для контроллеров изучаю С++. Кстати чем отличается PureBasic от VB?
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

*BoyKot* писал(а):Кстати чем отличается PureBasic от VB?
Очень многим.
ИМХО, у VB, синтаксис древних бейсиков, а у PureBasic более современный синтаксис, который ИМХО проще и понятнее.
VB только под винду x86, а PureBasic имеет IDE под платформы: Windows, Linux, MacOS X, для разрядностей x86 и x64.
Первый раз сказал Мяу!
Сообщения: 30
Зарегистрирован: Пт июл 27, 2012 22:51:52

Сообщение ldir »

*BoyKot* Я начинал с PureBasic, продолжил с С++. PureBasic изучить легче, но на C++ писать легче, да и распространенность не сравнить. Если выбор стоит между PB и С++, то (это только совет) выбирай С++. Он был, есть и будет. А PureBasic и остальные аматорские ЯП, на мой взгляд, это лишь вопрос времени.
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Сообщение Cheba »

Мурик писал(а):
Cheba писал(а):Но кто поскромнее и не столь пальцат, вполне может и на C# драйвер за вечер накатать.
Видимо вы совсем новичок в программировании, потому что чушь написали. :)))
Запомните, драйвер это неуправляемый код, который работает с функциями ядра (импортирует их из ntoskrnl.exe и т. д.), а не с WinAPI или .NET.
Вот теперь ответьте, как на C# можно создать неуправляемый код, независимый от .NET?
Отвечаю, для непальцатых есть UMDF, и, если речь идет не о PCI Express и не обменах в гигабитах в секунду, а обмен со сравнительно медленным МК устройством, да ещё и по USB шине, то результаты будут вполне удовлетворительными. В любом случае, написание "истинных", правильных драйверов практически невозможно без знания Си и глубокого понимания работы ядра. И занимаются таким считанные единицы. А "драйвер" устройства типа "бегущий огонь" , повешенного на LPT порт, можно на чём угодно написать, было бы желание.
Мурик писал(а):
*BoyKot* писал(а):Кстати чем отличается PureBasic от VB?
Очень многим.
ИМХО, у VB, синтаксис древних бейсиков, а у PureBasic более современный синтаксис, который ИМХО проще и понятнее.
VB только под винду x86, а PureBasic имеет IDE под платформы: Windows, Linux, MacOS X, для разрядностей x86 и x64.
Это явно кто-то никогда не видел VB ;) Короче, в паре предложений туча неправды.
1. Visual Studio 2012 бывает и под x86, и под 64-бит.
2. сравниваем синтаксис древнего бейсика

Код: Выделить всё

10 CLS
20 INPUT "Введите число членов ряда: n=", n
30 FOR i = 1 TO n
40 S = S + 1 / i ^ 2
50 NEXT i
60 PRINT "Сумма n первых членов ряда равна: S=", S
Я такому синтаксису школьников в 90-х учил, я ещё помню, что такое "древние бейсики"
И сравниваем с синтаксисом VB

Код: Выделить всё

Private Sub SelectFileButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles SelectFileButton.Click
    Dim dr As DialogResult = Me.OpenFileDialog1.ShowDialog()
    If (dr = System.Windows.Forms.DialogResult.OK) Then
        Dim file As String
        For Each file In OpenFileDialog1.FileNames
            Try
                Dim pb As New PictureBox()
                Dim loadedImage As Image = Image.FromFile(file)
                pb.Height = loadedImage.Height
                pb.Width = loadedImage.Width
                pb.Image = loadedImage
                FlowLayoutPanel1.Controls.Add(pb)
            Catch SecEx As SecurityException
                MessageBox.Show("Security error. Please contact your administrator for details.\n\n" & _
                    "Error message: " & SecEx.Message & "\n\n" & _
                    "Details (send to Support):\n\n" & SecEx.StackTrace)
            Catch ex As Exception
                MessageBox.Show(("Cannot display the image: " & file.Substring(file.LastIndexOf("\"c)) & _
                ". You may not have permission to read the file, or " + "it may be corrupt." _
                & ControlChars.Lf & ControlChars.Lf & "Reported error: " & ex.Message))
            End Try
        Next file
    End If
End Sub
PS И ещё, по поводу PureBasic и Linux, и прочих МАКосов - а там это вообще исчезающе малая, просто невидимая платформа. И хотя бы в силу этого нужно очень хорошо подумать, прежде чем в Linux что-то начинать писать на PureBasic. И уж совсем непонятно, какие именно преимущества он несет на Linux. QT громоздок? Так а что, его разве ещё нет в вашем дистрибутиве по умолчанию? Где вы раздобыли такую древность? На Linux я бы новичкам порекомендовал Python+QT для начала, прекрасный инструмент для новичков. И отличная поддержка языка в Eclipse.

PPS И ещё, по поводу
Видимо вы совсем новичок в программировании
Только новички выучив один диалект одного языка, одну платформу, и одно узкое применение свои знаниям, мнят себя настоящими асами программирования. Я могу писать легко без напрягов на С,С++,C#, Visual Basic под винду, могу на Java в общем случае под что угодно, но если мне незнаком Framework, то нужно будет одним глазом смотреть в документацию, чтобы не городить велосипеды с квадратными колесами. Могу на Python или Perl. Могу быдлокодить на PHP, но мне он не нравится своей эклектичностью. Делал пару подходов к Lua и Ruby, чтобы понять, отчего там народ прется. Не нашел для себя ничего интересного и забросил. Когда-то сильно нравился Forth, но "мэйнстрим" его не поддержал, (и зря, вполне возможно), а голова нерезиновая, и неиспользуемое быстро выветривается, особенно после 50-ти. Несколько раз приходилось править код на LISP, но лисп точно не для меня. Ах да, начинал я, как и все в те времена, с FORTRAN :)))
Пакетные задания на ЕСке на перфокартах, что может быть более полезным для развития навыка программирования :facepalm: Особенно если результат могли отдать на следующей неделе ... с тучей непечатных комментариев по поводу твоих умственных способностей, если вдруг выяснилось, что твоя программа циклится и зря сожрала пару часов процессорного времени ....


И что самое смешное, я программистом ни дня в своей жизни не работал :)))
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Cheba писал(а):Отвечаю, для непальцатых есть UMDF
Этим вы доказали что вы реально новичок в программировании. :))) :)))
UMDF расшифровывается как
User-Mode Driver Framework
А для разработки драйверов режима ядра, вам нужно что типа:
Kernel-Mode Driver Framework
Объясняю в чем разница.
Юзер мод это третье кольцо безопасности, на котором выполняются приложения пользователя и службы.
А кернел мод это уровень ядра ОС - нулевое кольцо безопасности, в котором в частности работают дрова.

Так вот, дайте пример рабочего драйвера на C#, выполняющийся в Kernel-Mode.
Cheba писал(а):Это явно кто-то никогда не видел VB Короче, в паре предложений туча неправды.1. Visual Studio 2012 бывает и под x86, и под 64-бит.
ТС имел в виду VB, а не VB.NET.
Cheba писал(а):Так а что, его разве ещё нет в вашем дистрибутиве по умолчанию?
Может для вас это будет неожиданостью, но в дистрибутиве винды нет Qt. А что касается лини, то речь идет об кроссплатформенных приложениях. :)
Cheba писал(а):Я могу писать легко без напрягов на С,С++,C#, Visual Basic под винду, могу на Java
И при этом не знаете разницы между юзермодом и кернелмодом. :)))
Cheba писал(а):А "драйвер" устройства типа "бегущий огонь" , повешенного на LPT порт, можно на чём угодно написать, было бы желание.
На Brainfuck'е напишите?
Мучитель микросхем
Сообщения: 447
Зарегистрирован: Ср сен 26, 2012 14:12:47
Откуда: Київ

Сообщение Cheba »

Мурик писал(а):Этим вы доказали что вы реально новичок в программировании. :))) :)))
UMDF расшифровывается как
User-Mode Driver Framework
А для разработки драйверов режима ядра, вам нужно что типа:
Kernel-Mode Driver Framework
Объясняю в чем разница.
Юзер мод это третье кольцо безопасности, на котором выполняются приложения пользователя и службы.
А кернел мод это уровень ядра ОС - нулевое кольцо безопасности, в котором в частности работают дрова.
Я не напрасно давал ссылку на MSDN. Можно было и прочесть. Если коротко, то Microsoft уже сделала фреймворк для ленивых и нежелающих изучать Си ( или тех, у кого слово "указатель" или "структура" вызывает аллергию. Не говоря уже о странных "указателях на callback функцию" :) ) Который прячет детали общения с ядром от прикладной части. И вот используя его, вполне можно писать драйверы. Да,да, те самые, которые "нулевое кольцо безопасности" :) На C#, на Visual Basic, или даже на Java. Хотя с Java я, конечно, перегнул, но чисто теоретически это возможно. Потому что нынче не знание языка определяет профессионализм, а знание фреймворков, которые облегчают и убыстряют написание кода для какой-то специфической области. Можно долго и нудно изучать DDK, чтобы написать драйвера для принтера, а можно их наваять на C# с использованием UMDF. Именно так делает сейчас драйвера HP для всей линейки бюджетных принтеров. Результат, правда, получается просто впечатляющим по размерам и тормознутости, но как-то ведь он работает?
ТС имел в виду VB, а не VB.NET.
Это и есть Viual Basic. Без всяких .Net, по крайней мере я особо там ничего дотнетовского не вижу.
Синтаксис языка со времен Visual Basic 5 или Visual Basic 6 особо не изменился. Из каждодневно полезного в VB 2008 появился оператор continue, и это было очень здорово.
А в Visual Basic 6 - это 1998 год, про какой такой .NET в те времена была речь?
С другой стороны, да, весь нынешний виндовый инструментарий унифицируется и основывается на .NET и я лично не вижу в этом ничего плохого. Это очень правильно и очень хорошо. Более того, если какая-то среда программирования под Windows не имеет интеграции с .NET, или программист использует вызовы WinAPI вместо использования соответствующих методов из .NET, то это однозначно сплошное любительство и непрофессионализм. Ну, кроме разве что случаев "унаследованных приложений", где приходится тянуть груз кем-то когда-то написанного кода. Но начинать с этого - глупо.
На Brainfuck'е напишите?
Не, извращениями не занимаюсь :)
Друг Кота
Аватара пользователя
Сообщения: 3385
Зарегистрирован: Пн окт 11, 2010 19:00:08

Сообщение Мурик »

Это уже похоже на троллинг!
Cheba писал(а):Да,да, те самые, которые "нулевое кольцо безопасности" На C#
Примеры в студию.
Cheba писал(а):Это и есть Viual Basic. Без всяких .Net, по крайней мере я особо там ничего дотнетовского не вижу.
Уважаемый. Начиная с 2003 студии, в нее входит не VB, а VB.NET.
Cheba писал(а):А в Visual Basic 6 - это 1998 год, про какой такой .NET в те времена была речь?
Слишком толсто! :)))
Cheba писал(а):Более того, если какая-то среда программирования под Windows не имеет интеграции с .NET, или программист использует вызовы WinAPI вместо использования соответствующих методов из .NET, то это однозначно сплошное любительство и непрофессионализм.
Нереально толсто! :facepalm:

Пошел прочь - тролль!
Модератор
Аватара пользователя
Сообщения: 13490
Зарегистрирован: Ср ноя 26, 2008 16:34:25
Откуда: Тамбовская обл.

Сообщение ploop »

Так, народ, тормозим письками мериться :)

Человеку что нужно? Быстро накидать гуй и обмениваться данными со стандартным com-портом. Если ему не надо будет собирать порт под какой-нибудь андроид, то вполне сгодится любая среда. Даже delphi (правда в каком оно сейчас виде - не знаю).
Говорящий с текстолитом
Аватара пользователя
Сообщения: 1518
Зарегистрирован: Пт дек 28, 2012 21:56:46
Откуда: St. Petersburg

Сообщение blackx »

*BoyKot* писал(а):Ничего я не забил. И пока еще не сделал выбор. Если с С все так сложно, то правда лучше PureBasic. Только не хочу запутаться, т.к. для контроллеров изучаю С++. Кстати чем отличается PureBasic от VB?
Рад что не забили :)

Не нужно выбирать, используйте Qt и пишите на Си++, как в самом начале правильно подсказали. Для вашей задачи такой вариант точно подойдет.
Изображение only pure true norwegian blackx Изображение
ks0
Прорезались зубы
Аватара пользователя
Сообщения: 238
Зарегистрирован: Чт фев 28, 2013 14:16:10

Сообщение ks0 »

Пример с MFC (Visual C++) http://www.compendiumarcana.com/caliper/
135 кб екзешник с нативным кодом
Без костылей и мегабайтных библиотек, которые должен скачать и установить специально обученный человек
Друг Кота
Сообщения: 13796
Зарегистрирован: Чт сен 20, 2007 14:08:00

Сообщение kalobyte »

Cheba писал(а):Результат, правда, получается просто впечатляющим по размерам и тормознутости, но как-то ведь он работает?
ну как тебе сказать... ээ... падает спулер от каких-то пдф :)))
при этом система начинает тормозить и пользователь матерится, звонит мне и тогда матерюсь уже я
потом написал батник очистки спулера и перезапуска службы печати
пара принтеров хп осталась, остальные на самсунг поменяли, хотя там драйвера такое же гавно

кстати хотел спросить про .нет
вчера посмотрел http://microsin.ru/content/view/803/44/
вроде просто накидать гуй и я даже в пту лет 7 назад накидал на шарпе
вот вопрос: если компилить, то .нет 3.5? или 4 выбирать? если соберу под 3.5, то будет ли в 4 работать? 4 слишком большой и тормознутый и не везде есть

сам тоже как бы в раздумьях qt, purebasic, c# для поделий к мк с хид усб
везде свои минусы
вот бейсик хорош простым бинарником, отсутствием дополнительных длл, но может не заработать в вин8 и синтаксис его меня просто бесит
шарп довольно прост, но непонятка с фреймворками этими и теперь с выходом новых версий их что ли все надо ставить?
тематические ответы только в форуме, в приват не пишите
Ответить

Вернуться в «Интеграция с ПК»