Perlu bantuan dalam memilih ukuran Flash dalam mikrokontroler

9

Saya perlu memutuskan memilih ukuran Flash dan RAM untuk suatu proyek. Kontroler mikro yang saya sukai adalah seri TI MSP430. Karena konsumsi daya yang rendah dan biaya seri garis nilai. Namun saya seorang pemula yang sepenuhnya untuk memutuskan persyaratan pengumpulan. Sebagian besar pengalaman pemrograman saya adalah pada sistem berbasis Desktop di mana umumnya ukuran program, RAM dan kecepatan prosesor tidak terlalu menjadi perhatian untuk tugas algoritmik umum.

Saya punya pertanyaan berikut:

  1. Apakah ada pedoman atau praktik standar mengenai memutuskan RAM dan ukuran Flash untuk pengontrol mikro?
  2. Berapa banyak baris kode (C) yang diterjemahkan ke jumlah ukuran Flash pada MCU?
  3. Apakah bahasa rakitan satu-satunya jalan keluar jika ukuran Flash harus dijaga agar tetap minimum?

Mengenai pemilihan Umum pengontrol Mikro untuk suatu proyek, bagaimana para profesional di bidang ini memutuskan untuk memutuskan pengontrol mikro yang paling tepat untuk tugas tersebut? Sumber daya apa yang mereka cari? Pedoman apa yang mereka ikuti?

Daniel Grillo
sumber

Jawaban:

7

Jawaban untuk semua pertanyaan Anda akan tergantung pada apa yang ingin Anda lakukan.

Seperti yang Anda katakan, Anda seorang pemula, jadi saya sarankan Anda menggunakan mikrokontroler terbesar dan hanya mencoba melakukan proyek. Setelah ini, Anda dapat memvisualisasikan berapa banyak kode yang Anda gunakan dan kemudian skala sesuai dengan apa yang digunakan.

Daniel Grillo
sumber
Sepakat. Mulailah dengan sesuatu yang besar, dan kemudian jika perlu turun ke bagian terkecil yang memenuhi persyaratan akhir Anda.
W5VO
"Terbesar" harus memenuhi syarat dengan "Dalam seri yang Anda targetkan". Temukan periferal yang Anda butuhkan, dan kelas kecepatan yang Anda butuhkan, pilih arsitektur / keluarga, dan kemudian kembangkan dengan prosesor terbesar di keluarga itu. Jangan mulai dengan sesuatu dengan Flash 512kB dan RAM 64kB karena ini adalah mikrokontroler terbesar yang dapat Anda temukan; persempit menjadi Cortex-M3 vs AVR vs. PIC18 vs MSP430 (misalnya) sebelum Anda mulai mengkhawatirkan ukuran. Saya menduga bahwa Daniel mengharapkan ini, tetapi hanya berpikir itu perlu dinyatakan di suatu tempat.
Kevin Vermeer
7

Sejauh msp430, itu adalah arsitektur yang bagus, alat yang cukup bagus di luar sana mspgcc dan mspgcc4 dan llvm dalam hal ini. binutils tanpa menambal. Anda bisa mendapatkan launchpad dengan harga di bawah $ 5 dengan harga beli beberapa (akhirnya Anda akan menutup sesuatu atau mencairkannya, mencairkannya, memiliki cadangan, esp pada harga ini) ...

Unduh alat-alatnya, semuanya gratis, tulis beberapa baris kode, pelajari cara menautkannya, lihat seberapa besar binernya, rasakan tertanam, garis kode ke ukuran rom, dll.

Bagaimana pro melakukannya. Hampir setiap cara yang dapat Anda bayangkan:

Beberapa perusahaan mandat turun dari tempat tinggi dan tidak ada yang dapat Anda lakukan selain berhenti. Dan Anda mungkin tidak pernah tahu mengapa platform itu dipilih.

Terkadang kontraktor / pelanggan favorit menentukan platform, terkadang Anda bisa mendidik / bernegosiasi, kadang tidak.

Beberapa orang hanya punya favorit, takut akan hal yang tidak diketahui, apa pun. Alasan yang sama mengapa beberapa orang hanya membeli satu merek mobil, karena ayah saya dulu dan ayahnya dulu, dan itu bisa menjadi alasan keseluruhannya.

Beberapa orang fokus pada alat. Di sini, sekali lagi Anda memiliki orang-orang yang loyal terhadap merek, membatasi diri pada perusahaan penyusun favorit mereka dan target apa pun yang mereka dukung, atau alat sumber terbuka favorit dan apa yang mendukungnya. Sistem operasi tertanam favorit dan batasi untuk target yang mendukung.

