Bagaimana cara menjadi pengembang perangkat lunak tertanam?

22

Saya ingin beberapa kiat untuk mereka yang ingin menjadi pengembang perangkat lunak tertanam yang baik atau ingin meningkatkan di bidang ini.

Apa yang harus saya pelajari tentang perangkat keras, perangkat lunak?

Buku mana yang paling direkomendasikan? Blog?

Pada akhirnya, bagaimana saya bisa beralih dari hobiis pemula ke profesional hebat?

Daniel Grillo
sumber

Jawaban:

39

Semua jawaban sudah bagus sejauh ini, tetapi saya akan memasukkan dua sen saya.

Berikut adalah pengulangan beberapa tips dengan twist dan beberapa tambahan:

  • Learn C: Bahasa dasar perangkat keras yang masih portabel (terlalu banyak tingkatannya). Jangan hanya mempelajarinya, tetapi menjadi ahli dari semua fitur seperti volatile dan mengapa ini penting untuk menulis driver perangkat.
  • Mulailah dengan kit pengembangan yang bagus seperti Arduino, tetapi seperti yang dikatakan sebelumnya, pelajari arsitektur lain begitu Anda merasakannya. Untungnya ada beberapa papan yang kompatibel dengan Arduino yang dibangun dengan prosesor lain, sehingga Anda dapat menulis ulang desain yang sama pada UC yang berbeda, tidak mengacaukan seluruh desain Anda sambil merasakan sesuatu yang baru.
  • Pada tahap pembelajaran, jangan ragu untuk menemukan kembali roda pada driver perangkat atau potongan kode lainnya. Jangan hanya masukkan kode driver orang lain di sana. Ada nilai dalam menciptakan kembali roda ketika Anda belajar.
  • Tantang diri Anda untuk menulis ulang kode Anda lebih efisien dalam hal kecepatan dan penggunaan memori.
  • Menjadi terbiasa dengan berbagai gaya arsitektur perangkat lunak sistem tertanam. Mulailah dengan pemrosesan interrupt driven / background loop dasar, kemudian naik ke penjadwal latar belakang, kemudian sistem operasi waktu nyata.
  • Dapatkan kontrol sumber yang baik! Saya lebih suka Mercurial sendiri.
  • Bahkan mendaftar untuk beberapa situs hosting sumber kontrol gratis seperti Sourceforge.net atau Bitbucket.org untuk menjadi tuan rumah proyek Anda, bahkan jika Anda satu-satunya yang mengerjakannya. Mereka akan mendukung kode Anda, sehingga Anda tidak perlu khawatir tentang kecelakaan hard drive yang sesekali menghancurkan segalanya! Menggunakan VCS yang didistribusikan berguna, karena Anda dapat memeriksa perubahan pada hard drive Anda lalu mengunggah ke situs host ketika siap.
  • Pelajari alat Anda dengan baik untuk chip apa pun yang sedang Anda kerjakan! Mengetahui bagaimana kompiler menciptakan perakitan adalah penting. Anda perlu mengetahui seberapa efisien kodenya, karena Anda mungkin perlu menulis ulang dalam perakitan. Mengetahui cara menggunakan file tautan dan menafsirkan output peta memori juga penting! Bagaimana lagi yang akan Anda ketahui jika rutinitas yang baru saja Anda tulis itu adalah penyebab terlalu banyak menggunakan ROM / Flash!
  • Pelajari teknik baru dan bereksperimenlah dengan mereka di desain Anda!
  • Asumsikan tidak ada saat debugging. Verifikasi!
  • Pelajari cara memprogram defensif untuk menangkap kesalahan dan memverifikasi asumsi (seperti menggunakan pernyataan)
  • Bangun informasi debug ke dalam kode Anda di mana Anda dapat seperti mengeluarkan konsumsi memori atau kode profil dengan timer atau menggunakan pin cadangan pada UC untuk beralih dan mengukur latensi interupsi pada lingkup O.

