Jump to content

На чем писать  

560 members have voted

  1. 1. Что чаще используете в разработках?

    • Assembler
      156
    • C
      282
    • Что-то еще
      61


Recommended Posts

Извечный вопрос не дает покоя. Кто и на чем все же предпочитает вести работу с контроллерами?

Лично я как научился работать на С, так и не могу перейти на Assembler, да и не очень то хочется это делать.

Какие все же преимущества и недостатки, окромя понятности и не очень понятности?

Share this post


Link to post
Share on other sites

На ассемблере)

Еще пытаюсь перейти на Ц, но ассемблер все же знать нужно.

Свой паскаль пишу еще, так что скоро еще один язык добавлю в список)

Share this post


Link to post
Share on other sites

Литиевые батарейки Fanso для систем телеметрии и дистанционного контроля

Системы телеметрии находят все более широкое применение во многих отраслях на промышленных и коммунальных объектах. Требования, предъявляемые к условиям эксплуатации приборов телеметрии и, как следствие, источников питания для них, могут быть довольно жесткими. Fanso предоставляет широкую линейку продукции, рассчитанной на различные условия эксплуатации, что позволяет подобрать батарейку для каждого конкретного применения, в том числе и для устройств телеметрии.

Подробнее

Си не перевариваю на генетическом уровне... :) Asm, только asm.

Share this post


Link to post
Share on other sites

Если что-нить в реалтайме работающее - то только на асме, ибо можно посчитать время выполнения. Что-нить примитивное, типа сбора данных с датчиков и вывод их куда-нить в последовательную шину или на дисплей - пишу на Си.

Share this post


Link to post
Share on other sites
                     

Приглашаем на вебинар Решения для построения ультразвуковых счетчиков жидкостей и газов на базе MSP430

Компэл совместно с Texas Instruments 23 октября 2019 приглашают на вебинар, посвященный системам-на-кристалле для построения ультразвуковых расходомеров жидкостей и газов на базе ядра MSP430. Вебинар проводит Йоханн Ципперер – эксперт по ультразвуковым технологиям, непосредственно участвовавший в создании данного решения. На вебинаре компания Texas Instruments представит однокристальное решение, позволяющее создавать точные недорогие счетчики жидкостей и газов.

Подробнее...

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

Share this post


Link to post
Share on other sites

не знаю. может быть, для новоприбывших из университета радиофизиков, у которых по программе идет С++, что то и сложновато.

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

Share this post


Link to post
Share on other sites

Радуйся, что хоть Си учил в универе. У нас на радиофаке(ННГУ) преподовали фортран :blink: и Tex с MatLab(Хоть на этом спасибо...). :(:(:(

Share this post


Link to post
Share on other sites

Раньше писал на асемблере для PIC16F84, а сейчас переключился на AVR и изучаю Си

Share this post


Link to post
Share on other sites

Вот я как раз и пишу, что я учу в универе (ПГУ) именно Фортран. А на упомянутом предприятии подрабатываю (все равно стипуху пропарил :) ), причем далеко не программистом.

Edited by Jozef

Share this post


Link to post
Share on other sites

Zer, Полностью вас поддерживаю и не перевариваю си,это не язык ,такое ощущение что его придумали чтоб выпендриваться перед теми кто на Васике пишет :)))) да и потому что незнаешь что генерит ,а на асме написал и что написал то и будет :) есть ощущение что рычаги у тя в руках а не у компилятора,да и когда делаеться проект который нужно уместить в махонькую память Си не друг :)

Share this post


Link to post
Share on other sites

Уважаемые, а какая разница программисту на каком языке писать? На каком инструменте играешь лучше - на том и играй. Работа с конкретными выводами и портами контроллера, выставить единичку, прочитать, и тому подобное - на асме проще, посчитать при этом синус или логарифм - подключи С. И чем опытнее программист, тем больше у него СВОИХ библиотек и ему проще работать. А это приходит со временем, к кому раньше, к кому позже. Программа, написанная на ЯВУ проще переносится на другую платформу, но требует более скоростных ресурсов. Если их не хватает - кроме Асма ничего нет. Так вроде получается.

Share this post


Link to post
Share on other sites

Это понятно что программисту без разницы какой язык.

А вот языку не совсем безразлично.

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

Микроконтроллеры - это немного другая ветвь развития. Вот ядро, вот периферия, вот ОЗУ, вот ПЗУ, вот список команд. По сути это ЭВМ в которой есть простой и понятный доступ ко всему что только можно на самом низком уровне. И никому в голову бы не пришло ещё 10 лет назад делать какие-то компиляторы с верхних языков чтобы писать для ядра программы.