Dalam beberapa kasus ini adalah tentang alat tetapi dengan cara yang berbeda, seiring waktu Anda mungkin telah menginvestasikan banyak uang dalam kontrak dukungan tahunan dengan vendor (misalnya lengan atau xilinx atau motorola) dan mungkin Anda menyukai dukungan mereka. dan tidak ingin berubah atau iblis yang Anda tahu lebih baik dari iblis yang tidak Anda miliki. Atau bisa jadi itu karena 5 proyek aktif lainnya di perusahaan menggunakan hal ini dan kami sudah memiliki kontrak dukungan dan akan terus membayar untuk tahun itu demi tahun Anda harus memilih salah satu dari solusi vendor tersebut.

Terkadang ini tentang menyelamatkan milipennies. Bagian ini 1,5% lebih murah daripada bagian itu, membuatnya bekerja dengan bagian ini, jangan pedulikan NRE, pikirkan tentang penghematan manufaktur dalam volume.

Terkadang ini tentang yang negatif. Satu vendor mungkin telah mengacaukan perusahaan Anda dengan satu atau lain cara. Gagal memenuhi pasokan suku cadang yang diiklankan menyebabkan keterlambatan atau pembatalan produk Anda. Umpan dan beralih penipuan (biaya $ 50.000 untuk perangkat lunak tidak termasuk biaya $ 1.200 untuk dongle yang diperlukan untuk membuka kunci lisensi, itu adalah item biaya tambahan. Oh dan itu adalah per pengguna untuk lisensi mengambang). Setelah Anda menandatangani NDA untuk melihat manual referensi programmer atau panduan desain referensi, Anda akan mengetahui betapa mengerikannya teknik mereka dan Anda dapat memilih untuk memasukkan daftar hitam semua produk mereka seumur hidup. Sejarah masa lalu dengan dukungan teknis yang mengerikan. Sejumlah alasan dapat menyebabkan Anda untuk tidak pernah mengizinkan orang penjualan mereka di pintu depan, atau membuat Anda tidak pernah melihat situs web mereka lagi.

Kadang-kadang itu ada hubungannya dengan kinerja, antarmuka, dll. Misalnya, Anda memiliki antarmuka yang menggunakan kawat dan perlu tarik ke atas, mikrokontroler merek XYZ seharga $ 3 per bagian memiliki satu set pin I / O yang dapat digunakan tanpa memerlukan perangkat keras eksternal lainnya, merek ABC memiliki bagian $ 3 yang akan memerlukan transistor dan resistor eksternal untuk membuatnya bekerja seminimal mungkin. Contoh Anda tentang msp430, katakan tentang konsumsi daya, bagian A mungkin hanya mengharuskan pengguna untuk menggunakan satu baterai AAA dan berjalan selama berbulan-bulan, bagian B mungkin membutuhkan dua baterai AAA dan berjalan selama berminggu-minggu.

Kasus yang paling langka dari semua adalah untuk benar-benar melakukan rekayasa, survei semua vendor, lakukan matematika konsumsi daya, harga per unit matematika produk Anda, seberapa besar rom yang kita butuhkan dan berapa frekuensi untuk menjalankan chip, lem logika, terus dan terus. Biasanya seseorang (bos / pelanggan / insinyur senior) mengambil pengalaman bertahun-tahun dan menembak dari pinggul (sering menggunakan satu atau lebih dari yang di atas) untuk memilih jalan (sering jalan yang baik menghemat banyak waktu dalam jadwal dan dolar) dan rekayasa dilakukan sekali untuk menyempurnakan platform yang dipilih.

Rekomendasi pribadi saya adalah fleksibel. Sebagian besar merek / keluarga mikrokontroler dalam beberapa bentuk atau mode dapat diperoleh di papan eval dengan harga di bawah $ 50. Sparkfun, olimex atau langsung dari vendor (ti untuk msp430 atau stellaris, dll). Cobalah satu atau lebih dari masing-masing, rasakan apa yang sama dan apa yang berbeda, alat, pemuat, seberapa sulit untuk dibongkar, dll. Anda mendapatkan dua hal dari ini setidaknya, satu adalah ketika Anda dipaksa menyusuri jalan setapak mulai dari level tinggi atau pelanggan, Anda bisa mulai bekerja, kedua adalah ketika giliran Anda untuk memilih platform, Anda lebih terdidik tentang apa yang ada dan tidak ada di luar sana dan dapat memilih platform (kata yang dimuat) yang tepat berdasarkan masalah untuk diselesaikan.

