Bahasa pemrograman untuk insinyur elektronik

22

Saya seorang mahasiswa Teknik Elektronika dan Komunikasi, sebelum saya kuliah, saya tertarik pada pemrograman dan aplikasi komputer. Saya telah fokus mendesain aplikasi Windows dan mempelajari tekniknya, tetapi sekarang, saya merasa ini tidak berguna di bidang saya ... Saya tidak perlu belajar segalanya tentang ilmu komputer dan mengembangkan perangkat lunak! (Apakah saya benar tentang ini?)

Saya tahu VB .Net, C # dan C ++. Saya punya banyak waktu dalam liburan saya, jadi saya ingin mempelajari lebih dalam tentang "bidang elektronik" secara terprogram. Jadi apa yang akan Anda rekomendasikan untuk dipelajari atau difokuskan?

Saya ingin bahasa-bahasa yang digunakan dalam pemrograman Microcontrollers dan sirkuit terintegrasi lainnya. Apakah C ++ cukup atau saya juga harus menguasai C? Tolong ceritakan pengalaman Anda.

Siraj Muhammad
sumber
3
"Solder" Atau lebih serius, plain C cukup tradisional untuk alat pendukung, meskipun python agak trendi saat ini.
Chris Stratton

Jawaban:

29

Ya, hampir pasti merupakan langkah yang baik untuk belajar menggunakan C sebaik mungkin (C ++ akan memberi Anda titik awal yang bermanfaat, meskipun sebagai catatan leftaroundabout , masih akan ada banyak hal yang harus diambil, terutama perbedaan antara pengkodean untuk sistem tertanam kecil dibandingkan dengan menulis untuk sesuatu seperti Windows) mengingat itu di mana-mana.

Sebagian besar mikrokontroler di bawah ukuran tertentu (misalnya PIC, AVR, MSP430, dll) menggunakan C (atau assembler) karena ada banyak kualitas tinggi (versi gratis dan $$ - misalnya banyak kompiler komersial didasarkan pada kompiler GCC gratis) kompiler C tersedia .
Anda mendapatkan bahasa lain seperti JAL yang luar biasa untuk PIC (penulis asli Wouter Van Ooijen yang menjadi anggota di sini), PICBASIC, varian Ada, tetapi karena popularitas dan jumlah kompiler yang tersedia, saya akan mengatakan C adalah bahasa pilihan untuk kebanyakan. Walaupun ini tentu saja tidak berarti itu adalah bahasa terbaik, menggunakan bahasa yang paling populer hadir dengan keuntungan yang jelas (dokumentasi, dukungan, portabilitas, kolaborasi, dll.)
Untuk mik 32-bit yang lebih kompleks dan lebih besar seperti banyak varian ARM, ada juga C ++ dan kompiler lain tersedia.

Saya akan melompat masuk dan mengambil beberapa papan pengembangan dan mendapatkan coding. Anda dapat memilih mikro 8-bit low-end seperti PIC16F (banyak starter kit pada Microchip Direct)
Di tengah-tengah kisaran mikro 16-bit seperti PIC24, dan juga ARM linux C / C ++ / embedded yang sejenis - STM32F4 ARM Cortex M4 Discovery adalah papan dev yang sangat murah yang mungkin layak untuk diraih.
Pada logika yang dapat diprogram dan bahasa deskripsi perangkat keras (HDL - dua besar adalah Verilog dan VHDL), mungkin juga layak untuk mendapatkan papan dev FPGA atau CPLD dari Diglent atau serupa.

Jika Anda tidak ingin menunggu papan dev, Anda dapat mengunduh MPLAB atau MPLABX dan menggunakan simulator yang sangat baik untuk mencoba tangan Anda pada pengembangan PIC. Hal yang sama juga berlaku untuk alat-alat lain, misalnya Anda dapat mengunduh Xilinx ISE Webpack secara gratis dan mencoba HDL dan desain logika yang dapat diprogram.

