Mengapa memory aliasing diperlukan?

Sep 18 2020

Saya bingung dengan desain arsitektur oleh ST Microelectronics ini. Ambil contoh STM32F407VG. Program dimuat dalam sekejap di alamat 0x08000000. Alamat tersebut dipetakan ke alamat 0x00000000 karena setelah reset prosesor terlihat pertama di 0x00000000. Kenapa tidak bikin flash first address jadi 0x00000000. Apa keuntungan dari aliasing memori?

Jawaban

6 old_timer Sep 18 2020 at 11:11

Inti prosesor melihat alamat 0x00000000 untuk penunjuk tumpukan, dan 0x00000004 untuk vektor reset (dan seterusnya melalui vektor lain). Jadi dari perspektif inti Anda ingin aplikasi menjawab. Tetapi produk ini berisi bootloader yang diprogram dari pabrik, selain aplikasi yang Anda tambahkan nanti, jadi bagaimana Anda mem-boot dua program dengan satu alamat? Salah satu caranya adalah dengan mencerminkannya ke alamat itu. Bagaimana jika Anda juga ingin menambahkan fitur untuk membiarkan prosesor melakukan booting dari sram, Anda juga perlu memetakannya.

Jadi tidak semua kecuali beberapa chip memecahkan masalah dengan cara ini dengan melakukan mirroring berdasarkan pin tali atau bit register nonvolatile, dll.

Bagian STM32 hanya akan memetakan persentase pada 0x00000000, jadi Anda benar-benar ingin membangun aplikasi untuk 0x08000000 (atau beberapa alamat lain seperti 0x02000000 untuk sebagian kecil bagiannya, baca dokumennya!). Sehingga misalnya tabel vektor terlihat seperti:

0x20001000
0x08000031
...

Inti prosesor membaca 0x00000004 mendapatkan nilai 0x08000031 yang berarti mulai menjalankan instruksi di alamat 0x08000030 untuk penangan reset. Dan dari sana program akan kehabisan ruang alamat 0x08000000 bukan 0x00000000.

Tidak semua orang melakukannya dengan cara ini tetapi beberapa melakukannya, tidak terbatas pada ST (STM32).

Tidak semua orang memiliki bootloader yang diprogram pada chip, dan beberapa dari mereka tidak memiliki alasan untuk melakukan multipleks pada ruang alamat itu dan tidak akan melakukannya.

2 Colin Sep 18 2020 at 15:27

Seiring dengan jawaban old_timer yang mencakup banyak hal, untuk bagian lain seperti rentang STM32F0 berbasis Cortex M0 tidak ada SCB->VTORregister offset tabel vektor, untuk menyiasatinya, Anda dapat memetakan area yang berbeda (RAM atau flash) ke 0x00000000 untuk memungkinkan Anda memiliki menjalankan tabel vektor yang dapat dimodifikasi waktu.