Bahkan jika Anda tidak atau tidak bisa keluar dan menghabiskan uang sebanyak itu pada perangkat keras, sebagian besar memiliki alat yang dapat Anda unduh (gratis), dalam kasus-kasus seperti microchip Anda sekarang bisa mendapatkan kompiler C (dulu Hi-tech) tetapi harus berlangganan (berikan alamat email Anda). gcc suka atau benci itu akan ada di masa depan Anda, desktop atau tertanam, membuat tangan Anda kotor dan belajar menggunakannya sebagai kompiler silang. Coba llvm juga, itu akan ada untuk sementara waktu dan memberikan gcc beberapa kompetisi serius. Pokoknya tulis atau temukan beberapa emulator, mame punya banyak, gdb punya beberapa, dll. Saya sudah menulis satu bernama thumbulator di github, mode ibu jari ARM saja, mirip dengan korteks-m3 kecuali saya tidak mendukung thumb2 (masih bisa belajar sedikit dan jalankan program pada keduanya sebelum Anda beralih ke perangkat keras saja). Saya menyiapkan emulator msp430 tetapi agak terhenti karenanya. Set instruksi sangat kecil sehingga sebagian besar pekerjaan adalah malam atau mungkin proyek Sabtu. Hal yang sama berlaku untuk PIC, sore yang panjang dan Anda memiliki set instruksi simulator untuk berlatih tertanam. Jika tidak ada yang lain, Anda hanya bisa menulis kompilasi program dan tautan untuk merasakan bagaimana melakukan itu dan seberapa besar akhirnya program itu, bagaimana mengatur program untuk menghasilkan kode yang lebih ketat, dll.

Sejauh C vs assembler, beberapa set instruksi ramah-C dan beberapa tidak. Beberapa kompiler berukuran sedang dan beberapa sangat buruk dan hanya beberapa yang benar-benar bagus (dan biasanya berharga beberapa ribu dolar satu kali atau per tahun untuk digunakan). Seperti kinerja di mana pun jika Anda ingin benar-benar mendorongnya, campuran bahasa tingkat tinggi (katakan saja C) dan assembler mungkin diperlukan. Jadi skill tidak menulis seluruh aplikasi dalam assembler, skill menentukan kode apa yang menyebabkan Anda tidak memenuhi waktu / kinerja dan kemudian mengetahui bagaimana menyelesaikannya baik melalui C, opsi kompiler, memilih kompiler yang tepat, atau menulis assembler.

Saya sarankan Anda tahu assembler untuk semua platform yang Anda pilih untuk digunakan, jika tidak ada pengetahuan lain yang dapat dibaca tentangnya dengan tertanam, saya sarankan Anda membongkar sering (sambil mencari tahu di mana masalah kinerja Anda). Banyak platform yang diperlukan atau diinginkan oleh assembler untuk kode boot up.

Jika Anda ingin menghemat 10-20% pada harga per unit dan ingin membeli mikrokontroler yang lebih murah / lebih lambat atau osilator, atau bagian flash 32Kb bukan bagian flash 64KB dan dapat menutupi biaya pengembangan dengan volume penjualan, dan mungkin daftar panjang hal-hal lain yang mungkin Anda pilih untuk ditulis semuanya dalam assembler, cepat, daya rendah, biaya rendah, pelanggan yang bahagia.

Tergantung pada latar belakang Anda sejauh ini, mungkin Anda tidak perlu khawatir tentang menulis di semua assembler dan mungkin tentang aspek teknik listrik tertanam dengan mikrokontroler, skema membaca, mengetahui apa kolektor terbuka, tri state, push pull, pwm, adc, dac, dan daftar panjang istilah lain dan cara menggunakannya. bit banging i2c, spi, mdio, dallas one wire, dll. Menggunakan lingkup sebagai debugger perangkat lunak. Meskipun cakupan dapat menyoroti hal-hal untuk Anda hari ini (item biaya tambahan), Anda harus dapat melihat i2c dan spi dan beberapa protokol lain tanpa highlight.

Saya juga merekomendasikan bahwa untuk setiap platform yang Anda mainkan, keluarlah dari kotak pasir orang lain (misalnya lingkungan ide / pemrograman Arduino). Tulis kode boot yang mengambil prosesor dari reset ke program utama () Anda, lakukan sebanyak yang Anda bisa untuk memahami cara memuat / memprogram flash ke titik yang mungkin melibatkan penulisan loader Anda sendiri meskipun rak yang ada sana. Ini semua tentang pendidikan pribadi, semakin banyak yang Anda tahu dan dapat menarik keluar dari saku belakang Anda dan menggunakan lebih banyak kontrol yang akan Anda miliki atas karier Anda dan semakin banyak angka nol di akhir angka pada gaji Anda.

Apa pun yang Anda lakukan, JANGAN, coba pelajari x86 sebagai assembler pertama Anda di desktop, pilih apa saja dan lintas kompilasi dan simulasi, ARM, THUMB, MSP430, PIC, AVR, bahkan 6502, 8051. x86 adalah instruksi yang mengerikan mengatur dan sebagai hasilnya telah berubah dan dibentuk dalam banyak cara, microcoded, tidak microcoded, multi-core, terus dan terus. Pertahankan x86 ke bahasa tingkat tinggi dan sistem operasi yang besar. Gunakan untuk editor teks Anda dan kompiler dan targetkan hal lain.