Это сейчас, когда степень интеграции настолько высока, что на малипусенький кристалл уместили столько всего что сам чёрт ногу сломит, при этом на аппаратном уровне заложив мультизадачность, тут уж без верхних яхыков стало не обойтись. И пошла такая мода на С для микроконтроллеров. Программиста "запирают" в рамки языка. Конечно. Тут тебе и синус и косинус и еще много подобных благ. А уж как оно там скомпилируется - бог его знает. У тебя же теперь такой размер ЗУ что можно и не задумываться.

Есть только небольшое "но". Это всё расхолаживает и опять отдаляет программиста от истинной сути вещей происходящих в кристалле. Программист микроконтроллеров - это не тот программист который Delphi only, к которому все привыкли. Нельзя быть программистом только верхних языков чтобы сесть и писать для МК какие-то глобальные приложения. Наоборот можно.

Резюме: пишите на чём хотите. А если хотите быть хозяином положения пишите на языке ядра.

Share this post


Link to post
Share on other sites

Си всё-таки пошел от большого количества системных ресурсов и зажирания програмистов.

Share this post


Link to post
Share on other sites

Я бы не стал так говорить. Язык С появился тогда, когда больших ресурсов не было. И уже тогда, на маленьких машинах типа Корвет на С можно было лепить неплохие вещи, которые на АСМе делались с огромным трудом. Как говаривал Козьма Прутков - нельзя объять необъятное. Если можно написать на С и "гутаришь на энтой мови" - напиши. Написание программы времени займет меньше, чем на АСМе. Но опять же - главное не язык - а возможность написания РАБОТАЮЩЕЙ программы. Одна строка на С, как правило, много строк на АСМе, и зачем трудиться лопатой, когда можно позвать экскаватор. Но косточки на раскопках обметаем кисточкой. "Верхний" программист сможет писать эффективно для микроконтроллеров только тогда, когда будет их знать изнутри, на уровне "железа". А этому учат только электронщиков, но их не учат программировать на С. Нас в далекие 70 годы учили на Фортране, но и машин персональных тогда не было.

Share this post


Link to post
Share on other sites

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

Edited by Jozef

Share this post


Link to post
Share on other sites
Zer: Си всё-таки пошел от большого количества системных ресурсов и зажирания програмистов.

Зато дал возможность еще более массового распространения профессии, как и все прочие языки высокого уровня. Как было сказано, двигатель прогресса - это лень. Хотя и приводит это к росту неприспособленности человека.

Между прочим, ЯПВУ пошли задолго до С, так что не на Страуструпа нам бочку катить. Первые языки, конечно, были узко специализированы, взять тот же FORTRAN. Билл Гейтс послужил популяризации программирования, ибо создал Basic, являющийся до сих пор (местами) стартовой площадкой для программистов. Отпала просто серьезная необходимость лезть непосредственно в работу процессора и его окружающих. Прогресс...

Share this post


Link to post
Share on other sites
Отпала просто серьезная необходимость лезть непосредственно в работу процессора и его окружающих.

Процессора и его окружающих - да.

Микроконтроллера и его встроенной периферии - нет.

Если нет серьёзной необходимости лезть, значит есть избыточность, а то что вы делаете на МК может быть сделано на чём то другом, менее избыточном.

Если в приложении подразумевается использование МК, и без него не обойтись, то ИМХО непосредственно лезть в работу ядра придётся так или иначе. Проще это делать на языке ядра.

К слову о том что там "лограифмы и прочие неберущиеся интегралы". Можно подумать что всё это "с неба" падает а не рассчитывается в конечном итоге в том же арифметическом модуле ядра. Которое очень ограниченно в своих возможностях. Классически это только две операции сложение и сдвиг.

Так вот все мат. функции могут быть разложены в ряды, либо затабулированы (по справочнику о Высшей математике). Проблем особых тут не наблюдается. Берем книжку "Полный дизассемблер ПЗУ ZX Spectrum", находим там процедуры относящиеся к встроенному калькулятору, и изучаем. Там довольно внушительные возможности FP вычислений, всё в машинных кодах писано.

Share this post


Link to post
Share on other sites
Зато дал возможность еще более массового распространения профессии, как и все прочие языки высокого уровня. Как было сказано, двигатель прогресса - это лень. Хотя и приводит это к росту неприспособленности человека.

May be, may be...

Я тоже на VB для компа проги пишу, но это уже несерьёзно... <_<

Share this post


Link to post
Share on other sites

я вот на бейсике ниразу ничего вобще не писал... пока учился классе в 7-8 немного поизучал си..

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

асм - то же си, только голова должна додумать как сделать на асме switch и тд... зато у асма больше возможностей... по идее вообще начиличие различий выс. и низкий уровни отчасти портит систему...

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

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

