<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="sr">
	<id>https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2022</id>
	<title>Микропроцесорски системи/Август 2022 - Историја измена</title>
	<link rel="self" type="application/atom+xml" href="https://siwiki.rs/w/index.php?action=history&amp;feed=atom&amp;title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8%2F%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2022"/>
	<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2022&amp;action=history"/>
	<updated>2026-06-04T06:11:52Z</updated>
	<subtitle>Историја измена ове странице на пројекту</subtitle>
	<generator>MediaWiki 1.39.8</generator>
	<entry>
		<id>https://siwiki.rs/w/index.php?title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2022&amp;diff=5259&amp;oldid=prev</id>
		<title>KockaAdmiralac: Prebačene pitalice sa Микропроцесорски системи/Питалице</title>
		<link rel="alternate" type="text/html" href="https://siwiki.rs/w/index.php?title=%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%90%D0%B2%D0%B3%D1%83%D1%81%D1%82_2022&amp;diff=5259&amp;oldid=prev"/>
		<updated>2023-01-26T14:25:54Z</updated>

		<summary type="html">&lt;p&gt;Prebačene pitalice sa &lt;a href=&quot;/wiki/%D0%9C%D0%B8%D0%BA%D1%80%D0%BE%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D0%BE%D1%80%D1%81%D0%BA%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B8/%D0%9F%D0%B8%D1%82%D0%B0%D0%BB%D0%B8%D1%86%D0%B5&quot; class=&quot;mw-redirect&quot; title=&quot;Микропроцесорски системи/Питалице&quot;&gt;Микропроцесорски системи/Питалице&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Нова страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;{{tocright}}&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Августовски испит 2022. године&amp;#039;&amp;#039;&amp;#039; одржан је 25. августа и на њему је била доступна сва потребна документација и презентације са предавања. Поставка рока није доступна са странице предмета. Није много познато о овом року, осим теоријских питања наведених испод.&lt;br /&gt;
&lt;br /&gt;
== Теорија ==&lt;br /&gt;
=== 1. задатак ===&lt;br /&gt;
У наставку је дат део садржаја &amp;#039;&amp;#039;Intel HEX&amp;#039;&amp;#039; датотеке направљене за &amp;#039;&amp;#039;STM32F103R6&amp;#039;&amp;#039; микроконтролер. На којој адреси се налази машинска инструкција коју микропроцесор &amp;#039;&amp;#039;Cortex-M3&amp;#039;&amp;#039;, унутар посматраног &amp;#039;&amp;#039;STM32F103R6&amp;#039;&amp;#039; микроконтролера, прву извршава након ресета? Одговор унети према формату неозначених хексадецималних литерала у &amp;#039;&amp;#039;C&amp;#039;&amp;#039; програмском језику ширине 32 бита.&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;02&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: purple;&amp;quot;&amp;gt;0000&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;04&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0800&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;F2&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0000&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;00280020C70A0008AF010008B1010008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;B0&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0010&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;B3010008B5010008B701000800000000&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;A6&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0020&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;000000000000000000000000B9010008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;0E&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0030&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;BB01000800000000BD010008BF010008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;6E&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0040&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;BD090008BD090008BD090008BD090008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;78&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0050&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;BD090008BD090008BD090008BD090008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;68&amp;lt;/span&amp;gt;&lt;br /&gt;
 :&amp;lt;span style=&amp;quot;color: orange;&amp;quot;&amp;gt;10&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: blue;&amp;quot;&amp;gt;0060&amp;lt;/span&amp;gt;&amp;lt;span style=&amp;quot;color: red;&amp;quot;&amp;gt;00&amp;lt;/span&amp;gt;BD090008BD090008BD090008BD090008&amp;lt;span style=&amp;quot;color: green;&amp;quot;&amp;gt;58&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Одговор:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;0x08000AC7&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Објашњење:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Фајл треба провући кроз истицање синтаксе како би било јасније о чему се ради. Свака линија почиње са две тачке и затим бројем бајтова података у тој линији, који за потребе задатка нису релевантни. Затим долази адреса на којој се налази поменути садржај па тип записа. У првој линији видимо да је тип записа &amp;lt;code&amp;gt;04&amp;lt;/code&amp;gt;, односно проширење адресе, па адреса тог записа није релевантна. Затим следе два бајта податка, &amp;lt;code&amp;gt;0800&amp;lt;/code&amp;gt;, који кажу да се наредни делови фајла налазе на адреси која почиње са &amp;lt;code&amp;gt;0x0800&amp;lt;/code&amp;gt;, односно налази се у флеш меморији контролера. У другој линији видимо запис типа &amp;lt;code&amp;gt;00&amp;lt;/code&amp;gt;, односно податак, са адресом &amp;lt;code&amp;gt;0000&amp;lt;/code&amp;gt;, односно &amp;lt;code&amp;gt;0x08000000&amp;lt;/code&amp;gt; кад се дода горепоменуто проширење адресе. То је адреса на којој се налази иницијална вредност SP, и делић меморије &amp;lt;code&amp;gt;00280020&amp;lt;/code&amp;gt; нам говори његову вредност. Пошто је садржај меморије у &amp;#039;&amp;#039;little-endian&amp;#039;&amp;#039; формату, то значи да је ова вредност &amp;lt;code&amp;gt;0x20002800&amp;lt;/code&amp;gt;. Наредна четири бајта, зато, представљају адресу прекидне рутине за ресет, односно иницијалну вредност PC након ресетовања микроконтролера. У меморији пише &amp;lt;code&amp;gt;C70A0008&amp;lt;/code&amp;gt; па је та адреса &amp;lt;code&amp;gt;0x08000AC7&amp;lt;/code&amp;gt;, и то је одговор на ово питање.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 2. задатак ===&lt;br /&gt;