Oli Glaser
sumber
9
PIC mungkin murah, tetapi dengan risiko memulai perang api, saya akan berpendapat bahwa menggunakan PIC sebagai alat pembelajaran mengajarkan Anda untuk memprogram PIC daripada mengajarkan Anda untuk memprogram mikrokontroler tujuan umum. Untuk ini MSP, AVR (Arduino), Low end ARM Cortex atau bahkan prosesor 8051 yang termasyhur akan memberikan keterampilan yang lebih mudah dipindahtangankan.
u
Terima kasih banyak ... ini sangat berguna. Tetapi untuk merangkum jawaban Anda: Apa yang saya butuhkan saat ini adalah terus bekerja pada C ++ dan menguasai C, mempelajari Verilog atau VHDL atau keduanya, dan meraih beberapa papan dev untuk berlatih atau hanya menggunakan simulator tersebut sebagai permulaan.
Siraj Muhammad
1
@ SirajMuhammad - Ya, itu saja, selain belajar Verilog dan VHDL mungkin tidak diperlukan, karena mereka biasanya dapat digunakan bersama dalam suatu desain (jadi misalnya Anda dapat menggunakan prosesor inti lunak yang dirancang oleh orang lain di VHDL, di desain Verilog Anda, dan itu akan berfungsi dengan baik) jadi pilih satu saja.
Oli Glaser
4
@Ian - Saya tidak menyarankan itu memiliki untuk menjadi PIC, itu hanya sebuah contoh (maka "seperti PIC") Dalam kasus manapun, jika Anda pemrograman di C, saya tidak berpikir ada banyak dari keseluruhan perbedaan antara semua micros kecil di luar sana. Tentu saja untuk benar-benar mengetahui satu mikro dalam (perakitan dan semua) berguna, tetapi untuk memulai pada tingkat yang lebih tinggi hal-hal akan terlihat sama, hanya alat yang berbeda. Saya pikir perlu mencoba beberapa sebelum berkomitmen untuk apa pun.
Oli Glaser
2
"Tidak boleh terlalu sulit jika kamu sudah tahu C ++"? Saya tidak akan setuju tentang itu, seseorang yang tahu "VB. Net, C♯ dan C ++" mungkin menggunakan yang terakhir dalam gaya RAII yang berorientasi objek tingkat tinggi dan mungkin perlu waktu untuk memahami dengan baik pada manual manajemen memori.
leftaroundabout
23

Pelajari C, dan dapatkan papan pengembangan mikrokontroler yang murah, seperti MSP430 atau ARM Cortex, dan setidaknya tulis dan muat beberapa program C.

Saya memiliki gelar ilmu komputer dan latar belakang pengembangan perangkat lunak, sebagian besar pemrograman C ++ untuk game dan sekarang game dan aplikasi iOS, tetapi pekerjaan terakhir saya adalah pertunjukan semi-pro EE yang dimulai dengan melakukan banyak pemrograman firmware untuk sistem ARM Cortex M3 , dan kemudian berakhir dengan saya belajar bagaimana melakukan beberapa desain sirkuit dasar dan tata letak papan dan merancang beberapa papan sederhana. Jadi pada dasarnya saya harus menghadapi masalah menggunakan bahasa pemrograman terbaik untuk menjembatani desain perangkat keras / perangkat lunak sebagai seseorang yang bertanggung jawab untuk kedua ujungnya.

C benar-benar bahasa yang perlu Anda ketahui. Sangat mudah bagi orang yang memprogram dalam C ++ dan tidak pernah benar-benar harus membatasi diri pada set fitur C untuk mengatakan "itu hal yang sama" tetapi tidak. Terutama cara C ++ telah mengembangkan dan mengumpulkan fitur-fitur, dan cara para programmer C ++ menggunakan fitur-fitur itu, itu benar-benar hal yang jauh berbeda untuk bekerja pada aplikasi C yang cukup besar dibandingkan dengan aplikasi C ++. Firmware SDK Anda akan berupa sekelompok pustaka C, apa pun yang cocok dengan MCU akan menjadi pustaka C, OS apa pun yang masuk akal pada MCU akan ditulis dalam C, dll. Dll.