Berikut beberapa buku:

Berikut ini beberapa situs web:

  • Guru Tertanam
  • Ganssle Group Jack Ganssle memiliki beberapa kisah sejarah yang indah untuk diceritakan. Baca artikelnya. Namun dia mendapat sedikit khotbah tentang beberapa hal.
  • Embedded.com Info bagus untuk teknik dan tips terbaru dari Ganssle, Barr, dan pakar industri lainnya.
Jay Atkinson
sumber
1
@Adam: Saya suka buku itu! Programmer Pragmatis! Aku tidak percaya aku melupakannya!
Jay Atkinson
1
+1 untuk Mercurial. Saya suka, meskipun saya punya perasaan bahwa kecakapan dengan git akan lebih berharga. Mengenal dasar-dasar dengan SVN cukup penting jika Anda ingin berkontribusi atau menarik dari proyek lain, karena itulah yang banyak dari mereka gunakan.
tyblu
17
  • Ingat, "Tidak ada peluru perak" , jangan jatuh ke dalam perangkap percaya bahwa ada satu alat, metodologi, bahasa atau sistem yang dapat menyelesaikan semua masalah
  • Menjadi ahli dalam C
    • Belajar bertahan tanpa malloc () dan POSIX
  • Jangan terpaku pada satu arsitektur, itu mudah untuk menjadi PIC atau AVR atau fan ARM secara tidak sengaja
  • Bangun barang, debug, buat itu berfungsi. Latihan membuat sempurna
  • Pelajari setidaknya satu sistem kontrol sumber (SVN / git / etc) dan gunakan
  • Selalu siap untuk menguji asumsi Anda. Bugnya biasanya ada pada hal yang Anda asumsikan berfungsi
  • Jangan terlalu bergantung pada debugger, mereka berbeda pada setiap sistem dan keandalan yang berbeda-beda
  • Pikirkan dengan hemat. Saat memecahkan masalah, pikirkan tentang jejak kode, jejak RAM dan biaya perangkat keras

Untuk buku, saya akan merekomendasikan menggali sejarah. Sebagian besar teknik perangkat lunak yang tertanam saat ini berasal dari ujung masa lalu.

Seperti apa pun, berlatihlah setiap hari.

Toby Jaffey
sumber
5
Dari semua hal yang saya pelajari, kontrol versi (saya menggunakan subversi saat ini) adalah hal yang paling berharga bagi produktivitas saya. Kami memiliki sourcesafe oleh Microsoft ketika saya mulai di sini, jadi saya menggunakan solusi yang buruk dan kemudian yang baik.
Kortuk
Saya tidak bisa membayangkan hidup saya tanpa sistem kontrol sumber. Saya menggunakan SVN saat ini juga. Saya tidak tahu bagaimana cara kerjanya sebelum saya tahu SVN.
Daniel Grillo
1
+1 untuk "Bug biasanya ada pada hal yang Anda asumsikan berhasil"
JustJeff
"Belajar hidup tanpa malloc" - Mengapa? Untuk meminimalkan risiko tumpukan / tumpukan tabrakan?
rzetterberg
@rzetterberg Banyak sistem tertanam menghindari penggunaan alokasi memori dinamis karena dapat menyebabkan tumpukan fragmentasi dan ketidakpastian
Toby Jaffey
8

Jawaban lainnya bagus, tetapi perbedaan terbesar antara penghobi dan profesional harus menjadi pola pikir tentang kualitas. Jadi, minta proyek Anda berjalan terus, jangan berhenti ketika Anda 80% selesai dengan sebuah proyek. Ambillah sepenuhnya, buktikan bahwa itu berfungsi, dan dokumentasikan dengan benar.

Pastikan kode Anda dapat dibaca dan dipelihara.

Dan jangan lupa bersenang-senang juga :)

Johan
sumber
7

