Pindah dengan mecrisp-stellaris dan embello

dalam episode terakhir, saya menganjurkan sedikit untuk mikrokontroler menjadi platform pengembangan yang masih layak, bukan hanya untuk industri di mana biasanya terlihat hari ini, tetapi juga untuk peretas . Saya bahkan mungkin menipu Anda untuk mendapatkan beberapa potong perangkat keras murah. Kali ini, kita akan mendapatkan sistem keempat yang diatur pada perangkat keras itu, dan menjalankan “Hello World” wajib dan memimpin Blinky. Tetapi kemudian kita juga akan berenang ke salah satu fitur yang memaksakan sangat rapi pada mikrokontroler: multitasking mudah.

Bekerja!

Perangkat keras

Mecrisp-Stellaris ke sejumlah besar mikrokontroler lengan, tetapi saya akan fokus di sini pada chip STM32F103 yang tersedia untuk sedikit uang dalam bentuk salinan generik maple mini, sering disebut “papan sistem minimum STM32F103” “Atau” pil biru “karena faktor bentuk, dan fakta bahwa dulu ada yang merah untuk dijual. Mikrokontroler di papan dapat berjalan pada 72 MHz, memiliki 20 KB RAM dan flash 64 atau 128 kb. Ini memiliki banyak pin, yang hanya digital adalah 5 v toleran, dan memiliki semua periferal mikrokontroler normal. Ini bukan yang paling hemat daya, dan itu tidak memiliki unit floating-point atau DAC, tetapi itu adalah desain lama yang kokoh yang tersedia untuk uang yang jauh lebih sedikit daripada yang seharusnya.

Programmer terhubung, daya melalui USB
Keajaiban serupa dari produksi massal bekerja untuk programmer yang Anda perlukan untuk mem-flash chip. Setiap klon ST-Link v2 akan berfungsi dengan baik. (Ironisnya cukup, perangkat keras di dalam programmer hampir identik dengan target.) Akhirnya, mengingat itu berjalan seperti pada shell interaktif, Anda akan memerlukan koneksi serial ke papan STM32. Itu mungkin menunjukkan adaptor USB / serial.

Seluruh pengaturan ini tidak akan menelan biaya lebih dari makanan cepat saji, dan programmer dan USB / serial adaptor adalah hal-hal yang ingin Anda miliki dalam kit Anda, jika Anda belum melakukannya.

Anda dapat menaikkan papan langsung melalui berbagai pin 3.3 dan GND yang tersebar di sekitar papan, atau melalui port micro USB atau pin 5V di papan target. Dua opsi terakhir melewati regulator 3,3 V sebelum bergabung dengan 3,3 pin. Semua pin saling berhubungan, jadi yang terbaik jika Anda hanya menggunakan satu catu daya sekaligus.

Firmware: Sistem Keempat

Pergi dapatkan paket mecrisp edisi hackaday-edisi super dari GitHub. Termasuk dalam direktori “ROMS” adalah sistem sebagainya yang akan bekerja untuk demo di sini. Saya telah dimuat di basis yang terhormat dari pustaka EMBELLO ke depan luar biasa, menyediakan hal-hal seperti konfigurasi GPIO yang mudah, fungsi penundaan, dan sebagainya. Ada banyak lebih banyak perpustakaan yang tersedia, dan kami akan memeriksanya lain kali ketika kita membutuhkannya.

Hal paling keren tentang menggunakan sistem sebagainya adalah bahwa sangat sedikit perangkat lunak pendukung yang diperlukan dengan cara apa pun – interpreter keempat mengkompilasi kode sendiri, dan Anda berinteraksi dengan terminal serial. Semuanya terjadi di dalam mikrokontroler. Lalu, satu rintangan, akan keluar ke chip. Di masa lalu, ini digunakan untuk dilakukan dengan beralih dalam byte secara manual, dan sebagainya sebenarnya cukup kecil yang benar-benar bootstrap dengan cara ini mungkin. Tapi Anda sudah mendapatkan programmer chip itu, kan?

