Struktur C Tertanam: Panduan Praktis untuk Definisi, Penggunaan, dan Optimasi Memori
Struktur adalah sumbu dari pemrograman C tertanam yang efisien. Dalam artikel ini, kami akan menjelajahi aplikasi praktisnya, sintaks untuk mendeklarasikannya, dan dampak perataan data pada penggunaan memori. Dengan mengurutkan anggota struktur secara strategis, Anda sering dapat mengurangi jejak objek data Anda, pertimbangan kritis dalam lingkungan dengan keterbatasan sumber daya.
Artikel ini menawarkan ringkasan yang ringkas namun komprehensif tentang struktur dalam C tertanam. Kami akan membahas aplikasi dunia nyata, cara mendeklarasikannya dengan benar, dan aturan halus perataan data yang mempengaruhi ukuran struktur Anda.
Struktur
Ketika beberapa variabel dengan tipe yang sama memiliki hubungan logis, array adalah pengelompokan yang nyaman. Misalnya, untuk menyimpan 50 sampel terakhir dari ADC yang mendigitalkan input suara, Anda mungkin menggunakan:
uint16_t voice[50];
Di sini, uint16_t adalah integer unsigned 16-bit yang didefinisikan dalam stdint.h, memastikan ukuran yang konsisten di seluruh platform.
Tetapi bagaimana jika Anda perlu mengelompokkan variabel dengan tipe yang berbeda—misalnya, array sampel dan laju sampling ADC? Mendeklarasikannya terpisah sebagai variabel independen menciptakan overhead yang tidak perlu. Sebaliknya, Anda dapat menyatukannya dalam sebuah struktur:
struct record { uint16_t voice[50]; float sample_rate; };
Struktur record sekarang berisi baik array uint16_t maupun float dalam satu objek data yang terhubung secara logis.
Mengapa Struktur Penting?
Struktur memungkinkan Anda mengasosiasikan variabel heterogen ke dalam satu unit yang kohesif, menyederhanakan manipulasi dan meningkatkan keterbacaan. Mereka membentuk dasar struktur data yang lebih kompleks, seperti daftar tertaut dan buffer pesan, yang everywhere dalam komunikasi sistem tertanam dan penanganan data sensor.
Misalnya, periferal memori-mapped pada mikrokontroler sering direpresentasikan sebagai struktur yang mencerminkan tata letak register hardware, memungkinkan akses register yang mudah melalui sintaks anggota.

Gambar 1. Struktur dapat digunakan untuk mengimplementasikan daftar tertaut.

Gambar 2. Peta memori mikrokontroler STM32. Gambar dengan kredit Embedded Systems with ARM.
Mendeklarasikan Struktur
Pertama, Anda mendefinisikan template struktur. Pertimbangkan contoh ini:
struct record { uint16_t voice[4]; float sample_rate; };
Template itu sendiri tidak mengkonsumsi memori; alokasi hanya terjadi saat Anda mendeklarasikan variabel dari tipe tersebut:
struct record mic1;
Sekarang, mic1 menempati cukup ruang untuk empat elemen uint16_t dan satu float. Akses anggota melalui operator titik:
mic1.voice[0] = 100; float fs = mic1.sample_rate;
Cara Lain untuk Mendeklarasikan Struktur
Meskipun pola yang paling umum mendefinisikan struktur terlebih dahulu dan kemudian mendeklarasikan variabel, C menawarkan sintaks alternatif:
Sintaks 1: Tag dan variabel bersama
struct record { uint16_t voice[4]; float sample_rate; } mic1;
Variabel berikutnya dapat dideklarasikan terpisah:
struct record mic2;
Sintaks 2: Template anonim
struct { uint16_t voice[4]; float sample_rate; } mic1;
Di sini Anda tidak dapat menggunakan template lagi karena ia tidak memiliki nama.
Sintaks 3: Struktur bersarang anonim
struct test { struct { float f; char a; }; } test_var;
Akses anggota dalaman secara langsung:
test_var.f = 1.2f;
Struktur anonim mengurangi keseruan tetapi harus digunakan dengan hati-hati untuk kejelasan.
Tata Letak Memori untuk Struktur
Standar C menjamin bahwa anggota disusun dalam memori secara berurutan, dalam urutan yang dideklarasikan. Misalnya:
struct Test2 { uint8_t c; uint32_t d; uint8_t e; uint16_t f; } MyStruct;
Pada mesin 32-bit, sizeof(MyStruct) adalah 12 byte karena padding yang menyelaraskan uint32_t ke batas 4 byte. Mengurutkan ulang anggota dapat menghilangkan padding:
struct Test2 { uint32_t d; uint16_t f; uint8_t c; uint8_t e; } MyStruct;
Sekarang sizeof(MyStruct) turun menjadi 8 byte—hemat yang berharga dalam firmware dengan keterbatasan memori.

Gambar 3. Perataan data dapat menambahkan padding ke tata letak memori struktur.
Ringkasan
- Struktur memungkinkan Anda mengemas variabel heterogen ke dalam satu unit yang terkelola dengan baik, meningkatkan kejelasan dan efisiensi kode.
- Struktur data khusus mendukung tugas seperti pesan antar-perangkat dan penyimpanan data sensor.
- Mereka esensial untuk memetakan register hardware dalam periferal memori-mapped.
- Mengurutkan ulang anggota untuk menghormati perataan dapat secara signifikan mengurangi ukuran struktur.
Jelajahi lebih banyak tutorial C tertanam kami di sini.