informasi kontak saya
Surat[email protected]
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
Kita telah membicarakan tentang pengetahuan dasar seperti pointer dan struktur sebelumnya. Di awal artikel ini, kami akan membuat beberapa penerapan kompleks dari pengetahuan dasar ini, seperti antrian.
Faktanya, pada tahun 2018, saya merekam serangkaian video tentang arsitektur program, yang mencakup tutorial langkah demi langkah tentang pembentukan antrian dan serangkaian pemikiran dan teknik pemrograman tingkat tinggi yang praktis. Video tersebut diterima dengan baik dan diakui oleh banyak penggemar dan teman-teman. .
Namun, karena tutorial direkam relatif awal, kualitas suaranya relatif buruk, dan beberapa detail tidak sempurna. Oleh karena itu, duri ini selalu menempel di hati saya. Agar para pekerja keras di Kamp Pelatihan Khusus Mikrokontroler Janji dapat mempelajari proyek kami dengan lebih efisien dan lebih baik, baru-baru ini saya berencana untuk mengatur ulang konten dasar ini dan menjadikannya serangkaian. tutorial grafis/video arsitektur perangkat lunak 2.0.
Ketika saya bekerja sebagai R&D engineer, saya sering menjumpai beberapa produk komunikasi, seperti papan kendali industri, PDU, dan Internet of Things.
Umumnya dalam pembuatan produk semacam ini akan memusingkan saat menulis dan menerima aliran data, baik itu komunikasi serial maupun komunikasi nirkabel.
Misalnya, STM32 menerima aliran data port serial.
Pada hari-hari awal, saya mendefinisikan array dan variabel subskrip array untuk memproses aliran data yang diterima. Kodenya adalah sebagai berikut:
Metode ini memiliki banyak masalah dan meningkatkan kompleksitas penulisan kode insinyur.
Pemeliharaan kode itu rumit
Karena Anda harus memeriksa batas buffer array secara manual untuk menghindari kesalahan di luar batas, array tidak mudah untuk diperluas dan dipelihara seperti antrian ketika Anda perlu memproses aliran data yang lebih kompleks atau menambahkan sumber data baru.
Data rentan terhadap kebingungan
Mengoperasikan array secara langsung dalam layanan interupsi (ISR) dapat menyebabkan persaingan sumber daya dengan program utama. Jika beberapa tugas mengakses array yang sama, mekanisme sinkronisasi tambahan (seperti kunci mutex) diperlukan untuk menghindari kondisi perlombaan data dan inkonsistensi.
Jika penerimaan dan pemrosesan data tidak disinkronkan, penggunaan array dapat menyebabkan kebingungan urutan data, yang menyebabkan hilangnya paket data karena masalah program. Saya telah membahas masalah ini sebelumnya. Saya memerlukan kode tambahan untuk menyelesaikan masalah ini, yang meningkatkan kompleksitas program. Selain itu, saya tidak memiliki pengalaman dan tidak stabil untuk membuatnya setelah semua upaya.
Masalah seperti ini mengganggu saya untuk waktu yang lama. Baru setelah saya berganti pekerjaan dan membaca kode yang ditulis oleh teknisi lain, saya menyadari bahwa antrian dapat mengatasi masalah ini. Sejak itu, cara saya menangani aliran data menjadi sebagai berikut:
Apakah ini terasa jauh lebih sederhana? Faktanya, algoritma pemrosesan data antrian tidaklah sederhana, ia hanya menggunakan antrian untuk membuat template umum untuk pemrosesan data. Lain kali Anda menghadapi kebutuhan serupa, Anda dapat menggunakannya secara langsung kodenya. Lebih dapat digunakan kembali.
Ini hanyalah salah satu penerapan antrian. Inti dari antrian adalah cache data. Entri data dan dequeuing mengikuti aturan masuk pertama, keluar pertama.
Yaitu menyimpan data terlebih dahulu, kemudian mengeluarkan data tersebut untuk diproses ketika CPU memiliki waktu luang atau ketika kondisi tertentu dari program terpenuhi.
Berdasarkan fitur ini, banyak penerapan praktis yang dapat diperoleh. Terutama ketika berhadapan dengan aplikasi yang perlu memastikan ketertiban data.
Saya telah merangkum beberapa tempat yang paling sering saya gunakan.
Ketika mikrokontroler menerima data melalui port serial, biasanya mikrokontroler menggunakan antrian untuk buffer byte yang diterima, yang memastikan bahwa data tidak akan hilang sebelum diproses oleh program utama.
Di perangkat pemutaran atau perekaman audio, antrean digunakan untuk menyangga data sampel audio guna menerapkan pemutaran atau perekaman belokan demi belokan. Misalnya: Misalnya, di Proyek 6 Kamp Pelatihan Khusus Mikrokontroler Wuji kami, host alarm WiFi & 4G memiliki fungsi perintah suara. Misalnya, jika Anda menekan tombol mempersenjatai jauh dari rumah, suara "mempersenjatai jauh dari rumah" akan terdengar. akan dimainkan, dan jika tombol mempersenjatai di home ditekan, suara "mempersenjatai di home" akan dimainkan.
Jika saya menekan kedua tombol ini dengan cepat, untuk memastikan suara dapat diputar sepenuhnya, saya dapat memasukkan key event ke dalam cache antrian terlebih dahulu, sehingga suara dapat diputar sepenuhnya secara berurutan.
Dalam sistem yang menggunakan RTOS, antrian digunakan untuk pengiriman pesan dan sinkronisasi antar tugas dan mendukung penjadwalan tugas yang kompleks.
Setelah mendeteksi peristiwa-peristiwa penting, peristiwa-peristiwa penting tersebut dapat dimasukkan ke dalam antrian terlebih dahulu, dan program utama dapat memproses peristiwa-peristiwa ini untuk mencegah peristiwa-peristiwa penting hilang karena penekanan tombol yang terlalu cepat. Ini saat ini digunakan dalam proyek kami.
Data ADC yang kami kumpulkan juga dapat dimasukkan ke dalam antrian setelah pemrosesan tertentu sehingga dapat diproses atau dianalisis pada waktu yang tepat.
Interaksi data pemutakhiran firmware relatif besar, yang sangat cocok untuk menggunakan antrian untuk memastikan integritas data. Ini juga digunakan dalam proyek kami 6. Selama proses pemutakhiran firmware, blok data firmware yang diunduh dapat dimasukkan ke dalam antrian dan kemudian ditulis ke memori flash secara berurutan. Ada banyak aplikasi serupa. Secara keseluruhan, antrian telah memecahkan banyak masalah sulit bagi saya.
Antrian merupakan struktur data linier yang mengikuti prinsip first-in-first-out (FIFO), yaitu data yang pertama kali masuk ke dalam antrian akan dikeluarkan terlebih dahulu. Dalam antrian, data biasanya dimasukkan ke dalam antrian di salah satu ujung, yang disebut ekor antrian, dan data didequeued di ujung yang lain, yang disebut kepala antrian. Struktur ini membuat antrian sangat cocok untuk situasi dimana data perlu diproses secara tertib.
Kita dapat menganggap antrian sebagai memasukkan bola pingpong ke dalam pipa dua arah. Kita memasukkan bola pingpong ke dalam pipa dari kiri. Kita mengeluarkan bola pingpong dari sisi kanan pipa. Tindakan ini disebut dequeuing.
Bola-bola pingpong yang ada di dalam pipa akan berbaris membentuk formasi. Bola tenis meja yang masuk terlebih dahulu akan keluar terlebih dahulu. Ini adalah aturan masuk pertama keluar pertama dalam antrian.
Bola ping-pong dibandingkan dengan data. Pipeline adalah cache yang menyimpan data. Berapa banyak bola ping-pong yang dapat ditampung oleh pipeline berarti berapa banyak data yang dapat disimpan oleh cache. Antrian pada gambar di atas dapat menyimpan 4 buah data setara dengan Buff[4].
Implementasi program antrian adalah melalui array berukuran tetap, penunjuk kepala, dan penunjuk ekor. Array bertanggung jawab untuk menyimpan data. Penunjuk kepala bertanggung jawab atas alamat dari mana data harus diambil saat dequeuing. Penunjuk ekor bertanggung jawab atas alamat mana data harus disimpan saat diantri. Oleh karena itu, operasi enqueuing dan dequeuing adalah dua penunjuk, memainkan algoritma data masuk pertama keluar pertama dalam array.
Insinyur yang berbeda menerapkan kode antrian secara berbeda. Jika Anda tidak memiliki pengalaman proyek yang kaya, atau jika Anda belum pernah menggunakan antrian sebelumnya, jangan malu karena Anda harus bisa menulis algoritma antrian.
Ketika saya pertama kali memulai, saya juga langsung mentransplantasikan program antrian orang lain dan terus menggunakannya dalam proyek saya sendiri. Setelah mahir menggunakannya di beberapa proyek, saya kemudian mempelajari kode detail implementasi algoritma antrian dan menulisnya sendiri beberapa kali.
Oleh karena itu, para veteran kamp pelatihan khusus kami, jangan menulisnya sendiri di awal. Pelajari cara menggunakannya terlebih dahulu, tarik kesimpulan dari satu contoh, terapkan pada skenario dan proyek yang berbeda, lalu coba tulis sendiri setelah Anda terbiasa. dengan itu. Ini adalah rangkaian pembelajaran yang sangat penting.
Ambil contoh program antrian Kamp Pelatihan Khusus Proyek Mikrokontroler Tak Terbatas kami, total ada 4 fungsi.
AntreanKosong(x)
Hapus fungsi antrian. Sebelum setiap penggunaan antrian, antrian harus dibersihkan. Fungsi clear akan membuat penunjuk kepala dan penunjuk ekor menunjuk ke alamat yang valid secara default, yang merupakan elemen pertama dari array pengecualian alamat akan terjadi.
Deskripsi parameter formal: x - adalah variabel struktur antrian
AntreanDataDalam(x,y,z)
Fungsi enqueuing data adalah membuang satu atau lebih byte data ke dalam antrian yang ditentukan.
Deskripsi parameter formal:
x - Variabel struktur antrian
y - alamat data
z - Jumlah data yang akan diantrekan, dalam byte.
Melihat:
①.Data yang dimasukkan hanya boleh bertipe unsigned char.
②. Jika antrian sudah penuh dan data terus diantri, maka data akan ditimpa dari lokasi data pertama.
AntreanDataKeluar(x,y)
Fungsi data dequeue adalah mengambil satu byte data dari antrian yang ditentukan.
Deskripsi parameter formal: x - Variabel struktur antrian y - Data yang diambil, alamat yang akan disimpan
Catatan: Fungsi dequeue kami hanya dapat mengambil satu byte data dalam satu waktu.
AntreanDataLen(x)
Hapus semua data dalam antrian yang ditentukan. Deskripsi parameter formal: x - variabel struktur antrian
Konten berikut melibatkan beberapa penjelasan kode dan video, yang tidak nyaman untuk diedit. Anda dapat menghubungi saya untuk mengatur Feishu untuk pengalaman membaca yang lebih baik.
Baru-baru ini, banyak penggemar bertanya kepada saya bagaimana cara mempelajari mikrokontroler. Berdasarkan sepuluh tahun pengalaman saya di industri ini, saya menghabiskan waktu satu bulan dan dengan cermat menyusun "komputer mikro chip tunggal".
Jalur pembelajaran terbaik untuk mikrokontroler + tutorial tingkat pemula hingga lanjutan untuk mikrokontroler + toolkit", Semua dibagikan kepada penggemar berat secara gratis! ! !
Selain itu, saya sambil menangis membagikan apa yang saya miliki di bagian bawah kotak saya22 proyek sumber terbuka populer,TermasukKode sumber + skema + PCB + dokumentasi, biarkan AndaMenjadi master dengan cepat!
Untuk paket tutorial dan jalur pembelajaran detailnya, silakan lihat sayaAwal artikel ini di bawah。