[Texe] ST Utilities adalah cara termudah untuk keluar ke chip Anda. Unduh mereka dari GitHub, dan buat sendiri atau coba keberuntungan Anda dengan manajer paket distro Anda. (Windows Folks, Anda juga tidak ditinggalkan. Meskipun biner belum melihat pembaruan dalam beberapa saat, itu akan dilakukan.)

Hubungkan kabel pemrograman dengan cara yang jelas, dan menerbitkan perintah sihir St-Flash Erase dan ST-Flash menulis Mecrisp-Stellaris-Hackaday-Edition.bin 0x8000000. Dalam lima detik, Anda akan siap bergemuruh.

GND – GND.

Swclk – CLK.

SWSIO – DIO.

Harus mendapatkan seorang programmer adalah kerumitan jika Anda tidak memilikinya, tetapi itu akan membuat sisa hidup Anda lebih mudah, dan mendapatkan satu adalah sebagai dasar seperti mengklik “Bayar” dan menunggu. [Al Williams] kami sendiri (tidak ada hubungan) memiliki posting baru-baru ini menggunakan perangkat lunak yang sama untuk men-debug kode C atau Arduino dengan GDB, jadi ada baiknya waktu Anda untuk mengatur ini.

Perangkat lunak

Hookup serial, ditenagai oleh laptop
Letakkan programmer menjauh untuk sekarang dan terhubung ke STM32 melalui serial; Tingkat baud default harus 115.200. Jika Anda belum mencabut daya, Anda mungkin perlu menekan tombol reset pada papan STM32. Jika semuanya berjalan dengan baik, Anda akan disambut oleh tengkorak dan silang yang akrab. MecrisP mengharapkan linefeed di akhir baris, jadi jika Anda mengirim LF + CR, Anda akan berhasil memukul kembali dua kali.

A9 TX – Serial Rx

A10 RX – serial tx

GND – GND.

[JCW] Folie adalah emulator terminal serial multi-platform untuk aplikasi ini. Apa yang dilakukan oleh program terminal normal Anda tidak memungkinkan Anda untuk memasukkan kembali baris perintah dengan panah ke atas, yang membuat perawatan banyak, jauh lebih mudah daripada mengetik ulang perintah yang panjang. JugaSecara otomatis mencakup file lain, yang saya gunakan secara substansial dalam membangun biner untuk artikel ini. Anda tidak perlu menjalankan folie, tapi saya yakin Anda akan menyukainya.

Halo Dunia

Sekarang saatnya “Hello World”. Jika Anda baru ke depan, inilah pendahuluan yang sangat selektif. Tipe 2 2 + dan tekan enter. Dikatakan OK .. Itu meyakinkan, bukan? Sekarang ketik. (baca “dot”) dan itu akan mencetak hasil yang tidak mengejutkan. DOT adalah yang pertama dari sedikit transmasan global yang ingin diinternalisasi. Banyak perintah dengan dot mencetak hasilnya segera. .s (dot-es) mencetak isi tumpukan, misalnya. Dua lebih banyak idiom yang akan kita lihat banyak @ untuk mendapatkan variabel atau membaca input dan! untuk mengatur variabel atau output. Baca ini sebagai “Dapatkan” dan “Set” di kepala Anda saat memindai kode.

Selanjutnya, mari kita lihat cara menulis fungsi. : memulai definisi fungsi dan; mengakhiri itu. Jadi: empat 2 2 +; Menentukan fungsi yang menambah dua dan dua bersama. (Dan mengkompilasinya secara real time!) Anda kemudian dapat berbalik dan segera memanggil fungsi ini. Empat .S akan menunjukkan kepada Anda bahwa fungsi kami telah meninggalkan jumlah dua dan dua di tumpukan. Dalam pengertian ini, fungsi sebagainya tidak benar-benar berfungsi. Mereka tidak mengambil argumen eksplisit atau mengembalikan nilai eksplisit. Mereka hanya beroperasi pada data apa pun yang ada di tumpukan, dan biarkan hasil di sana juga. Itu sebabnya Fungsi disebut “kata”. Saya akan berpegang teguh pada konvensi ini mulai sekarang.

