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.
sumber
Jawaban:
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.
sumber
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'
sumber
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. Theavr-gcc
toolchain sudah melakukan hal ini banyak dengan C macro, sehingga Anda tidak pernah pemberitahuan.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:
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 .
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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".
sumber
Anda harus belajar C jika Anda ingin menjadi pengembang tertanam yang serius. Anda juga harus tahu assembler meskipun Anda mungkin akan sangat jarang menggunakannya.
sumber
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.
sumber