Yang mengatakan, karena banyak dari alat MCU di luar sana akhirnya menggunakan GCC sebagai kompiler mereka, Anda hampir pasti akan memiliki kompiler C ++ yang tersedia jika Anda menggunakan keluarga MCU yang layak. Tetapi Anda harus sangat berhati-hati dengan fitur yang Anda gunakan, terutama hal-hal dari perpustakaan standar, karena sangat mudah berakhir dengan biner yang terlalu besar untuk dipasang di perangkat Anda. Saya pikir ada kasus yang baik untuk dibuat menggunakan C ++ pada perangkat yang disematkan, C ++ memiliki beberapa fitur bagus yang memiliki sampah atau tanpa ukuran atau penalti kecepatan, Anda hanya perlu tahu apa yang Anda lakukan dan menulis kode seperti itu lebih jauh pada ujung C-style dari spektrum daripada ujung STL dari spektrum dalam hal penggunaan fitur pintar.

Jangan terlalu memperhatikan orang yang mengatakan Anda dapat menggunakan Lua atau Python pada MCU dengan penerjemah yang disematkan bla, bla. Itu benar, saya sudah melakukannya dan itu menyenangkan, tetapi saat ini lebih untuk proyek mainan dan hal-hal yang muncul di Hack a Day. Saya pikir kita akan melihat lebih banyak hal seperti itu karena Hukum Moore diterapkan tanpa henti bahkan pada prosesor terkecil, ini adalah sesuatu yang terjadi dengan game di mana dulu ada banyak perakitan, kemudian mereka bertahan dengan C dan C ++ lebih lama daripada orang lain, dan sekarang semuanya sangat cepat, dan produktivitas pengembang sangat penting sehingga banyak pengembangan dilakukan dengan bahasa tingkat tinggi yang tertanam atau dalam bahasa tingkat tinggi secara langsung. Meski begitu, itu akan beberapa tahun sebelum Anda melihat perusahaan mempekerjakan programmer firmware dengan latar belakang Python dan Lua.

Jangan terlalu banyak menghabiskan waktu untuk perakitan. Tidak buruk untuk terbiasa dengan konsep-konsep, tetapi tidak mungkin Anda akan menemukan diri Anda melakukan banyak hal, jika ada program perakitan. Ada seperti kebijaksanaan konvensional ini dengan permainan dan tertanam bahwa itu "baik untuk diketahui" perakitan, sering diulang oleh orang-orang yang tidak benar-benar bekerja di bidang itu. Tetapi pada kenyataannya sangat tidak mungkin Anda akan menulis perakitan apa pun, pernah, dan jika Anda melakukannya mungkin hanya akan ada beberapa baris untuk optimasi atau sesuatu dengan perangkat keras Anda hanya tidak memiliki API untuk (tetapi Anda akan setelah Anda menulis satu yang membungkus beberapa baris perakitan). Saya telah bekerja di beberapa permainan dan proyek desain papan / firmware dan jumlah total jalur perakitan yang saya tulis untuk proyek komersial mungkin di kalangan remaja. Saya t'

Suboptimus
sumber
1
Layak untuk mengatakan bahwa beberapa jalur perakitan Anda kemungkinan akan berada dalam pernyataan inline perakitan ( asm()), tersemat dengan baik dalam kode C. Ini adalah kombinasi yang unggul dalam segala hal. Tingkat tinggi tetapi ringkas dengan kemiringan yang sesekali masuk ke perakitan ketika, misalnya, waktunya harus tepat. The avr-gcctoolchain sudah melakukan hal ini banyak dengan C macro, sehingga Anda tidak pernah pemberitahuan.
Alexios
9
Mungkin lebih penting untuk dapat MEMBACA majelis daripada harus menulisnya. Ini memungkinkan Anda untuk memahami apa yang dikatakan kompiler kepada mikro untuk dilakukan, dan dalam kasus yang sangat jarang dapat dikenali ketika kompiler salah. Anda juga perlu memiliki pemahaman perakitan untuk mendapatkan hasil maksimal dari alat debug Anda dan menggunakan fungsionalitas satu langkah yang mereka sediakan.
u
1
Setuju dengan itu. Saya pikir salah satu latihan terbaik untuk calon programmer adalah menulis kompiler bahasa mainan dan generator kode yang setidaknya menangani fungsi, array dan struct untuk mempelajari seperti apa bentuk stack frame dan bagaimana elemen dasar dari bahasa pemrograman terlihat dalam perakitan. .
Suboptimus
3
@Ian - Mampu membaca assembler tidak berguna jika Anda tidak tahu bagaimana menulisnya. Anda perlu membacanya dan membandingkannya dengan apa yang akan Anda lakukan jika Anda menulisnya.
Rocketmagnet
2
@Rocketmagnet - Anda tidak keluar untuk memeriksa apakah kompiler telah menghasilkan implementasi perakitan yang paling efisien. Syaratnya adalah Anda memiliki kemampuan untuk membaca assembler yang dihasilkan dan memeriksa apakah logika kode yang diimplementasikan sesuai dengan niat Anda. Ini sama dengan menggunakan bahasa manusia lainnya. Saya bisa membaca dan mengerti jauh lebih banyak bahasa Prancis, Jerman, dan Latin daripada yang bisa saya tulis atau tulis.
uɐɪ
10