Terlepas dari yang sudah jelas, seperti belajar C dan mulai dengan beberapa papan pengembang, Anda pasti ingin belajar membaca lembar data mikrokontroler .
Pabrikan menambahkan lebih banyak fitur ke dalam mikrokontroler, yang karenanya menjadi semakin kompleks. Lembar data tidak hanya memberikan karakteristik listrik (yang lebih menarik bagi insinyur elektronik daripada pengembang perangkat lunak), tetapi juga deskripsi terperinci tentang register, peta memori, dll.
Saat membaca lembar data pertama mungkin terlihat menakutkan, tetapi gagal memahaminya dapat menyebabkan sakit kepala yang lebih parah pada fase debugging.

stevenvh
sumber
3

'Tertanam' adalah sedikit istilah yang dimuat ..

Dalam beberapa hal, sistem apa pun yang didedikasikan untuk menjalankan aplikasi tunggal dapat disebut sistem tertanam, asalkan ada beberapa perangkat keras yang dapat dikendalikan. Anda dapat memanggil PPC604 400MHz dengan RAM 2GB yang menjalankan aplikasi java di atas sistem embedded Linux, jika itu terjadi mengendalikan proses melalui modul I / O lokal. Di sisi lain, Arduino yang hanya menjalankan semacam aplikasi jaringan minimal tidak akan menjadi sistem embedded. Tapi mungkin 'tertanam' membuat kebanyakan orang berpikir tentang pengontrol berbasis flash dengan hanya beberapa ratus byte RAM, tidak ada sistem operasi untuk berbicara tentang, dan sejumlah besar peripheral on-chip.

Yang sedang berkata, mungkin dua rintangan terbesar non-embedded programmer biasanya menghadapi pembelajaran embedded system adalah I / O register dan interupsi.

Interupsi sebenarnya mungkin lebih mudah dari dua konsep untuk programmer non-embedded untuk menangani, karena masalah utama dengan ini, konkurensi dan pemrograman berbasis acara, sering ditemui dalam aplikasi mainstream. Apa yang membuat gangguan mengganggu adalah menyadari sensitivitas ekstrim dari suatu sistem terhadap kualitas penanganan interupsi, dan seluk-beluk berurusan dengan perangkat keras untuk menghapus kondisi interupsi dan mengatur untuk yang berikutnya. Dengan GUI, kebuntuan hanya membunuh aplikasi. Dengan penangan interupsi, jalan buntu menyebabkan seluruh sistem Anda terkunci.

Perangkat I / O tampaknya merupakan area yang paling menyebabkan kesulitan. Bagi yang belum tahu, mungkin cukup mengejutkan mengetahui bahwa membaca register ini di sini berpengaruh pada register itu di sana . Menulis 1 untuk menghapus bit. Bit status yang membersihkan diri sendiri ketika Anda membaca register data, dll. Ada begitu banyak kemungkinan dengan perangkat keras I / O sehingga tidak ada aturan umum untuk menghadapinya, kecuali untuk mempelajari cara menemukan dan menafsirkan lembar data perangkat. Menulis driver perangkat untuk port serial akan mengajarkan Anda banyak tentang pemrograman I / O tingkat rendah.

Benar-benar tidak ada pengganti untuk mempelajari hal-hal ini selain menyingsingkan lengan baju seseorang, dan memprogram beberapa bahasa C dan / atau bahasa rakitan lurus pada bare metal. Bahkan sistem embedded berbasis java yang disebutkan di atas pada akhirnya membutuhkan driver perangkat untuk I / O, dan ini berarti pada akhirnya berurusan dengan beberapa C. Pengalaman adalah guru terbaik. Pilih mikrokontroler, baik itu MSP430, TMS320, AVR, ARM, PIC, 68HC11, apa pun, temukan kit eval, dan buat beberapa sistem.

JustJeff
sumber
3

