Prasyarat
Sejumlah artikel ( https://habr.com/ru/post/345320/ , habr.com/ru/post/80893 , habr.com/ru/post/246975 ) menyarankan agar Excel dapat digunakan sebagai penerjemah menjadi kode perakitan AVR.
Mari kita bandingkan Excel dengan fitur utama editor kode "biasa". Daftar fitur paling populer adalah sebagai berikut:
| Fitur editor kode | Bagaimana menerapkan di Excel | Seperti yang diterapkan di Atmel Studio |
|---|---|---|
| Penyorotan sintaks | Pemformatan bersyarat sel berdasarkan konten | Penyorotan perintah |
| Pelengkapan Otomatis | Fungsi VBA kustom;
Rentang bernama; Sel sebagai konsol mini dengan makro untuk acara Perubahan; |
Tidak |
| Lekukan | Lompat ke kolom yang berdekatan secara manual | Secara manual |
| Memeriksa penempatan braket yang benar | Memiliki kontrol bawaan | Majelis saja |
| Bantuan kode kontekstual | Tidak | Ada daftar nama label |
| Menciutkan blok kode | Fungsi pengelompokan kolom dan baris | Tidak |
| Penganalisis statis | Menampilkan kesalahan dalam tautan saat dalam perjalanan | Tidak |
Tampak bisa diterima. Beberapa hal menjadi "gratis", sesuatu perlu ditingkatkan.
Tetapi perbedaan utama antara prosesor spreadsheet dan prosesor tekstual adalah bahwa pengguna dapat menempatkan blok informasi di tempat yang sewenang-wenang dalam ruang, dan tidak hanya di bawah satu sama lain. Kami menggunakan fitur ini untuk mengubah kode datar menjadi diagram alur yang hampir lengkap.
Perjanjian awal
Mari kita ambil pendekatan umum dan terminologi dari sini: habr.com/ru/post/345320
Seluruh algoritma dibagi menjadi beberapa cabang. Cabang tersebut berperan sebagai unit program independen.
Setiap cabang memiliki nama, yang merupakan titik masuk ke dalamnya. Itu harus unik dan bermakna. Semua nama cabang ditempatkan di baris atas, yang akan kita sebut - "string nama".
Sebuah cabang berakhir dengan satu atau lebih cabang ke cabang lainnya. Transisi dari satu cabang ke cabang lain ditempatkan pada intinya. Sebut saja itu "garis transisi".
Kami juga menerima aturan bahwa dari dalam satu cabang Anda tidak dapat masuk ke dalam cabang lain.
Skema umum algoritma
Untuk cabang dan loop dalam cabang, label juga digunakan. Artinya, ada banyak sekali label dalam program tersebut. Setiap kali muncul dengan nama unik baru adalah rutinitas. Di sinilah fungsi dasar Excel masuk. Setiap sel sudah memiliki nama unik yang terdiri dari nama kolom dan nomor baris.
Di VBA, mari buat fungsi label dengan argumen tipe Range . Label di assembler AVR harus memiliki titik dua di akhir. Itu. fungsi label kami menerima sebagai masukan referensi ke sel tempat ia ditempatkan dan menghitung alamatnya dalam format A1. Kemudian menambahkan teks "_M:" ke dalamnya. Fragmen "_M" tidak disengaja, kami akan menggunakannya lebih lanjut - dalam pemformatan sel.
Visualisasi transisi
Dalam lingkungan visual yang sebenarnya, transisi ditunjukkan dengan panah. Nyaman dan intuitif.
Dalam prosesor spreadsheet, alih-alih panah, Anda dapat mewarnai sel yang membentuk jalur ke label dari perintah lompat. Ini dilakukan dalam contoh.
Jika Anda berhasil memasukkan semua kode cabang ke dalam satu layar, maka Anda tidak perlu menggambar rute. Semua perintah dan label transisi akan ada di depan mata Anda.
Untuk diagram blok, ada standar untuk penunjukan elemen individu. Misalnya, persegi panjang adalah perhitungan; berlian - kondisi, dll. Saat bekerja dengan prosesor spreadsheet, kami memiliki akses ke warna, gaya, dan kontrol batas.
Excel memiliki fitur pemformatan bersyarat yang praktis. Ini dapat digunakan dengan berbagai cara, tetapi kami hanya akan memperkenalkan tiga aturan sederhana:
- Sel yang tidak kosong di bilah nama dan di bilah transisi berwarna kuning;
- Sel yang tidak kosong di badan cabang berwarna oranye;
- Sel dengan label "lokal" dan perintah lompat diberi warna biru. Ini adalah sel tidak kosong yang berisi karakter "_M" yang disebutkan di atas.
Gif di bawah ini menunjukkan bagaimana kerja dengan label dan transisi terlihat setelah semua pengaturan.
Bekerja dengan label dan perintah lompat
Prosedur untuk membentuk daftar akhir
Listing Collector menelusuri program terakhir dari atas ke bawah dan dari kanan ke kiri. Satu sel dalam satu waktu.
Bagaimana daftar terakhir dibentuk
Algoritme perakitan melompati sel kosong dan sel yang berisi karakter ";", yaitu komentar.
Debugging algoritma dan perakitan akhir proyek berlangsung di studio. Tidak ada umpan balik kode di studio dengan sel Excel. Oleh karena itu, untuk menangkap kesalahan dalam daftar akhir, di seberang setiap perintah, kami menunjukkan tautan sel. Dari tautan ini, kami menemukan perintah bermasalah dalam diagram di Excel.
Solusi algoritmik dasar bercabang seperti:
If <> then
<>
Else
<>
End if
Untuk itu, ada instruksi lompat bersyarat di AVR assembler (breq, brne, sbic dan lain-lain). Perintah ini memberi tahu program ke mana harus pergi ketika kondisi terpenuhi.
Sekarang mari kita bayangkan bagaimana program percabangan seperti itu seharusnya terlihat, dengan mempertimbangkan prinsip-prinsip yang diuraikan di atas:
Percabangan sederhana
The Brne perintah dan rekan-rekan memiliki keterbatasan. Jarak lompatan 64 kata di setiap arah. Oleh karena itu, makro panjang yang dimasukkan ke dalam cabang "Tidak Ada" mungkin memanggil di luar jangkauan.
Untuk menyiasati batasan ini, pemrosesan "Tidak" dilakukan di cabang terpisah, yaitu di sebelah kanan tanda cabang dari brne . Atau gunakan subrutin di mana makro dipanggil.
Pilih Kasus
Jika Anda harus memilih dari banyak pilihan, Select Case digunakan di Java:
Select Case <>
Case <1>
Case <2>
Case <3>
Case else
End select
Lompatan indeks tersedia dalam bahasa assembly untuk AVR. Mari tunjukkan opsi implementasi.
Pilih Kasus
Di sini Anda dapat melihat bahwa larangan melompat dari tubuh dahan ke dahan lain dilanggar. Ini disengaja, jika tidak program akan memakan terlalu banyak ruang horizontal.
Untuk alasan yang sama, vektor interupsi harus dijalankan dalam satu kolom.
Ulangi dengan kondisi pos
Sebuah loop, ketika setidaknya satu pengulangan diperlukan, terlihat seperti ini dalam notasi Java:
Do
<>
Loop while <>
Contoh tampilannya di Excel dan kode yang dihasilkan di studio:
Ulangi dengan kondisi pos
Ulangi dengan prasyarat
Contoh di Jawa:
Do while <>
<>
Loop
Contoh tampilannya di Excel dan kode yang dihasilkan di studio:
Ulangi dengan prasyarat
Loop dengan loop bersarang
Memproses array atau bekerja dengan angka melibatkan penggunaan loop bersarang. Tampilan umum JAVU:
Do
Do
<>
Loop while < 2- >
<>
Loop while < 1- >
Ada dua cara untuk mengimplementasikan loop bersarang: baik dalam satu cabang, atau menggunakan beberapa cabang. Mari tunjukkan kedua opsi tersebut.
Loop bersarang dalam satu cabang
Loop bersarang dengan implementasi melalui cabang
Loop dengan keluar bersyarat
Ada situasi ketika Anda perlu keluar dari siklus sebelum siklus berakhir. Misalnya, nol logis di kaki 0 ββdari port D dapat menunjukkan beberapa jenis kerusakan. Program harus keluar dari loop utama dan memicu alarm.
Di JLU, perintah break digunakan , dan algoritme umumnya adalah sebagai berikut:
Do
<>
If < > then break
Loop while <>
Mari kita tunjukkan lagi bagaimana algoritma akan terlihat tanpa cabang dan dengan cabang.
Menginterupsi loop dalam satu cabang
Mengganggu loop yang diimplementasikan melalui cabang
Memanggil subrutin
Subrutin dipanggil dengan perintah call , icall , rcall . Ada fitur penting di sini. Subrutin harus dipanggil secara ketat dari badan cabang. Jika panggilan dilakukan di jalur cabang, pengembalian dari subrutin hampir dijamin terjadi di tempat yang salah.
Persyaratan wajib untuk subrutin:
- subrutin itu sendiri harus dimulai dengan nama label;
- perintah terakhir dari subroutine harus ret dan ditempatkan di garis melompat.
Struktur internal subprogram dapat berupa apa saja - terapkan semua label label otomatis yang sama untuk menerapkan logika.
Contoh lampu lari
Berikut adalah kode program uji lampu yang sedang berjalan. Contohnya termasuk loop, cabang dan panggilan subrutin.
Hasil akhirnya terlihat seperti ini:
Skema lampu lari
Membuat daftar seluruh program di Excel dengan coretan pada satu layar:
Lampu menyala. Kode Excel
Lampu menyala. Daftar terakhir
Hasil
Apa yang tidak disukai
- Metode yang dijelaskan tidak mungkin cocok untuk mengerjakan proyek besar dengan partisipasi seluruh tim. Kontrol versi, perbedaan, dll. Anda masih harus memutuskan di samping.
- Dalam mode debug, sangat merepotkan tanpa dua monitor. Debugging itu sendiri dilakukan di studio, dan diagram alir di Excel. Ini adalah jendela yang berbeda, diperlukan peralihan.
- Program ini membengkak dengan cepat secara horizontal. Pada saat yang sama, di Excel, menggulir ke samping itu kasar dan tidak nyaman.
- - β . 12801024 5 45 . 20% ( 45 ). β . .
- Β« Β» . .
- Excel . Atmel Studio .
- .
- . β . , .
- Excel . - , - β VBA.
- . Β« Β» , . 4-5 . Β« β β β Β» , Β« Β» , Β« Β» Β« Β». 4-5 .
- Pemeriksaan tambahan untuk kesalahan. Sangat mudah menggunakan makro untuk memeriksa apakah ada blok "menjuntai" yang tidak diakhiri dengan transisi. Kami juga dapat menggunakan makro untuk menemukan dan menghapus label yang tidak digunakan yang mengalihkan perhatian selama proses debug.
- Anda dapat memasukkan aturan Anda sendiri untuk mewarnai sel.
- Jika prosesor spreadsheet dibangun ke dalam studio sebagai editor kode, maka akan sangat mudah untuk men-debug secara langsung pada diagram blok tersebut.