Микропроцесорски системи/Фебруар 2023

Извор: SI Wiki
Пређи на навигацију Пређи на претрагу

Фебруарски испит 2023. године одржан је 19. фебруара и на њему је била доступна сва потребна документација и презентације са предавања.

  • За питања са више одговора, тачни одговори су подебљани и уоквирени
  • За питања за које се одговори уносе, тачни одговори су подвучени и сакривени, тако да се прикажу када изаберете тај текст (пример: овако)
  • Притисните лево дугме испод за сакривање и откривање свих одговора, или десно дугме за укључивање и искључивање интерактивног режима:

Теорија

1. задатак

Сличан задатак као са августовског испита 2022. године.

У наставку је дат део садржаја Intel HEX датотеке направљене за STM32F103R6 микроконтролер. На којој адреси се налази машинска инструкција коју микропроцесор Cortex-M3, унутар посматраног STM32F103R6 микроконтролера, прву извршава након ресета? Одговор унети према формату неозначених хексадецималних литерала у C програмском језику ширине 32 бита.

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

Одговор: 0x08000739

Објашњење: Фајл треба провући кроз истицање синтаксе како би било јасније о чему се ради. Свака линија почиње са две тачке и затим бројем бајтова података у тој линији, који за потребе задатка нису релевантни. Затим долази адреса на којој се налази поменути садржај па тип записа. У првој линији видимо да је тип записа 04, односно проширење адресе, па адреса тог записа није релевантна. Затим следе два бајта податка, 0800, који кажу да се наредни делови фајла налазе на адреси која почиње са 0x0800, односно налази се у флеш меморији контролера. У другој линији видимо запис типа 00, односно податак, са адресом 0000, односно 0x08000000 кад се дода горепоменуто проширење адресе. То је адреса на којој се налази иницијална вредност SP, и делић меморије 00280020 нам говори његову вредност. Пошто је садржај меморије у little-endian формату, то значи да је ова вредност 0x20002800. Наредна четири бајта, зато, представљају адресу прекидне рутине за ресет, односно иницијалну вредност PC након ресетовања микроконтролера. У меморији пише 39070008 па је та адреса 0x08000739, и то је одговор на ово питање.

2. задатак

У наставку је описан један од изузетака Cortex-M3 процесора:

"Изузетак се јавља услед грешке приликом обраде неког изузетака[sic] или уколико неки изузетак није могуће обрадити на било који други начин."

О којем изузетку је реч?

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


3. задатак

Исти задатак као са августовског испита 2022. године, само промењени бројеви у .vector_table секцији.

4. задатак

У наставку је приказан садржај две датотеке: (1) линкерска скрипта и (2) изворни асемблерски код програма. Посматра се извршавање датог програма који је резултат линковања помоћу приказане линкерске скрипте.

Која вредност се налази у регистру R0 у тренутку када ток контроле први пут стигне до адресе указане лабелом leave_default_handler? Одговор унети према формату неозначених хексадецималних литерала у C програмском језику ширине 32 бита.

Линкерска скрипта:

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

Изворни асемблерски код програма:

.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

Одговор: 0x0000000B

Објашњење: У регистар R0 уписује се вредност IPSR регистра, који у себи садржи само број прекидне рутине која се тренутно извршава. Инструкција svc окида SVCall прекидну рутину, и број те прекидне рутине је 11 односно хексадецимално 0xB.

5. задатак

Сличан задатак као са августовског испита 2022. године.

Уколико неки од бројача тајмера код микроконтролера STM32F103R6 броји навише и вредност Repetion Counter[sic] је 2, када се дешава UEV (Update Event) тог тајмера?

  1. Сваки други пут када се деси Counter Underflow Event
  2. Сваки трећи пут када се деси Counter Underflow Event
  3. Сваки други пут када се деси Counter Overflow Event
  4. Сваки трећи пут када се деси Counter Overflow Event