Mikroprocesorski sistemi/Februar 2023

Izvor: SI Wiki
Pređi na navigaciju Pređi na pretragu

Februarski ispit 2023. godine održan je 19. februara i na njemu je bila dostupna sva potrebna dokumentacija i prezentacije sa predavanja.

  • Za pitanja sa više odgovora, tačni odgovori su podebljani i uokvireni
  • Za pitanja za koje se odgovori unose, tačni odgovori su podvučeni i sakriveni, tako da se prikažu kada izaberete taj tekst (primer: ovako)
  • Pritisnite levo dugme ispod za sakrivanje i otkrivanje svih odgovora, ili desno dugme za uključivanje i isključivanje interaktivnog režima:

Teorija

1. zadatak

Sličan zadatak kao sa avgustovskog ispita 2022. godine.

U nastavku je dat deo sadržaja Intel HEX datoteke napravljene za STM32F103R6 mikrokontroler. Na kojoj adresi se nalazi mašinska instrukcija koju mikroprocesor Cortex-M3, unutar posmatranog STM32F103R6 mikrokontrolera, prvu izvršava nakon reseta? Odgovor uneti prema formatu neoznačenih heksadecimalnih literala u C programskom jeziku širine 32 bita.

:020000040800F2
:100000000028002039070008AF010008B1010008B0
:10001000B3010008B5010008B701000800000000A6
:10002000000000000000000000000000B90100080E
:10003000BB01000800000000BD010008BF0100086E
:10004000BD090008BD090008BD090008BD09000878
:10005000BD090008BD090008BD090008BD09000868
:10006000BD090008BD090008BD090008BD09000858

Odgovor: 0x08000739

Objašnjenje: Fajl treba provući kroz isticanje sintakse kako bi bilo jasnije o čemu se radi. Svaka linija počinje sa dve tačke i zatim brojem bajtova podataka u toj liniji, koji za potrebe zadatka nisu relevantni. Zatim dolazi adresa na kojoj se nalazi pomenuti sadržaj pa tip zapisa. U prvoj liniji vidimo da je tip zapisa 04, odnosno proširenje adrese, pa adresa tog zapisa nije relevantna. Zatim slede dva bajta podatka, 0800, koji kažu da se naredni delovi fajla nalaze na adresi koja počinje sa 0x0800, odnosno nalazi se u fleš memoriji kontrolera. U drugoj liniji vidimo zapis tipa 00, odnosno podatak, sa adresom 0000, odnosno 0x08000000 kad se doda gorepomenuto proširenje adrese. To je adresa na kojoj se nalazi inicijalna vrednost SP, i delić memorije 00280020 nam govori njegovu vrednost. Pošto je sadržaj memorije u little-endian formatu, to znači da je ova vrednost 0x20002800. Naredna četiri bajta, zato, predstavljaju adresu prekidne rutine za reset, odnosno inicijalnu vrednost PC nakon resetovanja mikrokontrolera. U memoriji piše 39070008 pa je ta adresa 0x08000739, i to je odgovor na ovo pitanje.

2. zadatak

U nastavku je opisan jedan od izuzetaka Cortex-M3 procesora:

"Izuzetak se javlja usled greške prilikom obrade nekog izuzetaka[sic] ili ukoliko neki izuzetak nije moguće obraditi na bilo koji drugi način."

O kojem izuzetku je reč?

  1. Reset
  2. Hard fault
  3. Bus fault
  4. NMI
  5. Usage fault


3. zadatak

Isti zadatak kao sa avgustovskog ispita 2022. godine, samo promenjeni brojevi u .vector_table sekciji.

4. zadatak

U nastavku je prikazan sadržaj dve datoteke: (1) linkerska skripta i (2) izvorni asemblerski kod programa. Posmatra se izvršavanje datog programa koji je rezultat linkovanja pomoću prikazane linkerske skripte.

Koja vrednost se nalazi u registru R0 u trenutku kada tok kontrole prvi put stigne do adrese ukazane labelom leave_default_handler? Odgovor uneti prema formatu neoznačenih heksadecimalnih literala u C programskom jeziku širine 32 bita.

Linkerska skripta:

MEMORY
{
    FLASH(rx) : ORIGIN = 0x08000000, LENGTH = 32K
    SRAM(rwx) : ORIGIN = 0x20000000, LENGTH = 10K
}
SECTIONS
{
    .vector_table : { *(.vector_table) } > FLASH
    .text : { *(.text*) } > FLASH
}

Izvorni asemblerski kod programa:

.cpu cortex-m3
.fpu softvfp
.syntax unified
.thumb

.section .vector_table, "a"
.word 0x20000064
.word reset_handler
.rept 15
.word default_handler
.endr

.equ SCB_ICSR, 0xE000ED04

.section .text.reset_handler
.type reset_handler, %function
reset_handler:
    nop
    nop
    svc 0
    nop
infinite_loop:
    b infinite_loop

.section .text.default_handler
.type default_handler, %function
default_handler:
    mrs r0, ipsr
leave_default_handler:
    bx lr
.end

Odgovor: 0x0000000B

Objašnjenje: U registar R0 upisuje se vrednost IPSR registra, koji u sebi sadrži samo broj prekidne rutine koja se trenutno izvršava. Instrukcija svc okida SVCall prekidnu rutinu, i broj te prekidne rutine je 11 odnosno heksadecimalno 0xB.

5. zadatak

Sličan zadatak kao sa avgustovskog ispita 2022. godine.

Ukoliko neki od brojača tajmera kod mikrokontrolera STM32F103R6 broji naviše i vrednost Repetion Counter[sic] je 2, kada se dešava UEV (Update Event) tog tajmera?

  1. Svaki drugi put kada se desi Counter Underflow Event
  2. Svaki treći put kada se desi Counter Underflow Event
  3. Svaki drugi put kada se desi Counter Overflow Event
  4. Svaki treći put kada se desi Counter Overflow Event