Share this post


Link to post
Share on other sites

Гы АСМ реально рулит Ведь

Ассемблер язык аппоратного уровня и при работе с железом просто не заменим!!! Асм плотнее всего взаимодествует с платформой нежели языки выс уровня

Программа на асме пролучается самая компактная и быстродействующая что не мало важно для микроконтроллеров.

На асме мона написать процедуры функции а потом ими пользоваться как вздумается.

P.S. а Бейсик (уневерсльный символьный код для начинающих) под МК это мазахизм

P.P.S вы исчё на них виндовз поставьте ))

Share this post


Link to post
Share on other sites

Виндовз на МК... хм...

МК с объемом Flash 2 Гб, EEPROM 256 Мб и быстродействием 1,5 ГГц? оригинальная была б штука. Особенно если б из его возможностей использовались бы только MSOffice, как обычно бывает :)

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...

  • Similar Content

    • By Максим123456789
      делаю диплом, в схеме у меня микроконтроллер PIC16F688 и мне нужно его заменить на ATmega. Не могу найти похожий
    • By Вячеслав_НС
      Здравствуйте ! подскажите , какую лучше библиотеку использовать (и где ее взять) для управления i2c atmega8 в atmel studio 7  .  задача - управлять atmega8 по i2c ,  цап  PCF8591T .
      понимаю , в интернете много примеров и библиотек , но хотелось бы пример максимально простой и точно рабочий . т.к. пока что все мои попытки не привели к успеху ... то Atmel Studio 7 при компиляции ругается на несуществующий файл ( к примеру - "stream.h") при использовании библиотеки i2c , то еще какие то грабли .
    • By Антон Плюшкин
      В общем есть небольшая тривиальная задача - сделать свитюльку. Контроллер управляет светодиодиками, цвета меняются, людишки довольны.
      Схема проста: Attiny44a -> 2n3904 x3 -> RGB-светодиод.
      Собрал, протестил, всё норм, но!
      Как только в коде я использую функцию задержки - _delay_ms (util/delay.h) - контроллер повисает!
      #define F_CPU 16000000UL #include <avr/io.h> #include <util/delay.h> int main(void) { // Input/Output Ports initialization // Port A initialization // Function: Bit7=Out Bit6=Out Bit5=In Bit4=In Bit3=In Bit2=In Bit1=In Bit0=In DDRA=(1<<DDA7) | (1<<DDA6) | (0<<DDA5) | (0<<DDA4) | (0<<DDA3) | (0<<DDA2) | (0<<DDA1) | (0<<DDA0); // State: Bit7=0 Bit6=0 Bit5=T Bit4=T Bit3=T Bit2=T Bit1=T Bit0=T PORTA=(0<<PORTA7) | (0<<PORTA6) | (0<<PORTA5) | (0<<PORTA4) | (0<<PORTA3) | (0<<PORTA2) | (0<<PORTA1) | (0<<PORTA0); // Port B initialization // Function: Bit3=In Bit2=Out Bit1=In Bit0=In DDRB=(0<<DDB3) | (1<<DDB2) | (0<<DDB1) | (0<<DDB0); // State: Bit3=T Bit2=0 Bit1=T Bit0=T PORTB=(0<<PORTB3) | (0<<PORTB2) | (0<<PORTB1) | (0<<PORTB0); // Timer/Counter 0 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Phase correct PWM top=0xFF // OC0A output: Non-Inverted PWM // OC0B output: Non-Inverted PWM // Timer Period: 0,031875 ms // Output Pulse(s): // OC0A Period: 0,031875 ms Width: 0 us // OC0B Period: 0,031875 ms Width: 0 us TCCR0A=(1<<COM0A1) | (0<<COM0A0) | (1<<COM0B1) | (0<<COM0B0) | (0<<WGM01) | (1<<WGM00); TCCR0B=(0<<WGM02) | (0<<CS02) | (0<<CS01) | (1<<CS00); TCNT0=0x00; OCR0A=0x00; OCR0B=0x00; // Timer/Counter 1 initialization // Clock source: System Clock // Clock value: 16000,000 kHz // Mode: Ph. correct PWM top=0x00FF // OC1A output: Non-Inverted PWM // OC1B output: Disconnected // Noise Canceler: Off // Input Capture on Falling Edge // Timer Period: 0,031875 ms // Output Pulse(s): // OC1A Period: 0,031875 ms Width: 0 us // Timer1 Overflow Interrupt: Off // Input Capture Interrupt: Off // Compare A Match Interrupt: Off // Compare B Match Interrupt: Off TCCR1A=(1<<COM1A1) | (0<<COM1A0) | (0<<COM1B1) | (0<<COM1B0) | (0<<WGM11) | (1<<WGM10); TCCR1B=(0<<ICNC1) | (0<<ICES1) | (0<<WGM13) | (0<<WGM12) | (0<<CS12) | (0<<CS11) | (1<<CS10); TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; // Timer/Counter 0 Interrupt(s) initialization TIMSK0=(0<<OCIE0B) | (0<<OCIE0A) | (0<<TOIE0); // Timer/Counter 1 Interrupt(s) initialization TIMSK1=(0<<ICIE1) | (0<<OCIE1B) | (0<<OCIE1A) | (0<<TOIE1); // External Interrupt(s) initialization // INT0: Off // Interrupt on any change on pins PCINT0-7: Off // Interrupt on any change on pins PCINT8-11: Off MCUCR=(0<<ISC01) | (0<<ISC00); GIMSK=(0<<INT0) | (0<<PCIE1) | (0<<PCIE0); // USI initialization // Mode: Disabled // Clock source: Register & Counter=no clk. // USI Counter Overflow Interrupt: Off USICR=(0<<USISIE) | (0<<USIOIE) | (0<<USIWM1) | (0<<USIWM0) | (0<<USICS1) | (0<<USICS0) | (0<<USICLK) | (0<<USITC); // Analog Comparator initialization // Analog Comparator: Off // The Analog Comparator's positive input is // connected to the AIN0 pin // The Analog Comparator's negative input is // connected to the AIN1 pin ACSR=(1<<ACD) | (0<<ACBG) | (0<<ACO) | (0<<ACI) | (0<<ACIE) | (0<<ACIC) | (0<<ACIS1) | (0<<ACIS0); ADCSRB=(0<<ACME); // Digital input buffer on AIN0: On // Digital input buffer on AIN1: On DIDR0=(0<<ADC1D) | (0<<ADC2D); // ADC initialization // ADC disabled ADCSRA=(0<<ADEN) | (0<<ADSC) | (0<<ADATE) | (0<<ADIF) | (0<<ADIE) | (0<<ADPS2) | (0<<ADPS1) | (0<<ADPS0); unsigned char VL_OCR0A = 0, VL_OCR0B = 0, VL_OCR1A = 0; OCR0A = 0; OCR0B = 0; OCR1A = 0; while(1) { _delay_ms( 100 ); VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } } Т.е. если указать задержку в начале цикла, то светодиод не светится вообще.
      Если задержку убрать - светодиод немного подсвечивает всеми цветами.
      while(1) { _delay_ms( 100 ); // <--- ЗАДЕРЖКА --- VL_OCR0A = VL_OCR0A + 1; VL_OCR0B = VL_OCR0B + 1; VL_OCR1A = VL_OCR1A + 1; if( VL_OCR0A >= 250 ){ VL_OCR0A = 0; } if( VL_OCR0B >= 250 ){ VL_OCR0B = 0; } if( VL_OCR1A >= 250 ){ VL_OCR1A = 0; } OCR0A = VL_OCR0A; OCR0B = VL_OCR0B; OCR1A = VL_OCR1A; } Где я накосячил?
      З.Ы.: Замечаний по поводу оптимизации кода, излишних переменных и п.р. прошу не писать - изощряюсь как могу ибо не пойму почему не работает
    • By LegionKC
      Добрый день.
      Экспериментирую с платой TP4056 и MK ATmega8, конкретнее - пытаюсь собрать простенькое зарядное устройство с выводом параметров при зарядке/разрядке на АЦП МК. Для измерения тока нашел ACS712. Думаю, что получится выводить ток при зарядке (т.е. когда идет питание на TP4056 и нагрузка отключена) и при разрядке (питание выключено, нагрузка подключена). Нагрузка - резистор. Возникла проблема с измерением напряжения на АКБ. Вернее, проблема с отсутствием идей как это сделать. Может какую-нибудь схему делителя напряжения нужно сделать? Прошу помочь советом. Схему из пэинта прилагаю.
      Спасибо.
       

    • By Cheshire Cat
      Здравствуйте, только начинаю изучать программирование мк. Я уже задавал этот вопрос в моих прошлых схемах мне отвечали что-то типа "любой стабилизрованый источник постоянного напряжения", или кидали схему такого источника. Можно назвать мне конкретное устройство? В общем то что я смогу забить в гугл и приписать купить. 

      Я уже больше двух месяцев жду пока мне придут с aliexpress детали для маленького лабараторного блока, но этот вариант может разбиться о кривизну моих рук.  Хочу просто купить такой источник и наконец заняться непосредственно МК. 
×
×
  • Create New...