Saya setuju dengan semua orang bahwa Anda harus sangat kompeten dalam C.

Saya juga merekomendasikan belajar setidaknya satu bahasa assembly juga. Melakukan ini akan membuat Anda seorang programmer C yang jauh lebih baik. Anda perlu tahu apa yang terjadi di bawah tenda, dan ini jauh lebih benar di dunia tertanam daripada di dunia PC.

Memahami assembler yang dihasilkan C Anda akan membuat Anda menulis C yang lebih optimal dalam hal kecepatan dan kekompakan. Kode lebih cepat berarti:

  • Anda dapat menggunakan MCU yang lebih murah dan melemahkan pesaing.
  • Anda dapat menurunkan laju jam untuk meningkatkan kepatuhan EMC.
  • dalam aplikasi berdaya rendah, MCU dapat menghabiskan lebih banyak waktu dalam tidur, yang secara langsung menyebabkan peningkatan usia baterai.

Lebih banyak kode ringkas berarti Anda dapat menggunakan MCU yang lebih murah dengan memori lebih sedikit. Atau punya ruang untuk lebih banyak fitur.


Bahasa lain yang mungkin Anda pertimbangkan untuk belajar adalah Verilog . Ini adalah bahasa deskripsi perangkat keras, dan sangat berbeda dengan C, tidak hanya dalam tampilannya, tetapi juga dalam fungsinya. Verilog akan membuka jalan untuk mengambil keuntungan dari chip yang sangat kuat seperti Cypress PSoC3 dan 5 . Ini adalah mikrokontroler dengan perangkat keras analog dan digital yang dapat diprogram ulang, yang memungkinkan Anda melakukan beberapa hal luar biasa yang sangat sulit dilakukan dengan MCU lainnya. Anda juga dapat melakukan desain FPGA .

Roket
sumber
Apa yang Anda maksud dengan "satu bahasa assembly"? Saya tahu bahwa ada bahasa yang disebut Majelis, apakah ada cabang atau sesuatu seperti itu? Bisakah Anda sebutkan? Dan terima kasih banyak atas jawaban Anda.
Siraj Muhammad
4
Setiap jenis CPU atau MCU memiliki bahasa rakitan sendiri dengan instruksi yang berbeda. Mereka semua sangat mirip, tetapi dengan perbedaan penting. Pelajari bahasa assembly untuk MCU apa pun yang Anda gunakan.
Rocketmagnet
1
Akan mengatakan ini dengan tepat. C dan Assembly adalah yang paling banyak digunakan dalam Rekayasa Elektronika, karena Anda biasanya berurusan dengan hal-hal tingkat rendah. Berorientasi Objek tidak terlalu dimanfaatkan dengan baik, jenis pemikiran tingkat rendah yang berasal dari C / Majelis juga akan berlaku untuk apa pun yang Anda kerjakan.
Muz
9