У наставку је описан један од изузетака &amp;#039;&amp;#039;Cortex-M3&amp;#039;&amp;#039; процесора:&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;#039;&amp;#039;Изузетак се јавља услед грешке директно повезане са извршавањем инструкције (недефинсана инструкција, недозвољени непоравнат приступ итд).&amp;#039;&amp;#039;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
О којем изузетку је реч?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# Reset&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Usage fault&amp;lt;/span&amp;gt;&lt;br /&gt;
# Bus fault&lt;br /&gt;
# NMI&lt;br /&gt;
# Hard fault&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 3. задатак ===&lt;br /&gt;
У наставку је приказан садржај две датотеке: (1) линкерска скрипта и (2) изворни асемблерски код програма.&lt;br /&gt;
&lt;br /&gt;
Посматра се извршавање на &amp;#039;&amp;#039;STM32F103R6&amp;#039;&amp;#039; микроконтролеру датог програма који је резултат линковања помоћу приказане линкерске скрипте.&lt;br /&gt;
&lt;br /&gt;
Која вредност се налази у регистру &amp;#039;&amp;#039;R1&amp;#039;&amp;#039; у тренутку када ток контроле стигне до адресе указане лабелом &amp;lt;code&amp;gt;target&amp;lt;/code&amp;gt;? Одговор унети према формату неозначених хексадецималних литерала у C програмском језику ширине 32 бита.&lt;br /&gt;
&lt;br /&gt;
Линкерска скрипта:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MEMORY&lt;br /&gt;
{&lt;br /&gt;
    FLASH(rx) : ORIGIN = 0x08000000, LENGTH = 32K&lt;br /&gt;
    SRAM(rwx) : ORIGIN = 0x20000000, LENGTH = 10K&lt;br /&gt;
}&lt;br /&gt;
SECTIONS&lt;br /&gt;
{&lt;br /&gt;
    .vector_table : { *(.vector_table) } &amp;gt; FLASH&lt;br /&gt;
    .text : { *(.text*) } &amp;gt; FLASH&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Изворни асемблерски код програма:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.cpu cortex-m3&lt;br /&gt;
.fpu softvfp&lt;br /&gt;
.syntax unified&lt;br /&gt;
.thumb&lt;br /&gt;
&lt;br /&gt;
.section .vector_table, &amp;quot;a&amp;quot;&lt;br /&gt;
.word 0x20001200&lt;br /&gt;
.word reset_handler&lt;br /&gt;
.word 0x20001300&lt;br /&gt;
.word 0x20001400&lt;br /&gt;
.word 0x20001500&lt;br /&gt;
&lt;br /&gt;
.section .text.reset_handler&lt;br /&gt;
.type reset_handler, %function&lt;br /&gt;
reset_handler:&lt;br /&gt;
    mov r1, sp&lt;br /&gt;
    nop&lt;br /&gt;
    nop&lt;br /&gt;
    nop&lt;br /&gt;
target:&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Одговор:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;0x20001200&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Објашњење:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Иницијална вредност SP добија се из првог улаза вектор табеле. Пошто из линкерске скрипте видимо да је секција &amp;lt;code&amp;gt;.vector_table&amp;lt;/code&amp;gt; мапирана на почетак флеш меморије, то значи да се у њој чувају подаци вектор табеле. Пошто је први податак у овој вектор табели &amp;lt;code&amp;gt;0x20001200&amp;lt;/code&amp;gt;, а у ресет рутини се R1 поставља на SP, то је и одговор на ово питање.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 4. задатак ===&lt;br /&gt;
У наставку је приказан садржај две датотеке: (1) линкерска скрипта и (2) изворни асемблерски код програма. Посматра се извршавање датог програма који је резултат линковања помоћу приказане линкерске скрипте.&lt;br /&gt;
&lt;br /&gt;
Која вредност се налази у регистру &amp;#039;&amp;#039;R0&amp;#039;&amp;#039; у тренутку када ток контроле први пут стигне до адресе указане лабелом &amp;lt;code&amp;gt;leave_default_handler&amp;lt;/code&amp;gt;? Одговор унети према формату неозначених хексадецималних литерала у &amp;#039;&amp;#039;C&amp;#039;&amp;#039; програмском језику ширине 32 бита.&lt;br /&gt;
&lt;br /&gt;
Линкерска скрипта:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MEMORY&lt;br /&gt;
{&lt;br /&gt;
    FLASH(rx) : ORIGIN = 0x08000000, LENGTH = 32K&lt;br /&gt;
    SRAM(rwx) : ORIGIN = 0x20000000, LENGTH = 10K&lt;br /&gt;
}&lt;br /&gt;
SECTIONS&lt;br /&gt;
{&lt;br /&gt;
    .vector_table : { *(.vector_table) } &amp;gt; FLASH&lt;br /&gt;
    .text : { *(.text*) } &amp;gt; FLASH&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
Изворни асемблерски код програма:&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;asm&amp;quot;&amp;gt;&lt;br /&gt;
.cpu cortex-m3&lt;br /&gt;
.fpu softvfp&lt;br /&gt;
.syntax unified&lt;br /&gt;
.thumb&lt;br /&gt;
&lt;br /&gt;
.section .vector_table, &amp;quot;a&amp;quot;&lt;br /&gt;
.word 0x20000064&lt;br /&gt;
.word reset_handler&lt;br /&gt;
.rept 15&lt;br /&gt;
.word default_handler&lt;br /&gt;
.endr&lt;br /&gt;
&lt;br /&gt;
.equ SCB_ICSR, 0xE000ED04&lt;br /&gt;
&lt;br /&gt;
.section .text.reset_handler&lt;br /&gt;
.type reset_handler, %function&lt;br /&gt;
reset_handler:&lt;br /&gt;
    ldr r0, =SCB_ICSR&lt;br /&gt;
    ldr r1, =0x10000000&lt;br /&gt;
    str r1, [r0]&lt;br /&gt;
    nop&lt;br /&gt;
infinite_loop:&lt;br /&gt;
    b infinite_loop&lt;br /&gt;
&lt;br /&gt;
.section .text.default_handler&lt;br /&gt;
.type default_handler, %function&lt;br /&gt;
default_handler:&lt;br /&gt;
    mrs r0, ipsr&lt;br /&gt;
leave_default_handler:&lt;br /&gt;
    bx lr&lt;br /&gt;
.end&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Одговор:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;text&amp;quot;&amp;gt;0x0000000E&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Објашњење:&amp;#039;&amp;#039;&amp;#039; &amp;lt;span class=&amp;quot;spoiler&amp;quot; data-solution=&amp;quot;explanation&amp;quot;&amp;gt;Програм изнад почиње тако што у ресет рутини напише &amp;lt;code&amp;gt;0x10000000&amp;lt;/code&amp;gt; у &amp;lt;code&amp;gt;SCB_ICSR&amp;lt;/code&amp;gt; (односно меморијску адресу &amp;lt;code&amp;gt;0xE000ED04&amp;lt;/code&amp;gt; која том регистру одговара). Ово значи да је на месту &amp;lt;code&amp;gt;PENDSVSET&amp;lt;/code&amp;gt; бита уписана вредност 1, и да се активира прекид типа &amp;#039;&amp;#039;PendSV&amp;#039;&amp;#039;. У рутини за &amp;#039;&amp;#039;PendSV&amp;#039;&amp;#039; (као и многе друге изузетке) се у регистар R0 уписује вредност IPSR регистра, који у себи садржи само број прекидне рутине која се тренутно извршава. Пошто је број прекидне рутине за &amp;#039;&amp;#039;PendSV&amp;#039;&amp;#039; 14, одговор је 14 у хексадецималном бројном систему.&amp;lt;/span&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== 5. задатак ===&lt;br /&gt;
Уколико неки од бројача тајмера код микроконтролера &amp;#039;&amp;#039;STM32F103R6&amp;#039;&amp;#039; броји наниже и вредност &amp;#039;&amp;#039;Repetion Counter&amp;#039;&amp;#039;&amp;lt;sup&amp;gt;[sic]&amp;lt;/sup&amp;gt; је 2, када се дешава UEV (&amp;#039;&amp;#039;Update Event&amp;#039;&amp;#039;) тог тајмера?&lt;br /&gt;
&amp;lt;div class=&amp;quot;abc-list&amp;quot; data-solution=&amp;quot;single&amp;quot;&amp;gt;&lt;br /&gt;
# Сваки други пут када се деси &amp;#039;&amp;#039;Counter Overflow Event&amp;#039;&amp;#039;&lt;br /&gt;
# Сваки трећи пут када се деси &amp;#039;&amp;#039;Counter Overflow Event&amp;#039;&amp;#039;&lt;br /&gt;
# Сваки други пут када се деси &amp;#039;&amp;#039;Counter Underflow Event&amp;#039;&amp;#039;&lt;br /&gt;
# &amp;lt;span class=&amp;quot;solution&amp;quot;&amp;gt;Сваки трећи пут када се деси &amp;#039;&amp;#039;Counter Underflow Event&amp;#039;&amp;#039;&amp;lt;/span&amp;gt;&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категорија:Микропроцесорски системи]]&lt;br /&gt;
[[Категорија:Рокови]]&lt;/div&gt;</summary>
		<author><name>KockaAdmiralac</name></author>
	</entry>
</feed>