$50tHai$tetapi Anda perlu solder untuk pro mini. Saya bukan penggemar keluarga PIC tetapi Anda mungkin ingin mendapatkan sesuatu di sana sebagai pelajaran sejarah, hal yang sama berlaku untuk 8.051, kedua keluarga masih populer dan sedang digunakan, hanya saja tidak terlalu efisien dan telah dilewati oleh arsitektur lain. Benar-benar belajar ARM dan jempol, mungkin MIPS (yang merupakan pic-32, jangan bingung dengan arsitektur PIC asli yang lebih tua). ARMmite Pro adalah papan ARM entry level yang baik, meskipun Stellaris mungkin juga.

Apa yang ingin Anda pelajari di sini adalah assembler untuk berbagai platform. C. C dan interaksi assembler. Alat berbeda, GCC dan non-GCC. Cara membaca referensi lembar data / pemrogram (dan menyadari bahwa mereka semua memiliki beberapa kesalahan atau dapat menyesatkan, tidak pernah mempercayai mereka, perangkat keras menang atas dokumen) dan cara membaca atau menggunakan skema. Biasanya ini bukan skema rumit. Sejumlah papan yang baik untuk interfacing dalam proyek berarti mereka tidak memiliki sampah di papan, hanya akses langsung ke pin I / O. Tapi itu bukan yang terbaik untuk belajar. Sesuatu seperti Stellarispapan yang menyakitkan untuk proyek memiliki banyak hal menyenangkan di papan untuk belajar tertanam dan belajar meminjam / menggunakan driver atau menulis sendiri dari lembar data. Atmel AVR butterfly juga merupakan papan yang bagus jika masih tersedia, mungkin perlu disolder pada port serial Anda sendiri untuk memprogramnya atau cukup selipkan beberapa kabel di dalam lubang. Apa yang memberi Anda adalah beberapa perangkat yang dapat Anda pelajari untuk diprogram.

Bahkan jika Anda akhirnya melakukan pekerjaan tertanam yang melibatkan penulisan aplikasi menggunakan panggilan SDK atau API di linux atau RTOS (tidak pernah menyentuh perangkat keras atau membaca lembar data), pengetahuan di atas masih akan membuat Anda unggul.

Daniel Grillo
sumber
3

Artikel ini (diterjemahkan secara otomatis dari Bahasa Portugis ke Bahasa Inggris) memiliki tinjauan yang baik untuk mengembangkan karier sebagai pengembang perangkat lunak yang disematkan. Catatan: Yang asli ada di sini .

Itu dimulai dengan menguraikan bidang-bidang pengetahuan yang harus Anda kembangkan:

  1. Pengetahuan: Anda harus mengetahui teori yang terlibat dalam sistem tertanam. Ini berarti perangkat keras dan perangkat lunak. Tidak mungkin menjadi pengembang perangkat lunak tertanam yang kompeten tanpa mengenal arsitektur perangkat keras yang berfungsi.

  2. Keahlian: Anda perlu mendapatkan pengalaman di area tersebut. Perlu latihan. Anda dapat menghias semua mnemonics assembler PIC, tetapi tidak ada gunanya jika Anda tidak bisa mengendarai LED dengan pengetahuan ini.

  3. Sikap: Di atas segalanya, Anda perlu sikap yang akan membuat Anda tumbuh di area ini. Ini sangat dinamis dengan perubahan dan perkembangan yang sering terjadi. Anda harus selalu termotivasi (a) belajar sendiri, menikmati belajar, "mengubah" dan memahami cara kerja berbagai hal. Tanpa sikap seperti itu akan memberi Anda segera. Karena area ini Anda harus sangat, sangat gigih.

Ini kemudian memberikan tips berikut untuk menguasai bidang-bidang ini (dan mengembangkannya dengan teks lebih lanjut, ini hanya judulnya):

  1. Apa yang Anda butuhkan untuk mempelajari perangkat keras (setidaknya)
  2. Apa yang Anda perlukan untuk mempelajari perangkat lunak (setidaknya)
  3. Selain itu, pelajarilah sistem operasi
  4. Anda membutuhkan pelatihan
  5. Jangan berhenti, teruslah belajar dan kembangkan jejaring Anda!