Sebagai MSEE yang telah bekerja di industri Pertahanan selama 8 tahun, saya dapat memberi tahu Anda bahwa memahami cara memprogram dengan baik di LabVIEW (bahasa aliran data yang diketik dengan ketat) berarti bahwa Anda tidak akan pernah kekurangan pekerjaan.

LabVIEW dimulai sebagai bahasa pemrograman untuk insinyur perangkat keras, Anda dapat melihat ini dalam kenyataan bahwa kode tersebut sangat mirip dengan diagram rangkaian. Namun, selama 25 tahun terakhir, LabVIEW telah berkembang menjadi bahasa lengkap fitur lengkap dengan dukungan untuk Orientasi Objek dan multi-threading. Bahkan, saya berpendapat tidak ada bahasa pemrograman lain, berbasis teks atau sebaliknya, yang lebih mudah untuk memprogram aplikasi multi-threaded daripada LabVIEW; ini sebagian besar karena paradigma aliran data. Karena jumlah inti CPU terus meningkat, LabVIEW akan menjadi semakin relevan sebagai bahasa tujuan umum.

Manfaat lain dari mengetahui LabVIEW adalah Anda hanya berjarak sangat dekat dengan pemrograman FPGA menggunakan modul LabVIEW FPGA yang mengambil kode LabVIEW Anda dan mengubahnya menjadi VHDL di belakang layar sebelum diteruskan ke kompiler Xilinx. Anda juga dapat menggunakan keterampilan LabVIEW Anda untuk beralih ke pemrograman kode Real-Time melalui Modul Real-Time LabVIEW yang menggunakan VxWorks atau Phar Lap.

Catatan: Saya adalah Pengembang LabVIEW Bersertifikat.

masukkan deskripsi gambar di sini

SiegeX
sumber
5
Semua LabVIEW produksi yang pernah saya lihat terlihat lebih seperti ini: thedailywtf.com/Articles/Labview-Spaghetti.aspx Saya tidak ragu ada pasar kerja yang kuat bagi mereka yang ingin mempertahankan kode tersebut.
markrages
@markrages Saya telah diminta untuk memelihara dan / atau memperluas kode yang hampir sama buruknya mungkin lebih buruk karena ada panggilan VI dan global yang dinamis juga. Masalah ini adalah pedang bermata dua yaitu LabVIEW. Di satu sisi mereka memasarkannya sebagai bahasa yang bisa diprogram insinyur, namun tanpa dasar yang kuat dalam arsitektur perangkat lunak, Anda akhirnya mendapatkan kode seperti ini. Untungnya, NI telah cukup mengatasi masalah ini dengan LabVIEW 2012 dengan menyediakan templat yang ditulis & dikomentari dengan baik untuk arsitektur dimulai dengan mesin negara sederhana ke kerangka aktor berbasis OOP yang kompleks.
SiegeX
@ markrages Masalahnya ada dua. Satu, manajemen memberi para insinyur pelatihan yang cukup untuk menjadi berbahaya. Saya akan mengatakan 9/10 programmer LabVIEW yang saya temui di perusahaan saya yang memiliki pelatihan hanya mengambil dua kursus dasar pertama yang pada dasarnya mengajarkan Anda hanya sintaks. Kedua, LabVIEW telah menjadi bahasa yang kaya fitur yang menyaingi bahasa modern apa pun saat ini karena manajemen grafis menganggapnya mudah. Managemnt tidak akan pernah menugaskan insinyur perangkat lunak untuk merancang sirkuit menengah ke kompleks, tetapi mereka tidak memiliki masalah melempar EE pada masalah perangkat lunak yang kompleks jika mereka "tahu LabVIEW"
SiegeX
@markrages: Tepat ketika saya diingatkan tentang mengapa saya menyukai LabVIEW, saya melihat komentar Anda dan ingat mengapa saya membencinya. Oh, jam-jam frustrasi semua kembali sekaligus.
Jonny B Baik
6

Jika Anda ingin melakukan pemrograman mikrokontroler level rendah, maka Anda harus merasa nyaman dengan pemrograman assembly-langauge (arsitektur yang lebih berbeda semakin baik), dan ya, Anda akan menggunakan C lebih banyak daripada menggunakan C ++.