Maaf atas jawaban panjangnya ... semoga bermanfaat.

old_timer
sumber
hmmm, kalau pertanyaannya bagaimana pro memilih ukuran flash. terkadang menulis beberapa kode yang menyerupai solusi, kompilasi dan lihat seberapa besar itu. Jika sebuah rtos akan digunakan, ambil beberapa sampel dan ukur ukurannya dan tambahkan faktor fudge untuk kode yang akan Anda tambahkan. Banyak yang berhubungan dengan pengalaman pribadi dalam memperkirakan. Seringkali Anda dapat memilih untuk memperkirakan lalu menggandakannya untuk berjaga-jaga dan atasan Anda dapat menggandakan perkiraan Anda sehingga ia tidak mendapat masalah dan seterusnya. Dan itu bisa membantu karena sekali diterapkan Anda dapat beralih ke bagian yang lebih kecil dan menjadi pahlawan dengan tabungan.
old_timer
1
Meskipun panjangnya, saya menemukan jawaban ini sangat bagus
Sarrk
3

Cara terbaik untuk menentukan persyaratan flash / RAM untuk proyek Anda adalah dengan membuat prototipe dan mengukurnya.

Menerapkan algoritma inti pada PC dan menghitung ukuran kode objek dan penggunaan RAM. Ini akan memberi Anda gambaran kasar untuk dikerjakan.

Jangan lupa menambahkan lebih banyak ke anggaran Anda jika Anda mengandalkan fitur sistem operasi seperti stdio atau manajemen memori.

Tidak ada cara langsung untuk membandingkan Lines of Code dengan ukuran kode yang dikompilasi. Tapi, Anda dapat membandingkan arsitektur prosesor dalam hal kepadatan kode.

Toby Jaffey
sumber
3

Saya pikir cara terbaik untuk mendapatkan "perasaan" tentang apa persyaratan Anda, dalam hal ini dalam hal memori adalah untuk mendapatkan beberapa sampel MCU, memprogramnya dan melihat berapa banyak memori yang digunakan. Bahkan, itu akan tergantung pada kompiler yang digunakan. Jika ini adalah pertama kalinya Anda memprogram MCU, jangan terlalu repot dengan spesifikasinya. Cukup pilih satu dengan banyak memori, banyak periferal, dll. Dengan begitu Anda dapat belajar banyak hanya dari satu MCU. Ketika Anda membuat proyek pertama Anda dengan MCU itu, Anda akan memiliki gagasan memori yang lebih baik yang Anda butuhkan untuk proyek selanjutnya.

MCU yang paling tepat untuk suatu tugas? Berapa banyak saluran ADC yang Anda butuhkan? Bagaimana dengan DAC? Apa yang lebih penting dalam aplikasi Anda: kinerja atau daya rendah? Apakah itu pertanyaan yang harus Anda jawab ketika memilih MCU tertentu.

msr
sumber
3

Pilih mikrokontroler yang memiliki set periferal yang Anda butuhkan. Mungkin akan ada keluarga micros yang memiliki perangkat yang sama / serupa tetapi jumlah RAM dan Flash yang berbeda. Mulailah dengan chip dengan RAM / Flash terbesar. Setelah memiliki prototipe yang berfungsi, Anda dapat drop down ke mikro yang lebih murah jika program Anda cocok.

Robert
sumber
0

Profesional sejati tidak memilih mikrokontroler secara terpisah, mereka menjalankan proyek untuk keuntungan maksimum. Tergantung pada kriteria proyek yang mungkin menyebabkan mikrokontroler untuk dipilih yang sepertinya terlalu mahal, tetapi kebetulan cocok dengan keahlian yang tersedia, alat, perpustakaan, dll. Jangan membuat keputusan yang terisolasi, ingat gambaran besar dalam pikiran , terutama jumlahnya (biaya pengembangan + biaya produksi)!

Sebagian besar produsen mikrokontroler menawarkan rentang chip, dengan ukuran flash salah satu parameter yang berbeda di antara berbagai chip. Pilihan 'aman' awalnya adalah memilih chip dengan ukuran flash terbesar, sehingga Anda dapat memperkecil jika aplikasi cocok dengan chip yang lebih kecil. Tetapi aplikasi cenderung tumbuh agar sesuai dengan semua ukuran yang tersedia (dan banyak lagi).

Ukuran flash IME tidak lagi menjadi faktor biaya besar, bahkan jumlah pin kurang dari faktor, ukuran RAM tampaknya menjadi pendorong biaya terbesar.

Wouter van Ooijen
sumber