Di sini, akhirnya, adalah “Hello World” :: hw. “Halo, Dunia!” cr; “string agak aneh di sebagainya, terutama karena cara bahasa ini diuraikan – kompiler membaca ke suatu ruang dan kemudian mengeksekusi apa yang ditemukannya, sehingga harus ada ruang antara cetak-a-string perintah (. “) Dan karakter pertama yang ingin Anda cetak. Perintah cetak memindai ke depan sampai menemukan penutupan “, meskipun, jadi Anda tidak memerlukan ruang ekstra di sana. Cr mengirim carriage return. Ketik HW pada prompt. Halo, Dunia!

LED berkedip

Meskipun input dan output teks seri sangat mudah, berkedip LED adalah standar “Hello World” mikrokontroler, jadi saatnya untuk beberapa GPIO. Karena sistem sudah dikonfigurasi untuk papan mikrokontroler khusus ini, memutar LEDS semudah mengetik LED. Di prompt. Ingin mematikannya? LED.Off. Manual berkedip akan menjadi tua cukup cepat, jadi mari kita menulis kata kedipan. : blink led.on 100 ms led.off 200 ms; akan melakukan trik. Coba Blink Blink Blink. Lihat kode demo blink saya untuk elaborasi. (Lebih lanjut tentang MS dalam beberapa ribu milidetik.)

Rincian inisialisasi GPIO disembunyikan di inti / hackaday / led.fs dan di STM32F1 / IO.FS EMATI. Menggali, Anda akan melihat prosedur inisialisasi standar: PIN tertentu ditetapkan sebagai output dengan membalik beberapa bit dalam register kontrol periferal STM32. [JCW] telah mendefinisikan sekelompok ini, membuat pengaturan pin sebagai output, dengan driver push-pull, semudah PC13 omode-pp io-mode!. (Ingat “!” Menunjukkan menetapkan nilai dalam variabel atau register.)

Untuk mengkonfigurasi pin pa7 untuk input ADC: PA7 IMODE-ADC IO-MODE!. Tombol pengujian, menggunakan pullup built-in atau resistor pulldown: pa3 imode-pull io-mode! dan kemudian atur output untuk menarik ke atas atau ke bawah menggunakan PA3 IO yang benar! atau pa3 iOS!. Anda kemudian akan dapat membaca status tombol dengan pa3 io @ (“io get”) nanti.

GPIO pada chip STM32 sangat fleksibel, dan jika Anda ingin masuk ke dalam opsi konfigurasi di lembar data, Anda dapat mengatur semua ini dengan cukup mudah menggunakan kode IO.FS [JCW]. Misalnya, IO.All mencetak semua register GPIO dan nilai-nilai mereka, yang merupakan bantuan besar untuk debugging interaktif. Yang mengatakan, ada beberapa ruang di sini untuk lapisan abstraksi perangkat keras yang lebih ramah pengguna, jika Anda ingin berkontribusi satu.

Multitasking pada yang cepat

Jadi sekarang kita punya led berkedip dan pencetakan port serial “Hello World”. Bukan awal yang buruk, dan keduanya memanfaatkan interaktivitas sebagainya yang baik: LED hanya menyala ketika Anda mengetik berkedip. Salah satu kebajikan utama Forth, bagi saya, adalah kemudahan pergi antara pengujian interaktif kata-kata seperti ini, dan kemudian menggunakan fungsi dalam sistem kerja. Salah satu alasannya adalah bahwa hampir semua maju mendukung multitasking dasar koperasi. Inilah yang saya maksud.

Pertama, mari kita lampirkan fungsi blink kita sehingga kita tidak perlu mengetik begitu banyak. : BB mulai berkedip lagi; Membuat fungsi, BB untuk “Blink Buruk”, yang akan berjalan selamanya. Masalah dengan “berjalan selamanya” adalah bahwa Anda tidak pernah kembali ke baris perintah penerjemah tanpa secara fisik menekan tombol reset, dan kemudian semua yang Anda kerjakan dalam RAM hilang.

Sebaliknya, mari berkedip dalam satu lingkaran dengan jalan keluar. : GB mulai berkedip tombol? sampai ; Membuat fungsi yang akan menjalankan perintah blink kami sampai ada beberapa input dari keyboard – pengembalian krusial ditekan. Konstruksi looping khusus ini sangat bermanfaat untuk menguji fungsi yang ingin Anda jalankan terus menerus, tanpa menggantung sistem. Ikuti akun pikiran.

