Микропроцесорски системи/Фебруар 2023
Фебруарски испит 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] или уколико неки изузетак није могуће обрадити на било који други начин."
О којем изузетку је реч?
- Reset
- Hard fault
- Bus fault
- NMI
- 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) тог тајмера?
- Сваки други пут када се деси Counter Underflow Event
- Сваки трећи пут када се деси Counter Underflow Event
- Сваки други пут када се деси Counter Overflow Event
- Сваки трећи пут када се деси Counter Overflow Event