Sistem Tertanam - Persyaratan
Penghitung Program
Program Counter adalah register 16 atau 32-bit yang berisi alamat dari instruksi selanjutnya yang akan dieksekusi. PC secara otomatis menambah ke lokasi memori berurutan berikutnya setiap kali instruksi diambil. Cabang, lompat, dan operasi interupsi memuat Program Counter dengan alamat selain lokasi berurutan berikutnya.
Mengaktifkan power-on reset akan menyebabkan semua nilai di register hilang. Artinya nilai PC (program counter) adalah 0 saat reset, memaksa CPU untuk mengambil opcode pertama dari lokasi memori ROM 0000. Artinya kita harus menempatkan byte pertama dari upcode pada lokasi ROM 0000 karena disitulah letak CPU mengharapkan untuk menemukan instruksi pertama
Setel Ulang Vektor
Arti penting dari vektor reset adalah bahwa ia mengarahkan prosesor ke alamat memori yang berisi instruksi pertama firmware. Tanpa Reset Vector, prosesor tidak akan tahu dari mana harus memulai eksekusi. Setelah reset, prosesor memuat Program Counter (PC) dengan nilai vektor reset dari lokasi memori yang telah ditentukan. Pada arsitektur CPU08, ini di lokasi $ FFFE: $ FFFF.
Ketika vektor reset tidak diperlukan, pengembang biasanya menerima begitu saja dan tidak memprogram ke dalam gambar akhir. Akibatnya, prosesor tidak memulai pada produk akhir. Ini adalah kesalahan umum yang terjadi selama fase debug.
Stack Pointer
Stack diimplementasikan dalam RAM dan register CPU digunakan untuk mengaksesnya yang disebut register SP (Stack Pointer). Register SP adalah register 8-bit dan dapat menangani alamat memori dari kisaran 00h hingga FFh. Awalnya, daftar SP berisi nilai 07 untuk menunjuk ke lokasi 08 sebagai lokasi pertama yang digunakan untuk tumpukan oleh 8051.
Saat konten register CPU disimpan dalam tumpukan, ini disebut operasi PUSH. Saat konten tumpukan disimpan dalam register CPU, ini disebut operasi POP. Dengan kata lain, register didorong ke tumpukan untuk menyimpannya dan dikeluarkan dari tumpukan untuk mengambilnya.
Loop Tak Terbatas
Loop tanpa batas atau loop tanpa akhir dapat diidentifikasi sebagai urutan instruksi dalam program komputer yang dijalankan tanpa henti dalam satu loop, karena alasan berikut -
- loop tanpa kondisi penghentian.
- loop dengan kondisi penghentian yang tidak pernah bisa dipenuhi.
- loop dengan kondisi penghentian yang menyebabkan loop untuk memulai kembali.
Perulangan tak terbatas seperti itu biasanya menyebabkan sistem operasi yang lebih lama menjadi tidak responsif, karena perulangan tak terbatas menghabiskan semua waktu prosesor yang tersedia. Operasi I / O yang menunggu input pengguna juga disebut "loop tak terbatas". Salah satu kemungkinan penyebab komputer "membeku" adalah loop tak terbatas; penyebab lainnya termasukdeadlock dan access violations.
Sistem tertanam, tidak seperti PC, tidak pernah "keluar" dari aplikasi. Mereka menganggur melalui Infinite Loop menunggu acara berlangsung dalam bentuk interupsi, atau apre-scheduled task. Untuk menghemat daya, beberapa prosesor memasukkan khusussleep atau wait modes alih-alih diam melalui Infinite Loop, tetapi mereka akan keluar dari mode ini baik melalui pengatur waktu atau Interupsi Eksternal.
Interupsi
Interupsi sebagian besar adalah mekanisme perangkat keras yang menginstruksikan program bahwa suatu peristiwa telah terjadi. Mereka dapat terjadi kapan saja, dan oleh karena itu tidak sinkron dengan aliran program. Mereka memerlukan penanganan khusus oleh prosesor, dan pada akhirnya ditangani oleh Interrupt Service Routine (ISR) yang sesuai. Interupsi perlu ditangani dengan cepat. Jika Anda membutuhkan terlalu banyak waktu untuk memperbaiki interupsi, Anda mungkin melewatkan interupsi lainnya.
Little Endian Vs Big Endian
Meskipun angka selalu ditampilkan dengan cara yang sama, namun tidak disimpan dengan cara yang sama di memori. Mesin Big-Endian menyimpan data byte paling signifikan di alamat memori terendah. Mesin Big-Endian menyimpan 0x12345678 sebagai -
ADD+0: 0x12
ADD+1: 0x34
ADD+2: 0x56
ADD+3: 0x78
Mesin Little-Endian, di sisi lain, menyimpan data byte paling signifikan di alamat memori terendah. Mesin Little-Endian menyimpan 0x12345678 sebagai -
ADD+0: 0x78
ADD+1: 0x56
ADD+2: 0x34
ADD+3: 0x12