Kevin Vermeer
sumber
1
Terima kasih untuk tautannya! Terjemahan Google tampaknya menunjukkan bahwa itu sangat cocok untuk pertanyaan ini. Namun, kami lebih suka bahwa (1) teksnya dalam bahasa Inggris (kami adalah komunitas berbahasa Inggris , meskipun banyak dari kita setidaknya menggunakan dua bahasa) - Diterjemahkan secara otomatis hanya jika Anda harus (2) jawabannya termasuk ringkasan artikel jika tautannya mati. Saya telah mengedit posting Anda untuk mematuhi panduan ini, dan memberi Anda upvote untuk itu!
Kevin Vermeer
2

Berpikir dua kali sebelum Anda menjadi insinyur perangkat lunak tertanam. Saya memiliki fase dalam karir saya. Saya telah mengembangkan perangkat lunak 5 tahun pertama, daripada pindah ke penjualan / pemasaran, melakukannya selama 15 tahun, mengelola bisnis 100 + M $ dan sekarang saya kembali ke perangkat lunak.

Ketika saya kembali ke perangkat lunak setelah 15 tahun, saya ingat mengapa saya pergi di tempat pertama. Itu susah. Perlu konsentrasi, beberapa ratus baris kode saling menyentuh dan Anda semua harus menyimpannya di memori. Tertanam sangat sulit.

Anda juga perlu memahami diri sendiri. Jika Anda umumnya pria yang cerdas, teliti dan sabar, Anda akan menjadi insinyur yang hebat. Jika Anda kehilangan salah satu dari mereka, Anda akan menjadi rata-rata di terbaik. Berpikir tentang itu. Jika Anda sangat pintar dan tidak sabar, tidak ada artinya karena tidak peduli seberapa pintar Anda, teknik yang baik membutuhkan kesabaran dan perhatian terhadap detail.

Anda juga harus nyaman melihat kode jam sekaligus tanpa berbicara. Saya mengamati bahwa orang-orang dengan keterampilan sosial yang baik menemukan ini tidak tertahankan.

Jika semua ini memeriksa, daripada membaca semua buku hebat itu, lakukan latihan dan Anda akan menjadi insinyur yang hebat .. Semoga beruntung

Frank
sumber
1

Semua orang mengatakan hal-hal hebat. Jadi saya akan memberi Anda saran umum: baca baca baca baca baca baca baca baca!

Baca setiap artikel di http://embeddedgurus.com. Jika Anda tidak mengerti sesuatu, risetlah. Jika dalam penjelasan tentang hal-hal itu Anda menemukan sesuatu yang tidak Anda pahami, bacalah lagi. Saya akan menuju ke posisi perangkat lunak tertanam dan pengalaman saya adalah beberapa proyek profesional selama beberapa tahun terakhir dan banyak membaca. Pengalaman memungkinkan Anda mencoba hal-hal, tetapi membaca memberi tahu Anda apakah hal-hal yang telah Anda coba lakukan sebelumnya, mungkin lebih baik daripada yang Anda bisa. Ini memperkenalkan Anda pada konsep-konsep yang dapat Anda kerjakan dalam situasi apa pun.

Bacalah!

AngryEE
sumber
0

Menjadi seorang ahli dalam C Memahami Pengatur Waktu dan Serial. Anda harus membuat tangan Anda kotor karenanya. Pahami protokol RF, sesuaikan dengan kebutuhan Anda. Jangan hanya membabi buta mencoba kombinasi kode saat debugging. Kode melakukan persis apa yang Anda perintahkan. Baca buku petunjuk dan lembar data lalu buat perubahan jika sesuatu tidak berhasil. Semua yang dikatakan dan dilakukan, satu-satunya cara nyata untuk menjadi seorang ahli adalah berlatih. Terus buat aplikasi. Segera, itu akan menjadi kebiasaan.

Dominic Pritham
sumber