Untuk pekerjaan teknik umum, bahasa yang berorientasi matematika seperti Matlab (juga Scilab dan GNU Octave) akan umum digunakan untuk pemodelan dan pembuatan prototipe.

Selain itu, banyak IDE untuk perangkat lunak dan perangkat keras dapat skrip, biasanya menggunakan TCL atau LUA, sehingga beberapa keakraban dengan bahasa skrip pada umumnya (juga Perl, Python, PHP, Javascript, dll.) Akan berguna.

Untuk desain perangkat keras, Anda memerlukan keterampilan Verilog dan / atau VHDL.

Dave Tweed
sumber
6

Apakah C ++ cukup? Mungkin.

Harap diingat bahwa C digunakan dalam sesuatu seperti 90-99% dari semua MCU: di luar sana, jadi C adalah suatu keharusan pada resume Anda.

Tetapi karena Anda adalah pria tingkat tinggi, Anda bisa mulai bermain dengan Arduino: sejak mereka diprogram dengan C ++ yang diperkecil, dan itu akan memberikan gambaran kasar apa yang dapat dilakukan C ++ di dunia MCU saat ini.

Johan
sumber
3

Untuk mikrokontroler (dan saya hanya akan membahas mikrokontroler), saya pikir C adalah bahasa entri yang jauh lebih baik daripada C ++. Assembly akan menjadi langkah berikutnya, fantastis untuk membantu Anda memahami bagaimana kompiler C Anda mengacaukan Anda, membuat bug, mencuri kutu jam, dll., Dan memeras kinerja maksimal dari platform Anda. Ini semua dengan asumsi Anda berbicara tentang mikrokontroler - bukan arduino, BASIC Stamp, atau platform lain yang melibatkan mikrokontroler terbungkus.

Sulit mengatakan apa yang berguna untuk "bidang Anda" - dan menyarankan bahwa sebagai siswa Anda mungkin belum benar-benar mengetahui bidang Anda !! - tapi saya pikir set bahasa Anda tampaknya cukup masuk akal dan Anda akan menemukan diri Anda menggunakannya berulang-ulang. Paling tidak, memiliki pegangan yang baik pada satu bahasa terstruktur membuat yang berikutnya lebih mudah, tapi saya pikir Anda akan selalu menemukan keterampilan pemrograman windows Anda bagus untuk dimiliki di saku Anda.

Scott Seidman
sumber
2

Anda bisa mempelajari C dan jenis kode assembler yang dihasilkan oleh pernyataan C jika Anda bekerja dengan prosesor, tetapi Anda juga harus belajar sendiri cara menggunakan shell baris perintah Unix seperti bash dan alat-alat yang menyertainya seperti sed, ed, awk, vim / vi, find, tar, gzip, ... serta Python yang dapat Anda gunakan pada banyak platform dan merupakan cara yang baik untuk "menyelesaikan sesuatu".

Paddy3118
sumber
2

Anda harus belajar C jika Anda ingin menjadi pengembang tertanam yang serius. Anda juga harus tahu assembler meskipun Anda mungkin akan sangat jarang menggunakannya.

mjh2007
sumber
0

Pertama saya akan mendefinisikan insinyur elektronik berarti seseorang yang terlibat dalam desain perangkat keras dari firmware hingga desain papan dan ke desain chip. Dalam beberapa kasus Anda akan melakukan firmware, seperti yang disebutkan di atas, Anda akan memerlukan "C". Perangkat lunak yang lebih dalam menjadi sekadar alat, memahami beberapa konsep komputer dalam bahasa pelengkap dari C / C ++ ke bahasa seperti Lisp akan lebih penting daripada spesifik. Anda akan memerlukan perangkat lunak untuk mendukung upaya desain Anda tetapi itu tidak diutamakan untuk memahami batasan mendasar dari apa yang dapat dilakukan dalam implementasi fisik. Desain digital BUKAN Verilog / VHDL bahkan jika desain dinyatakan dalam bahasa-bahasa tersebut. Ke dalam desain penuh kustom dan in-silico Anda akan melihat Lisp seperti bahasa dan bahasa C-fungsional.

placeholder
sumber