Setelah kami men-tweak fungsi blink kami untuk menjalankan seperti yang kami inginkan, mari kita buat tugas latar belakang sehingga bisa berkedip tanpa pengawasan.

Tugas: BlinkTask.
: blink &
blinktask aktifkan
mulai berkedip lagi
;
multitask.
berkedip&

Secara singkat, tugasnya: Word membuat ruang memori untuk tugas latar belakang berkedip kami yang kami panggil BlinkTask. Fungsi berkedip & melakukan pekerjaan di latar belakang. Berkedip & mulai dengan menyatakan bahwa itu akan menggunakan konteks tugas BlinkTask, dan itu harus mulai berjalan. Kemudian masuk ke loop berkedip tanpa batas dari mana ia tidak pernah pergi. Multitask berubah multitasking, dan berkedip & mengeksekusi tugas kami. Jalankan, dan LED berkedip saat Anda masih dapat berinteraksi dengan konsol. Manis. Ketik tugas dan Anda akan melihat bahwa ada dua aktif: satu adalah blinker kami dan yang lainnya adalah penerjemah interaktif.

Tetapi bagaimana tugas berkedip tahu kapan harus menyerah pada proses simultan lainnya? Dalam luar, kata jeda menghasilkan dari konteks saat ini dan bergerak ke multitasking bulat-robin. Fungsi MS, antara lain, terdiri dari perintah jeda, jadi apa yang tampak seperti penundaan pemblokiran dalam satu tugas pengaturan berakhir dengan baik dengan tugas-tugas Anda yang lain.

Hal yang hebat tentang koperasi multitasking adalah Anda mengontrol dengan tepat ketika akan ada saklar konteks, yang dapat membantu menghilangkan gangguan yang akan Anda temukan dalam sistem preemptive. Kelemahannya adalah Anda bertanggung jawab untuk mengingat untuk menjeda fungsi Anda sekarang dan kemudian, dan Anda harus memverifikasi waktunya sendiri. Tentu saja, ini adalah mikrokontroler, dan Anda memiliki pengontrol interupsi internal lengan yang cukup kaya untuk bermain dengan juga.

Poin nyata dari multitasking pada micros ke dalamnya adalah membuat alur kerja yang hebat untuk menulis, menguji, dan mengerahkan daemon kecil: fungsi yang ingin “selalu aktif”. Pertama, tulis fungsi yang melakukan tindakan sekali. Kedua, mengujinya dalam satu lingkaran dengan Hatch Escape. Ketiga, setelah bekerja, lepaskan pelarian dan buat tugas latar belakang untuk itu. Anda kemudian dapat menghidupkan dan mematikan menggunakan Idle dan Wake, bahkan dari dalam tugas-tugas lain. Lihat Mecrisp’s Multitask.txt, sumbernya, untuk lebih detail.

Apa berikutnya?

Sejauh ini, kami telah menyiapkan Mecrisp-Stellaris, dengan perpustakaan tambahan dari kerangka kerja EMBELLO OMBELO, dan menjalankan beberapa demo cepat. Jika ini telah menarik minat Anda, saya akan membawa Anda naik-jalan membangun beberapa perangkat lunak nyata lain kali. Ada banyak hal yang lebih banyak untuk dikatakan tentang cara bahwa mecrisp menangani nuansa flash versus RAM, input dan output, dan praktik pengembangan interaktif. Beberapa aspek yang benar-benar aneh dalam bekerja maju akan mengangkat kepala berbentuk lucu mereka, dan kita akan belajar untuk mencintai mereka.

Sementara itu, dapatkan papan STM32F103 murah Anda terlintas dengan biner kami, dan dapatkan sedikit banyak digunakan untuk bermain di lingkungan keempat pada chip. Berkedip beberapa LED. Lihatlah sekeliling glosarium mecrisp-stellaris dan dokumentasi EMBELO API. Atau cukup ketik daftar untuk melihat semua perintah yang Anda miliki dan mulai meretas.

Leave a Reply

Your email address will not be published. Required fields are marked *

Related Post