feat: publish FreeRTOS C FC03 card

This commit is contained in:
2026-07-19 16:36:02 +02:00
commit 34d08ae979
203 changed files with 57403 additions and 0 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 38 KiB

+19
View File
@@ -0,0 +1,19 @@
@startuml
!include card-uml-style.iuml
scale 620 width
top to bottom direction
class "01 Hazard3 timer\nmtime · mtimecmp" as Timer <<hardware>>
class "02 RV32I FreeRTOS port\nmachine-timer trap · tick hook" as Port <<boundary>>
class "03 FreeRTOS scheduler\nReady lists · priorities · time slice" as Scheduler <<kernel>>
class "04 C application tasks\npeerA · peerB · high probe · verifier" as Application <<application>>
Timer --> Port : interrupt when mtime >= mtimecmp
Port --> Scheduler : xTaskIncrementTick()
Scheduler --> Application : select highest-priority Ready task
note right of Port
Tick hook records bounded evidence only.
Application uses public task APIs.
end note
@enduml
+96
View File
@@ -0,0 +1,96 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="502.6301px" preserveAspectRatio="none" style="width:614px;height:502px;" version="1.1" viewBox="0 0 614 502" width="614.6243px" zoomAndPan="magnify"><defs/><g><!--MD5=[1b844c90688aafb95cd8c95626c3b83a]
class Timer--><rect fill="#F5F8FA" height="73.2232" id="Timer" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="170.2312" x="77.5" y="7.2483"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="62.7168" x="131.2572" y="26.2518">«hardware»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="137.0809" x="94.0751" y="51.8023">01 Hazard3 timer</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="129.0173" x="98.1069" y="67.4465">mtime · mtimecmp</text><!--MD5=[a0bfe97ac0a38e6e74cc1c7c7b744b71]
class Port--><rect fill="#F5F8FA" height="73.2232" id="Port" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="258.0347" x="33.5983" y="144.9832"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="62.7168" x="131.2572" y="163.9868">«boundary»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="185.4624" x="69.8844" y="189.5372">02 RV32I FreeRTOS port</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="241.9075" x="41.6618" y="205.1814">machine-timer trap · tick hook</text><!--MD5=[8523c9eb2e1b5151dfc9c2a797373c5f]
class Scheduler--><rect fill="#F5F8FA" height="73.2232" id="Scheduler" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="314.4798" x="5.3757" y="282.7182"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="50.1734" x="137.5289" y="301.7218">«kernel»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="177.3988" x="73.9162" y="327.2722">03 FreeRTOS scheduler</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="298.3526" x="13.4393" y="342.9164">Ready lists · priorities · time slice</text><!--MD5=[0b4e4b4980470ea387cc45de9bd14b5b]
class Application--><rect fill="#F5F8FA" height="73.2232" id="Application" style="stroke: #607985; stroke-width: 1.3439306358381504;" width="314.4798" x="5.3757" y="420.4442"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="9.8555" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="81.5318" x="121.8497" y="439.4478">«application»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="185.4624" x="69.8844" y="464.9982">04 C application tasks</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="13.4393" lengthAdjust="spacingAndGlyphs" textLength="298.3526" x="13.4393" y="480.6424">peerA · peerB · high probe · verifier</text><path d="M323.4393,159.2199 L323.4393,178.0081 L291.9734,181.5919 L323.4393,185.1757 L323.4393,203.9616 A0,0 0 0 0 323.4393,203.9616 L603.8728,203.9616 A0,0 0 0 0 603.8728,203.9616 L603.8728,168.1795 L594.9133,159.2199 L323.4393,159.2199 A0,0 0 0 0 323.4393,159.2199 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.8959537572254336;"/><path d="M594.9133,159.2199 L594.9133,168.1795 L603.8728,168.1795 L594.9133,159.2199 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.8959537572254336;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="10.7514" lengthAdjust="spacingAndGlyphs" textLength="250.8671" x="334.1908" y="179.0552">Tick hook records bounded evidence only.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="10.7514" lengthAdjust="spacingAndGlyphs" textLength="213.237" x="334.1908" y="191.5705">Application uses public task APIs.</text><!--MD5=[03ba2351f170e1f43ca8cdfe4a465b34]
link Timer to Port--><path d="M162.6156,80.8329 C162.6156,98.7251 162.6156,120.4341 162.6156,139.0251 " fill="none" id="Timer-&gt;Port" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,143.3347,166.1994,135.2711,162.6156,138.8549,159.0318,135.2711,162.6156,143.3347" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="229.3642" x="168.8873" y="117.2043">interrupt when mtime &gt;= mtimecmp</text><!--MD5=[2547f420d094b531404e4e613dbd9530]
link Port to Scheduler--><path d="M162.6156,218.5679 C162.6156,236.4601 162.6156,258.1601 162.6156,276.7601 " fill="none" id="Port-&gt;Scheduler" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,281.0697,166.1994,273.0061,162.6156,276.5899,159.0318,273.0061,162.6156,281.0697" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="143.3526" x="168.8873" y="254.9393">xTaskIncrementTick()</text><!--MD5=[f41f4fa5c5c04a19c1d6c66df1ba7f13]
link Scheduler to Application--><path d="M162.6156,356.2939 C162.6156,374.1861 162.6156,395.8951 162.6156,414.4951 " fill="none" id="Scheduler-&gt;Application" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><polygon fill="#607985" points="162.6156,418.8046,166.1994,410.741,162.6156,414.3249,159.0318,410.741,162.6156,418.8046" style="stroke: #607985; stroke-width: 1.1647398843930636;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="12.5434" lengthAdjust="spacingAndGlyphs" textLength="243.6994" x="168.8873" y="392.6653">select highest-priority Ready task</text><!--MD5=[dcf19c44d9290853f91ec953b4b334e5]
@startuml
skinparam backgroundColor white
skinparam shadowing false
skinparam monochrome false
skinparam defaultFontName "DejaVu Sans Mono"
skinparam defaultFontSize 14
skinparam defaultFontColor #24343D
skinparam titleFontName "DejaVu Sans Mono"
skinparam titleFontSize 13
skinparam titleFontColor #536B78
skinparam titleFontStyle plain
skinparam ArrowColor #607985
skinparam ArrowFontColor #425B67
skinparam ArrowThickness 1.3
skinparam LineThickness 1.3
skinparam nodesep 36
skinparam ranksep 42
skinparam Padding 6
skinparam classBackgroundColor #F5F8FA
skinparam classBorderColor #607985
skinparam classBorderThickness 1.5
skinparam classFontColor #1F3039
skinparam classFontSize 15
skinparam classAttributeFontColor #2E424D
skinparam classAttributeFontSize 13
skinparam classStereotypeFontColor #526B77
skinparam classStereotypeFontSize 11
skinparam minClassWidth 190
skinparam ClassAttributeIconSize 0
skinparam stateBackgroundColor #F5F8FA
skinparam stateBorderColor #607985
skinparam stateBorderThickness 1.5
skinparam stateFontColor #1F3039
skinparam stateFontSize 14
skinparam stateAttributeFontSize 13
skinparam noteBackgroundColor #F7F5ED
skinparam noteBorderColor #8A887C
skinparam noteFontColor #3E4B50
skinparam noteFontSize 12
skinparam ParticipantBackgroundColor #F5F8FA
skinparam ParticipantBorderColor #607985
skinparam ParticipantBorderThickness 1.5
skinparam ParticipantFontColor #1F3039
skinparam ParticipantFontSize 13
skinparam ActorBorderColor #607985
skinparam ActorFontColor #1F3039
skinparam LifeLineBorderColor #8297A1
skinparam LifeLineBackgroundColor #F9FBFC
skinparam SequenceArrowColor #607985
skinparam SequenceMessageAlign center
skinparam ParticipantPadding 18
skinparam BoxPadding 8
hide circle
hide empty members
scale 620 width
top to bottom direction
class "01 Hazard3 timer\nmtime · mtimecmp" as Timer <<hardware>>
class "02 RV32I FreeRTOS port\nmachine-timer trap · tick hook" as Port <<boundary>>
class "03 FreeRTOS scheduler\nReady lists · priorities · time slice" as Scheduler <<kernel>>
class "04 C application tasks\npeerA · peerB · high probe · verifier" as Application <<application>>
Timer - -> Port : interrupt when mtime >= mtimecmp
Port - -> Scheduler : xTaskIncrementTick()
Scheduler - -> Application : select highest-priority Ready task
note right of Port
Tick hook records bounded evidence only.
Application uses public task APIs.
end note
@enduml
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 25.0.4-ea+4-1-Debian
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg>

After

Width:  |  Height:  |  Size: 8.8 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

+53
View File
@@ -0,0 +1,53 @@
@startuml
!include card-uml-style.iuml
scale 900 width
left to right direction
class "01 PeerContext [2]" as Peers <<C struct>> {
id : uint32_t
configured_priority : UBaseType_t = 2
handle : TaskHandle_t
iterations · checksum
first_tick · last_tick
entry_sp · stack range
}
class "02 HighProbeContext" as Probe <<C struct>> {
initial_priority = 0
target_priority = 3
handle : TaskHandle_t
run_tick
ran_before_caller_returned
}
class "03 VerifierContext" as Verify <<C struct>> {
configured_priority = 1
handle : TaskHandle_t
pass
}
class "04 switch trace" as SwitchTrace <<bounded record>> {
task[16]
tick[16]
count · changes
captured A · B · A
}
class "05 preemption markers" as OrderTrace <<bounded record>> {
1 = before_raise
2 = high_probe
3 = after_raise
}
Peers --> SwitchTrace : one entry per observed task change
Peers --> Probe : vTaskPrioritySet(handle, 3)
Probe --> OrderTrace : marker 2
Peers --> OrderTrace : markers 1 and 3
Verify --> Peers : checks both
Verify --> Probe : checks preemption proof
note bottom of SwitchTrace
A→B→A is a committed subsequence.
Repeated loop iterations are not logged.
end note
@enduml
+134
View File
@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="324.9253px" preserveAspectRatio="none" style="width:896px;height:324px;" version="1.1" viewBox="0 0 896 324" width="896.2343px" zoomAndPan="magnify"><defs/><g><!--MD5=[24a425f7d3746dcb4595e0db6477f052]
class Peers--><rect fill="#F5F8FA" height="126.4532" id="Peers" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="172.1458" x="192.5882" y="74.5069"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="259.8326" y="85.9172">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="91.9904" x="232.6659" y="101.2584">01 PeerContext [2]</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="193.1261" x2="364.1961" y1="109.0789" y2="109.0789"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="55.9474" x="199.0436" y="120.95">id : uint32_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="159.2349" x="199.0436" y="135.5462">configured_priority : UBaseType_t = 2</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="199.0436" y="150.1425">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="199.0436" y="164.7387">iterations · checksum</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="94.6802" x="199.0436" y="179.335">first_tick · last_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="94.6802" x="199.0436" y="193.9312">entry_sp · stack range</text><!--MD5=[07843a28108f8f9fb73050ea95a4c52b]
class Probe--><rect fill="#F5F8FA" height="111.857" id="Probe" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="124.8057" x="562.9707" y="207.6886"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="606.5451" y="219.0989">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="96.832" x="576.9576" y="234.4401">02 HighProbeContext</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="563.5087" x2="687.2385" y1="242.2606" y2="242.2606"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="86.0729" x="569.4262" y="254.1317">initial_priority = 0</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="81.7693" x="569.4262" y="268.7279">target_priority = 3</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="569.4262" y="283.3242">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="569.4262" y="297.9204">run_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="111.8948" x="569.4262" y="312.5167">ran_before_caller_returned</text><!--MD5=[ec6b96eb83f6cad8feb931a71676c16d]
class Verify--><rect fill="#F5F8FA" height="82.6645" id="Verify" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="111.8948" x="3.2277" y="196.9994"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="37.6569" x="40.3467" y="208.4097">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="91.9904" x="13.1799" y="223.7509">03 VerifierContext</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="3.7657" x2="114.5846" y1="231.5715" y2="231.5715"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="98.9839" x="9.6832" y="243.4425">configured_priority = 1</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="90.3766" x="9.6832" y="258.0387">handle : TaskHandle_t</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="17.2146" x="9.6832" y="272.635">pass</text><!--MD5=[052633df24897554133d204f5acba5bb]
class SwitchTrace--><rect fill="#F5F8FA" height="97.2607" id="SwitchTrace" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="102.2116" x="574.2678" y="44.9946"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="595.2481" y="56.4049">«bounded record»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="77.4656" x="586.6408" y="71.7461">04 switch trace</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="574.8057" x2="675.9414" y1="79.5667" y2="79.5667"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="580.7233" y="91.4377">task[16]</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="580.7233" y="106.034">tick[16]</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="580.7233" y="120.6302">count · changes</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="77.4656" x="580.7233" y="135.2265">captured A · B · A</text><!--MD5=[903c07076df7fb06c97b1a15577bcab5]
class OrderTrace--><rect fill="#F5F8FA" height="82.6645" id="OrderTrace" style="stroke: #607985; stroke-width: 0.8069336521219366;" width="116.1984" x="774.1184" y="93.7119"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="5.9175" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="802.0921" y="105.1222">«bounded record»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="8.0693" lengthAdjust="spacingAndGlyphs" textLength="106.5152" x="778.96" y="120.4634">05 preemption markers</text><line style="stroke: #607985; stroke-width: 0.8069336521219366;" x1="774.6563" x2="889.7788" y1="128.284" y2="128.284"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="68.8583" x="780.5738" y="140.155">1 = before_raise</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="60.251" x="780.5738" y="154.7512">2 = high_probe</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="6.9934" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="780.5738" y="169.3475">3 = after_raise</text><path d="M541.1835,161.4244 L541.1835,188.2886 A0,0 0 0 0 541.1835,188.2886 L709.5637,188.2886 A0,0 0 0 0 709.5637,188.2886 L709.5637,166.8039 L704.1841,161.4244 L627.5254,161.4244 L625.3736,142.4668 L623.2218,161.4244 L541.1835,161.4244 A0,0 0 0 0 541.1835,161.4244 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.5379557680812911;"/><path d="M704.1841,161.4244 L704.1841,166.8039 L709.5637,166.8039 L704.1841,161.4244 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.5379557680812911;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="6.4555" lengthAdjust="spacingAndGlyphs" textLength="124.2678" x="547.639" y="173.334">A→B→A is a committed subsequence.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="6.4555" lengthAdjust="spacingAndGlyphs" textLength="150.6276" x="547.639" y="180.8486">Repeated loop iterations are not logged.</text><!--MD5=[96579476f064ff1ffa3f552d3ff15ad8]
link Peers to SwitchTrace--><path d="M364.8577,126.8016 C429.2833,118.5816 515.5983,107.5643 570.728,100.5278 " fill="none" id="Peers-&gt;SwitchTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="573.3425,100.1943,568.2687,98.6686,570.6741,100.5326,568.81,102.938,573.3425,100.1943" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="146.324" x="379.7968" y="101.2783">one entry per observed task change</text><!--MD5=[e0cf694b28b62e4fb8bc23e78e5c0c4e]
link Peers to Probe--><path d="M364.8577,168.9342 C425.0873,190.8667 504.4411,219.7711 559.5655,239.8476 " fill="none" id="Peers-&gt;Probe" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="562.0669,240.7567,558.2558,237.0762,559.54,239.835,556.7811,241.1193,562.0669,240.7567" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="116.1984" x="394.8595" y="169.5503">vTaskPrioritySet(handle, 3)</text><!--MD5=[5dc87c6eff7493b6adeed17dd71f1a79]
link Probe to OrderTrace--><path d="M687.9271,224.8655 C714.303,208.3879 744.9558,189.2367 771.165,172.8613 " fill="none" id="Probe-&gt;OrderTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="773.3168,171.5111,768.0707,172.2524,771.0359,172.9366,770.3516,175.9018,773.3168,171.5111" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="34.4292" x="724.6264" y="174.9191">marker 2</text><!--MD5=[16ba7551656b4926f6566f6281eca0fa]
link Peers to OrderTrace--><path d="M364.89,88.8273 C452.8942,45.1829 593.0801,-5.9283 709.5637,35.5266 C741.1363,46.7591 770.4603,70.0418 792.4573,91.2642 " fill="none" id="Peers-&gt;OrderTrace" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="794.2487,93.0072,792.2868,88.0855,792.3237,91.1285,789.2808,91.1654,794.2487,93.0072" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="64.5547" x="593.0962" y="14.8288">markers 1 and 3</text><!--MD5=[5305fbff9ac0c80de73336ac373d19f8]
link Verify to Peers--><path d="M115.2516,212.7507 C137.7812,202.379 164.3616,190.1351 189.4465,178.5798 " fill="none" id="Verify-&gt;Peers" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="191.7597,177.5146,186.462,177.593,189.3182,178.6433,188.2679,181.4994,191.7597,177.5146" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="47.3401" x="130.1853" y="179.6369">checks both</text><!--MD5=[58befbd82e70776cbcefaf9d91600c8d]
link Verify to Probe--><path d="M115.1871,240.8159 C220.1261,245.5123 447.208,255.6689 559.3933,260.688 " fill="none" id="Verify-&gt;Probe" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><polygon fill="#607985" points="562.0293,260.8063,557.291,258.4357,559.3423,260.6835,557.0945,262.7348,562.0293,260.8063" style="stroke: #607985; stroke-width: 0.6993424985056784;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="7.5314" lengthAdjust="spacingAndGlyphs" textLength="98.9839" x="229.1692" y="239.1349">checks preemption proof</text><!--MD5=[544ef8bcaf0d67d3a948fb6a2c2ba12b]
@startuml
skinparam backgroundColor white
skinparam shadowing false
skinparam monochrome false
skinparam defaultFontName "DejaVu Sans Mono"
skinparam defaultFontSize 14
skinparam defaultFontColor #24343D
skinparam titleFontName "DejaVu Sans Mono"
skinparam titleFontSize 13
skinparam titleFontColor #536B78
skinparam titleFontStyle plain
skinparam ArrowColor #607985
skinparam ArrowFontColor #425B67
skinparam ArrowThickness 1.3
skinparam LineThickness 1.3
skinparam nodesep 36
skinparam ranksep 42
skinparam Padding 6
skinparam classBackgroundColor #F5F8FA
skinparam classBorderColor #607985
skinparam classBorderThickness 1.5
skinparam classFontColor #1F3039
skinparam classFontSize 15
skinparam classAttributeFontColor #2E424D
skinparam classAttributeFontSize 13
skinparam classStereotypeFontColor #526B77
skinparam classStereotypeFontSize 11
skinparam minClassWidth 190
skinparam ClassAttributeIconSize 0
skinparam stateBackgroundColor #F5F8FA
skinparam stateBorderColor #607985
skinparam stateBorderThickness 1.5
skinparam stateFontColor #1F3039
skinparam stateFontSize 14
skinparam stateAttributeFontSize 13
skinparam noteBackgroundColor #F7F5ED
skinparam noteBorderColor #8A887C
skinparam noteFontColor #3E4B50
skinparam noteFontSize 12
skinparam ParticipantBackgroundColor #F5F8FA
skinparam ParticipantBorderColor #607985
skinparam ParticipantBorderThickness 1.5
skinparam ParticipantFontColor #1F3039
skinparam ParticipantFontSize 13
skinparam ActorBorderColor #607985
skinparam ActorFontColor #1F3039
skinparam LifeLineBorderColor #8297A1
skinparam LifeLineBackgroundColor #F9FBFC
skinparam SequenceArrowColor #607985
skinparam SequenceMessageAlign center
skinparam ParticipantPadding 18
skinparam BoxPadding 8
hide circle
hide empty members
scale 900 width
left to right direction
class "01 PeerContext [2]" as Peers <<C struct>> {
id : uint32_t
configured_priority : UBaseType_t = 2
handle : TaskHandle_t
iterations · checksum
first_tick · last_tick
entry_sp · stack range
}
class "02 HighProbeContext" as Probe <<C struct>> {
initial_priority = 0
target_priority = 3
handle : TaskHandle_t
run_tick
ran_before_caller_returned
}
class "03 VerifierContext" as Verify <<C struct>> {
configured_priority = 1
handle : TaskHandle_t
pass
}
class "04 switch trace" as SwitchTrace <<bounded record>> {
task[16]
tick[16]
count · changes
captured A · B · A
}
class "05 preemption markers" as OrderTrace <<bounded record>> {
1 = before_raise
2 = high_probe
3 = after_raise
}
Peers - -> SwitchTrace : one entry per observed task change
Peers - -> Probe : vTaskPrioritySet(handle, 3)
Probe - -> OrderTrace : marker 2
Peers - -> OrderTrace : markers 1 and 3
Verify - -> Peers : checks both
Verify - -> Probe : checks preemption proof
note bottom of SwitchTrace
A→B→A is a committed subsequence.
Repeated loop iterations are not logged.
end note
@enduml
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 25.0.4-ea+4-1-Debian
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg>

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

+21
View File
@@ -0,0 +1,21 @@
@startuml
!include card-uml-style.iuml
scale 900 width
left to right direction
class "01 peerA\npriority 2 · CPU-bound" as PeerA <<task>>
class "02 peerB\npriority 2 · CPU-bound" as PeerB <<task>>
class "03 high_probe\npriority 0 → 3" as High <<task>>
class "04 verifier\npriority 1 · runs last" as Verifier <<task>>
PeerA <--> PeerB : tick time slicing\nA → B → A
PeerA --> High : raise to priority 3
High --> PeerA : preempts before call returns
PeerA --> Verifier : stop requested after return
PeerB --> Verifier : both peers self-delete
note right of High
HIGH writes marker 2 and self-deletes.
peerA then writes marker 3.
end note
@enduml
+100
View File
@@ -0,0 +1,100 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="233.2553px" preserveAspectRatio="none" style="width:895px;height:233px;" version="1.1" viewBox="0 0 895 233" width="895.7845px" zoomAndPan="magnify"><defs/><g><!--MD5=[d4f5dc331a1814e15a9185448555d0ce]
class PeerA--><rect fill="#F5F8FA" height="57.4191" id="PeerA" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="4.2155" y="96.4426"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="65.3396" y="111.3446">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="56.9087" x="51.6393" y="131.3803">01 peerA</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="10.5386" y="143.648">priority 2 · CPU-bound</text><!--MD5=[627f71e47f335e85ff7a0fe7aa09dc61]
class PeerB--><rect fill="#F5F8FA" height="57.4191" id="PeerB" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="357.6112" y="75.3653"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="418.7354" y="90.2673">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="56.9087" x="405.0351" y="110.3031">02 peerB</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="363.9344" y="122.5707">priority 2 · CPU-bound</text><!--MD5=[87dec8bc37044ee287e36547435f1f2f]
class High--><rect fill="#F5F8FA" height="57.4191" id="High" style="stroke: #607985; stroke-width: 1.053864168618267;" width="133.4895" x="366.7447" y="162.4848"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="418.7354" y="177.3867">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="88.5246" x="389.2272" y="197.4225">03 high_probe</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="88.5246" x="389.2272" y="209.6901">priority 0 → 3</text><!--MD5=[b38b728b548c0e3506dacd7eefeceafe]
class Verifier--><rect fill="#F5F8FA" height="57.4191" id="Verifier" style="stroke: #607985; stroke-width: 1.053864168618267;" width="151.7564" x="706.4403" y="16.3489"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="7.7283" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="29.5082" x="767.5644" y="31.2509">«task»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="75.8782" x="744.3794" y="51.2867">04 verifier</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="10.5386" lengthAdjust="spacingAndGlyphs" textLength="139.1101" x="712.7635" y="63.5543">priority 1 · runs last</text><path d="M677.2834,173.6557 L677.2834,188.3888 L500.5644,191.1991 L677.2834,194.0094 L677.2834,208.7406 A0,0 0 0 0 677.2834,208.7406 L887.3536,208.7406 A0,0 0 0 0 887.3536,208.7406 L887.3536,180.6815 L880.3279,173.6557 L677.2834,173.6557 A0,0 0 0 0 677.2834,173.6557 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.702576112412178;"/><path d="M880.3279,173.6557 L880.3279,180.6815 L887.3536,180.6815 L880.3279,173.6557 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.702576112412178;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="8.4309" lengthAdjust="spacingAndGlyphs" textLength="186.8852" x="685.7143" y="189.2098">HIGH writes marker 2 and self-deletes.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="8.4309" lengthAdjust="spacingAndGlyphs" textLength="132.7869" x="685.7143" y="199.0239">peerA then writes marker 3.</text><!--MD5=[e17ca89136f6e96c8edfc2efe34a138f]
link PeerA to PeerB--><path d="M160.8759,120.3583 C218.3677,116.9157 295.5176,112.2998 352.9532,108.8571 " fill="none" id="PeerA-PeerB" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="356.3396,108.6534,349.8594,106.2268,352.833,108.8638,350.1961,111.8374,356.3396,108.6534" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="157.37,120.5691,163.8502,122.9956,160.8766,120.3587,163.5135,117.3851,157.37,120.5691" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="95.5504" x="206.5574" y="92.034">tick time slicing</text><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="50.5855" x="229.0398" y="103.4838">A → B → A</text><!--MD5=[7fd7a179d117b50a2a0b920d41dd806d]
link PeerA to High--><path d="M104.6136,154.1593 C121.082,171.815 144.6674,192.7799 170.726,202.4403 C232.5246,225.3443 308.2061,218.7541 362.3255,208.7073 " fill="none" id="PeerA-&gt;High" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="365.466,208.1101,358.731,206.5226,362.0142,208.7623,359.7746,212.0455,365.466,208.1101" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="106.7916" x="200.9368" y="195.4111">raise to priority 3</text><!--MD5=[d62c0dcf4c85e672724ed87df3e66a79]
link High to PeerA--><path d="M366.5831,181.3349 C313.4543,173.1007 237.0562,160.5527 170.726,146.9368 C167.4098,146.2553 164.0234,145.5386 160.6089,144.7939 " fill="none" id="High-&gt;PeerA" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="157.3138,144.0703,162.8768,148.1853,160.743,144.8323,164.0961,142.6986,157.3138,144.0703" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="157.377" x="175.644" y="139.9076">preempts before call returns</text><!--MD5=[da61d059c86f4bb0c5cb4c08f1d74312]
link PeerA to Verifier--><path d="M120.8009,96.1616 C135.7588,86.7681 153.3513,77.3396 170.726,71.7611 C353.459,13.0398 582.7869,23.9438 701.7471,35.4169 " fill="none" id="PeerA-&gt;Verifier" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="705.2248,35.7541,699.2049,32.3423,701.7286,35.4125,698.6583,37.9362,705.2248,35.7541" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="151.7564" x="357.6112" y="19.3385">stop requested after return</text><!--MD5=[4142c62ab8c50b841a4bc588d0039040]
link PeerB to Verifier--><path d="M509.5293,91.363 C554.0445,83.8454 611.5012,74.1218 662.5293,65.4379 C675.2529,63.267 688.7424,60.9696 701.8946,58.7213 " fill="none" id="PeerB-&gt;Verifier" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><polygon fill="#607985" points="705.2951,58.1382,698.5887,56.434,701.8325,58.7303,699.5361,61.9741,705.2951,58.1382" style="stroke: #607985; stroke-width: 0.9133489461358314;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="9.8361" lengthAdjust="spacingAndGlyphs" textLength="123.6534" x="533.9578" y="58.4087">both peers self-delete</text><!--MD5=[137f40278e8a32983395a4c1fad58d90]
@startuml
skinparam backgroundColor white
skinparam shadowing false
skinparam monochrome false
skinparam defaultFontName "DejaVu Sans Mono"
skinparam defaultFontSize 14
skinparam defaultFontColor #24343D
skinparam titleFontName "DejaVu Sans Mono"
skinparam titleFontSize 13
skinparam titleFontColor #536B78
skinparam titleFontStyle plain
skinparam ArrowColor #607985
skinparam ArrowFontColor #425B67
skinparam ArrowThickness 1.3
skinparam LineThickness 1.3
skinparam nodesep 36
skinparam ranksep 42
skinparam Padding 6
skinparam classBackgroundColor #F5F8FA
skinparam classBorderColor #607985
skinparam classBorderThickness 1.5
skinparam classFontColor #1F3039
skinparam classFontSize 15
skinparam classAttributeFontColor #2E424D
skinparam classAttributeFontSize 13
skinparam classStereotypeFontColor #526B77
skinparam classStereotypeFontSize 11
skinparam minClassWidth 190
skinparam ClassAttributeIconSize 0
skinparam stateBackgroundColor #F5F8FA
skinparam stateBorderColor #607985
skinparam stateBorderThickness 1.5
skinparam stateFontColor #1F3039
skinparam stateFontSize 14
skinparam stateAttributeFontSize 13
skinparam noteBackgroundColor #F7F5ED
skinparam noteBorderColor #8A887C
skinparam noteFontColor #3E4B50
skinparam noteFontSize 12
skinparam ParticipantBackgroundColor #F5F8FA
skinparam ParticipantBorderColor #607985
skinparam ParticipantBorderThickness 1.5
skinparam ParticipantFontColor #1F3039
skinparam ParticipantFontSize 13
skinparam ActorBorderColor #607985
skinparam ActorFontColor #1F3039
skinparam LifeLineBorderColor #8297A1
skinparam LifeLineBackgroundColor #F9FBFC
skinparam SequenceArrowColor #607985
skinparam SequenceMessageAlign center
skinparam ParticipantPadding 18
skinparam BoxPadding 8
hide circle
hide empty members
scale 900 width
left to right direction
class "01 peerA\npriority 2 · CPU-bound" as PeerA <<task>>
class "02 peerB\npriority 2 · CPU-bound" as PeerB <<task>>
class "03 high_probe\npriority 0 → 3" as High <<task>>
class "04 verifier\npriority 1 · runs last" as Verifier <<task>>
PeerA <- -> PeerB : tick time slicing\nA → B → A
PeerA - -> High : raise to priority 3
High - -> PeerA : preempts before call returns
PeerA - -> Verifier : stop requested after return
PeerB - -> Verifier : both peers self-delete
note right of High
HIGH writes marker 2 and self-deletes.
peerA then writes marker 3.
end note
@enduml
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 25.0.4-ea+4-1-Debian
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg>

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 19 KiB

+36
View File
@@ -0,0 +1,36 @@
@startuml
!include card-uml-style.iuml
scale 900 width
hide footbox
skinparam ParticipantPadding 16
participant "main" as Main
participant "Scheduler" as Scheduler
participant "tick hook" as Tick
participant "high probe" as High
participant "peerA" as A
participant "peerB" as B
participant "verifier" as Verify
Main -> Main : <b>01</b> config + contexts committed
||26||
Main -> High : <b>02</b> create Ready at priority 0
||26||
Main -> A : <b>03</b> priorities high=0, peers=2/2, verifier=1
Main -> B
Main -> Verify
||26||
Main -> Scheduler : <b>04</b> vTaskStartScheduler()
activate Scheduler
Scheduler -> A : <b>05</b> first peer runs
deactivate Scheduler
||26||
Tick -> Tick : <b>06</b> first machine-timer tick recorded
||26||
A -> B : time slice
B -> A : <b>07</b> committed subsequence A → B → A
note over Main,Verify
Continue on part 2/2 with identical participant order.
end note
@enduml
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

+36
View File
@@ -0,0 +1,36 @@
@startuml
!include card-uml-style.iuml
scale 900 width
hide footbox
skinparam ParticipantPadding 16
participant "main" as Main
participant "Scheduler" as Scheduler
participant "tick hook" as Tick
participant "high probe" as High
participant "peerA" as A
participant "peerB" as B
participant "verifier" as Verify
A -> A : <b>08</b> marker before_raise
A -> Scheduler : vTaskPrioritySet(high, 3)
activate Scheduler
Scheduler -> High : <b>09</b> immediate higher-priority selection
activate High
High -> High : marker HIGH
High -> Scheduler : vTaskDelete(NULL)
deactivate High
Scheduler -> A : return to caller
deactivate Scheduler
||26||
A -> A : <b>10</b> marker after_raise; request stop
A -> Scheduler : self-delete after bounded cleanup
B -> Scheduler : <b>11</b> second peer finishes and self-deletes
||26||
Scheduler -> Verify : <b>12</b> lowest-priority verifier publishes PASS
note over Scheduler,Verify
Exact claim: marker projection before → HIGH → after.
Another Ready task may legally run before peerA is selected again.
end note
@enduml
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

+28
View File
@@ -0,0 +1,28 @@
@startuml
!include card-uml-style.iuml
scale 900 width
left to right direction
state "01 high Ready\npriority 0" as HighLow
state "02 high Ready\npriority 3" as HighReady
state "03 high Running" as HighRun
state "04 high Deleted" as HighDeleted
state "05 peers Ready / Running\npriority 2 · time sliced" as Peers
state "06 peers Completed / Deleted" as PeersDone
state "07 verifier Ready\npriority 1" as VerifyReady
state "08 verifier Running\nPASS" as VerifyRun
HighLow --> HighReady : peerA vTaskPrioritySet
HighReady --> HighRun : preempts priority 2
HighRun --> HighDeleted : self-delete
Peers --> Peers : tick rotates equal priority
Peers --> PeersDone : stop after peerA returns
VerifyReady --> VerifyRun : priorities 2/3 no longer Ready
note bottom of Peers
Ready does not mean Running.
Priority selects first; time slicing acts only among equals.
end note
@enduml
File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

+56
View File
@@ -0,0 +1,56 @@
@startuml
!include card-uml-style.iuml
scale 900 width
left to right direction
class "01 timer CSRs" as Timer <<runtime>> {
mtime
mtimecmp
mcause = 0x80000007
mepc = interrupted task PC
}
class "02 ISR evidence" as ISR <<runtime>> {
first_tick_count
ISR sp
one-shot tick checkpoint
}
class "03 scheduler evidence" as Kernel <<debugger only>> {
Ready lists by priority
selected TCB
tick count
}
class "04 peer runtime" as Peer <<runtime>> {
context address
handle / TCB
task stack range
PC · SP · priority 2
}
class "05 high runtime" as High <<runtime>> {
handle / TCB
priority 0 → 3
PC · SP · run_tick
}
class "06 committed evidence" as Evidence <<application>> {
switch trace A · B · A
markers before · HIGH · after
source blob · ELF hash
PASS
}
Timer --> ISR : machine-timer trap
ISR --> Kernel : scheduling opportunity
Kernel --> Peer : equal-priority rotation
Kernel --> High : select after priority raise
Peer --> Evidence
High --> Evidence
note bottom of Kernel
Kernel internals are debugger observations only.
Program assertions use public API and application records.
end note
@enduml
+138
View File
@@ -0,0 +1,138 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" contentScriptType="application/ecmascript" contentStyleType="text/css" height="166.3973px" preserveAspectRatio="none" style="width:897px;height:166px;" version="1.1" viewBox="0 0 897 166" width="897.0057px" zoomAndPan="magnify"><defs/><g><!--MD5=[1b844c90688aafb95cd8c95626c3b83a]
class Timer--><rect fill="#F5F8FA" height="77.3371" id="Timer" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="99.2395" x="2.5665" y="39.683"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="38.712" y="48.7559">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="53.8973" x="25.2376" y="60.9545">01 timer CSRs</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="2.9943" x2="101.3783" y1="67.173" y2="67.173"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="17.1103" x="7.6996" y="76.6123">mtime</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="27.3764" x="7.6996" y="88.2185">mtimecmp</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="65.019" x="7.6996" y="99.8248">mcause = 0x80000007</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="88.9734" x="7.6996" y="111.431">mepc = interrupted task PC</text><!--MD5=[4fa375cf5dd147cdc7dc8493ef379d20]
class ISR--><rect fill="#F5F8FA" height="65.7308" id="ISR" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="92.3954" x="187.3574" y="45.4876"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="220.0808" y="54.5606">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="202.7567" y="66.7591">02 ISR evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="187.7852" x2="279.3251" y1="72.9777" y2="72.9777"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="54.7529" x="192.4905" y="82.417">first_tick_count</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="20.5323" x="192.4905" y="94.0232">ISR sp</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="82.1293" x="192.4905" y="105.6294">one-shot tick checkpoint</text><!--MD5=[daeea0df713f5a1e6085e9f07acfb9b8]
class Kernel--><rect fill="#F5F8FA" height="65.7308" id="Kernel" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="92.3954" x="426.6873" y="45.4876"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="44.9144" x="450.4278" y="54.5606">«debugger only»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="84.6958" x="430.5371" y="66.7591">03 scheduler evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="427.115" x2="518.6549" y1="72.9777" y2="72.9777"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="78.7072" x="431.8203" y="82.417">Ready lists by priority</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="431.8203" y="94.0232">selected TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="34.2205" x="431.8203" y="105.6294">tick count</text><!--MD5=[5502d0b26b9225c8066cf2f4a2442e7f]
class Peer--><rect fill="#F5F8FA" height="77.3371" id="Peer" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="81.2738" x="683.1274" y="3.3237"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="710.2899" y="12.3966">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="692.9658" y="24.5952">04 peer runtime</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="683.5551" x2="763.9734" y1="30.8137" y2="30.8137"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="51.3308" x="688.2605" y="40.253">context address</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="688.2605" y="51.8592">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="54.7529" x="688.2605" y="63.4655">task stack range</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="68.4411" x="688.2605" y="75.0717">PC · SP · priority 2</text><!--MD5=[87dec8bc37044ee287e36547435f1f2f]
class High--><rect fill="#F5F8FA" height="65.7308" id="High" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="81.2738" x="683.1274" y="95.9629"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="26.9487" x="710.2899" y="105.0358">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="692.9658" y="117.2344">05 high runtime</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="683.5551" x2="763.9734" y1="123.453" y2="123.453"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="41.0646" x="688.2605" y="132.8922">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="47.9087" x="688.2605" y="144.4985">priority 0 → 3</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="688.2605" y="156.1047">PC · SP · run_tick</text><!--MD5=[13f56afd7aace6dccdfaaac41cf97a6a]
class Evidence--><rect fill="#F5F8FA" height="77.3371" id="Evidence" style="stroke: #607985; stroke-width: 0.6416349809885932;" width="109.5057" x="782.7947" y="46.9548"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="4.7053" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="38.9259" x="818.0846" y="56.0278">«application»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="6.4163" lengthAdjust="spacingAndGlyphs" textLength="84.6958" x="795.1996" y="68.2263">06 committed evidence</text><line style="stroke: #607985; stroke-width: 0.6416349809885932;" x1="783.2224" x2="891.8726" y1="74.4449" y2="74.4449"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="787.9278" y="83.8842">switch trace A · B · A</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="99.2395" x="787.9278" y="95.4904">markers before · HIGH · after</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="787.9278" y="107.0966">source blob · ELF hash</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="5.5608" lengthAdjust="spacingAndGlyphs" textLength="13.6882" x="787.9278" y="118.7029">PASS</text><path d="M378.9924,126.7015 L378.9924,148.0626 A0,0 0 0 0 378.9924,148.0626 L566.7776,148.0626 A0,0 0 0 0 566.7776,148.0626 L566.7776,130.9791 L562.5,126.7015 L474.596,126.7015 L472.885,111.2937 L471.174,126.7015 L378.9924,126.7015 A0,0 0 0 0 378.9924,126.7015 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.42775665399239543;"/><path d="M562.5,126.7015 L562.5,130.9791 L566.7776,130.9791 L562.5,126.7015 " fill="#F7F5ED" style="stroke: #8A887C; stroke-width: 0.42775665399239543;"/><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="5.1331" lengthAdjust="spacingAndGlyphs" textLength="143.7262" x="384.1255" y="136.1715">Kernel internals are debugger observations only.</text><text fill="#3E4B50" font-family="DejaVu Sans Mono" font-size="5.1331" lengthAdjust="spacingAndGlyphs" textLength="173.6692" x="384.1255" y="142.1467">Program assertions use public API and application records.</text><!--MD5=[251ca16ac899d6bfafc4fee663c65b4c]
link Timer to ISR--><path d="M101.9387,78.3522 C127.6212,78.3522 158.9159,78.3522 184.4957,78.3522 " fill="none" id="Timer-&gt;ISR" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="186.6217,78.3522,182.7719,76.6412,184.4829,78.3522,182.7719,80.0632,186.6217,78.3522" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="61.597" x="113.7833" y="74.0725">machine-timer trap</text><!--MD5=[d88c108211e48cabe7c391ba8266ba05]
link ISR to Kernel--><path d="M279.9625,78.3522 C321.2837,78.3522 381.7685,78.3522 423.8726,78.3522 " fill="none" id="ISR-&gt;Kernel" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="425.9686,78.3522,422.1188,76.6412,423.8298,78.3522,422.1188,80.0632,425.9686,78.3522" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="75.2852" x="291.73" y="74.0725">scheduling opportunity</text><!--MD5=[451546734f5ef62236a1fbbfa501c405]
link Kernel to Peer--><path d="M519.1725,71.6835 C565.1307,64.9976 635.3341,54.7913 680.2785,48.2552 " fill="none" id="Kernel-&gt;Peer" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="682.2933,47.9601,678.2383,46.8173,680.1765,48.266,678.7277,50.2041,682.2933,47.9601" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="78.7072" x="585.5989" y="45.5668">equal-priority rotation</text><!--MD5=[d35ae36b39c9f0c2492e9b2be2215125]
link Kernel to High--><path d="M519.1725,87.6088 C565.1307,96.8869 635.3341,111.0627 680.2785,120.1355 " fill="none" id="Kernel-&gt;High" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="682.2975,120.5418,678.8608,118.1052,680.2008,120.12,678.1859,121.46,682.2975,120.5418" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="5.9886" lengthAdjust="spacingAndGlyphs" textLength="92.3954" x="578.7548" y="94.7888">select after priority raise</text><!--MD5=[533f32753ee57a27250c7f5700b6fd04]
link Peer to Evidence--><path d="M764.4824,57.5589 C769.5471,59.5138 774.7956,61.5456 780.057,63.5775 " fill="none" id="Peer-&gt;Evidence" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="782.0333,64.3389,779.0592,61.355,780.0383,63.5678,777.8255,64.5469,782.0333,64.3389" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><!--MD5=[e08fc291d1c1b0105a0d24240eaba8e1]
link High to Evidence--><path d="M764.4824,113.4111 C769.5471,111.4734 774.7956,109.4672 780.057,107.4525 " fill="none" id="High-&gt;Evidence" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><polygon fill="#607985" points="782.0333,106.6996,777.8263,106.476,780.0355,107.4633,779.0482,109.6725,782.0333,106.6996" style="stroke: #607985; stroke-width: 0.5560836501901141;"/><!--MD5=[b5b70233b96aab6bafbd562394375464]
@startuml
skinparam backgroundColor white
skinparam shadowing false
skinparam monochrome false
skinparam defaultFontName "DejaVu Sans Mono"
skinparam defaultFontSize 14
skinparam defaultFontColor #24343D
skinparam titleFontName "DejaVu Sans Mono"
skinparam titleFontSize 13
skinparam titleFontColor #536B78
skinparam titleFontStyle plain
skinparam ArrowColor #607985
skinparam ArrowFontColor #425B67
skinparam ArrowThickness 1.3
skinparam LineThickness 1.3
skinparam nodesep 36
skinparam ranksep 42
skinparam Padding 6
skinparam classBackgroundColor #F5F8FA
skinparam classBorderColor #607985
skinparam classBorderThickness 1.5
skinparam classFontColor #1F3039
skinparam classFontSize 15
skinparam classAttributeFontColor #2E424D
skinparam classAttributeFontSize 13
skinparam classStereotypeFontColor #526B77
skinparam classStereotypeFontSize 11
skinparam minClassWidth 190
skinparam ClassAttributeIconSize 0
skinparam stateBackgroundColor #F5F8FA
skinparam stateBorderColor #607985
skinparam stateBorderThickness 1.5
skinparam stateFontColor #1F3039
skinparam stateFontSize 14
skinparam stateAttributeFontSize 13
skinparam noteBackgroundColor #F7F5ED
skinparam noteBorderColor #8A887C
skinparam noteFontColor #3E4B50
skinparam noteFontSize 12
skinparam ParticipantBackgroundColor #F5F8FA
skinparam ParticipantBorderColor #607985
skinparam ParticipantBorderThickness 1.5
skinparam ParticipantFontColor #1F3039
skinparam ParticipantFontSize 13
skinparam ActorBorderColor #607985
skinparam ActorFontColor #1F3039
skinparam LifeLineBorderColor #8297A1
skinparam LifeLineBackgroundColor #F9FBFC
skinparam SequenceArrowColor #607985
skinparam SequenceMessageAlign center
skinparam ParticipantPadding 18
skinparam BoxPadding 8
hide circle
hide empty members
scale 900 width
left to right direction
class "01 timer CSRs" as Timer <<runtime>> {
mtime
mtimecmp
mcause = 0x80000007
mepc = interrupted task PC
}
class "02 ISR evidence" as ISR <<runtime>> {
first_tick_count
ISR sp
one-shot tick checkpoint
}
class "03 scheduler evidence" as Kernel <<debugger only>> {
Ready lists by priority
selected TCB
tick count
}
class "04 peer runtime" as Peer <<runtime>> {
context address
handle / TCB
task stack range
PC · SP · priority 2
}
class "05 high runtime" as High <<runtime>> {
handle / TCB
priority 0 → 3
PC · SP · run_tick
}
class "06 committed evidence" as Evidence <<application>> {
switch trace A · B · A
markers before · HIGH · after
source blob · ELF hash
PASS
}
Timer - -> ISR : machine-timer trap
ISR - -> Kernel : scheduling opportunity
Kernel - -> Peer : equal-priority rotation
Kernel - -> High : select after priority raise
Peer - -> Evidence
High - -> Evidence
note bottom of Kernel
Kernel internals are debugger observations only.
Program assertions use public API and application records.
end note
@enduml
PlantUML version 1.2020.02(Sun Mar 01 11:22:07 CET 2020)
(GPL source distribution)
Java Runtime: OpenJDK Runtime Environment
JVM: OpenJDK 64-Bit Server VM
Java Version: 25.0.4-ea+4-1-Debian
Operating System: Linux
Default Encoding: UTF-8
Language: en
Country: null
--></g></svg>

After

Width:  |  Height:  |  Size: 15 KiB

+60
View File
@@ -0,0 +1,60 @@
' Shared print-first style for every diagram in this card.
skinparam backgroundColor white
skinparam shadowing false
skinparam monochrome false
skinparam defaultFontName "DejaVu Sans Mono"
skinparam defaultFontSize 14
skinparam defaultFontColor #24343D
skinparam titleFontName "DejaVu Sans Mono"
skinparam titleFontSize 13
skinparam titleFontColor #536B78
skinparam titleFontStyle plain
skinparam ArrowColor #607985
skinparam ArrowFontColor #425B67
skinparam ArrowThickness 1.3
skinparam LineThickness 1.3
skinparam nodesep 36
skinparam ranksep 42
skinparam Padding 6
skinparam classBackgroundColor #F5F8FA
skinparam classBorderColor #607985
skinparam classBorderThickness 1.5
skinparam classFontColor #1F3039
skinparam classFontSize 15
skinparam classAttributeFontColor #2E424D
skinparam classAttributeFontSize 13
skinparam classStereotypeFontColor #526B77
skinparam classStereotypeFontSize 11
skinparam minClassWidth 190
skinparam ClassAttributeIconSize 0
skinparam stateBackgroundColor #F5F8FA
skinparam stateBorderColor #607985
skinparam stateBorderThickness 1.5
skinparam stateFontColor #1F3039
skinparam stateFontSize 14
skinparam stateAttributeFontSize 13
skinparam noteBackgroundColor #F7F5ED
skinparam noteBorderColor #8A887C
skinparam noteFontColor #3E4B50
skinparam noteFontSize 12
skinparam ParticipantBackgroundColor #F5F8FA
skinparam ParticipantBorderColor #607985
skinparam ParticipantBorderThickness 1.5
skinparam ParticipantFontColor #1F3039
skinparam ParticipantFontSize 13
skinparam ActorBorderColor #607985
skinparam ActorFontColor #1F3039
skinparam LifeLineBorderColor #8297A1
skinparam LifeLineBackgroundColor #F9FBFC
skinparam SequenceArrowColor #607985
skinparam SequenceMessageAlign center
skinparam ParticipantPadding 18
skinparam BoxPadding 8
hide circle
hide empty members
+52
View File
@@ -0,0 +1,52 @@
# Card plan — FC03
## Goal
Make scheduler policy observable without teaching delays, queues, semaphores
or C++ prematurely. A student must be able to distinguish priority selection
from time slicing and show the difference in Hazard3/GDB.
## Task
```text
Task01 · Controlled scheduler experiment
├── A1 CONTEXT timer -> tick ISR -> scheduler -> tasks
├── A2 STRUCTURE contexts and bounded evidence records
├── A4 APPLICATION four-task topology and priority contract
├── A5 FLOW deterministic E01-E12 replay
├── A6 STATE Ready/Running/Deleted and priority transition
├── A7 RUNTIME CSRs, ISR stack, TCB/stack and committed traces
└── Exercise bounded observation with time slicing disabled
```
A3 is not repeated because callback dispatch was established in FC02. A8 is
not used because the scheduler policy is a kernel configuration rather than an
application design pattern.
## Runtime contract
1. `high_probe` is Ready at priority 0.
2. `peer_a` and `peer_b` are CPU-bound at priority 2.
3. `verifier` is Ready at priority 1 and cannot run while peers remain Ready.
4. The committed task-change trace must contain A-B-A.
5. Peer A records `before_raise` and calls `vTaskPrioritySet(high, 3)`.
6. High records `HIGH` and self-deletes before the API call returns.
7. Peer A records `after_raise`, requests peer termination and both peers
self-delete.
8. The verifier checks every invariant and exits with PASS.
The exact ordering claim applies to the three-marker projection only. Other
legal scheduling activity may occur before peer A is selected again.
## Exercise
Disable `configUSE_TIME_SLICING` while keeping both CPU-bound peers at the same
priority. This is an expected-noncompletion experiment: observe for a bounded
number of ticks that one peer may starve the other, capture the debugger state,
then restore the configuration. The exercise does not redefine the card's PASS
contract.
The series-level rationale and all FC03 acceptance gates are maintained in:
`meta/workspace-info/plans/informatyka/freertos-c-fc03-a1-a8.md`.
+347
View File
@@ -0,0 +1,347 @@
% Generated from json/card_source.json by tools/render_card.py.
% Do not edit manually; update the JSON and regenerate.
\documentclass[12pt,a4paper]{article}
\usepackage[T1]{fontenc}
\usepackage{lmodern}
\usepackage[utf8]{inputenc}
\usepackage[polish]{babel}
\usepackage{csquotes}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{xcolor}
\usepackage[a4paper,left=2.15cm,right=2.15cm,top=0.5cm,bottom=0.5cm,headheight=24mm,headsep=3mm,includehead]{geometry}
\usepackage{eso-pic}
\usepackage{marginnote}
\usepackage{array}
\usepackage{tabularx}
\usepackage{graphicx}
\usepackage{pdflscape}
\usepackage{float}
\usepackage{silence}
\WarningFilter{soulutf8}{This package is obsolete}
\usepackage{pdfcomment}
\usepackage{enumitem}
\usepackage{needspace}
\usepackage{fancyhdr}
\usepackage{lastpage}
\usepackage{microtype}
\usepackage[most]{tcolorbox}
\usepackage{qrcode}
\IfFileExists{references.bib}{%
\usepackage[backend=biber,style=numeric,sorting=none]{biblatex}%
\addbibresource{references.bib}%
}{}
\hypersetup{hidelinks}
\IfFileExists{build-meta.tex}{%
\input{build-meta.tex}%
}{%
\newcommand{\BuildCommit}{lokalna}%
}
\newcommand{\DocumentAuthor}{M. Pabiszczak}
\newcommand{\DocumentYear}{2026}
\newcommand{\CardSeries}{freertos-c}
\newcommand{\CardNumber}{03}
\newcommand{\CardCount}{15}
\newcommand{\CardSlug}{tick-priority-preemption-timeslicing}
\newcommand{\CardVersion}{v00.01}
\newcommand{\DocumentUUID}{c4bf7933-9a39-4968-b40e-158bafbb3eea}
\newcommand{\EmptyCheck}{\(\square\)}
\newcommand{\EscAnswerLines}[1][3]{\par\noindent\dotfill\par\noindent\dotfill\par\noindent\dotfill}
\newcommand{\EscWriteRow}[1][2.8em]{\rule{0pt}{#1}}
\setlength{\parindent}{0pt}
\setlength{\parskip}{0.45em}
\setlength{\headheight}{24mm}
\setlength{\headsep}{3mm}
\setlength{\footskip}{8mm}
\setlength{\marginparwidth}{1.5cm}
\setlength{\marginparsep}{0.25cm}
\renewcommand{\arraystretch}{1.22}
% Margin separator lines disabled for layout trial.
\newcommand{\ESCPageResourceHeader}{%
\begingroup%
\setlength{\parskip}{0pt}%
\setlength{\fboxsep}{0pt}%
\setlength{\fboxrule}{0.35pt}%
\setlength{\arrayrulewidth}{0.35pt}%
\noindent\fbox{%
\begin{minipage}[c][23.5mm][c]{\dimexpr\textwidth-2\fboxrule\relax}%
\begin{minipage}[c][23mm][c]{24mm}\centering%
\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-scheduler}%
\end{minipage}%
\vrule width0.35pt%
\begin{minipage}[c][23mm][c]{\dimexpr\linewidth-48mm-0.7pt\relax}%
\setlength{\tabcolsep}{0pt}%
\renewcommand{\arraystretch}{0}%
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.15126050\linewidth-\arrayrulewidth\relax}|X@{}}%
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries TITLE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries Tick, priorytety, wywłaszczenie i time slicing}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries VER.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.6}{6.8}\selectfont\ttfamily\bfseries v00.01}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries DATETIME}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 2026-07-18T00:00:00+02:00}\hspace{0.45mm}}\par} \\%
\end{tabularx}%
\par\nointerlineskip%
\hrule height0.35pt%
\nointerlineskip%
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.50000000\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.25210084\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14285714\linewidth-\arrayrulewidth\relax}|X@{}}%
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries PROJECT}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{7.7}{7.9}\selectfont\ttfamily\bfseries Freestanding C nad FreeRTOS}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SERIES}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries FreeRTOS C}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries CARD}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries 03/15}\hspace{0.45mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{3.2}{3.4}\selectfont\ttfamily\bfseries SHEET}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{6.4}{6.6}\selectfont\ttfamily\bfseries \thepage/\pageref{LastPage}}\hspace{0.45mm}}\par} \\%
\end{tabularx}%
\par\nointerlineskip%
\hrule height0.35pt%
\nointerlineskip%
\begin{tabularx}{\linewidth}{@{}p{\dimexpr0.05882353\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.05042017\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.14705882\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.09243697\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|p{\dimexpr0.07563025\linewidth-\arrayrulewidth\relax}|X@{}}%
\parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SUBJ.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries Inf.}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries PROG.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries CORE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries SCOPE}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries LEVEL}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hspace{0.15mm}{\fontsize{2.85}{3}\selectfont\ttfamily\bfseries POS.}\par\nointerlineskip\vspace{0.12mm}\noindent\makebox[\linewidth][r]{{\fontsize{4.45}{4.65}\selectfont\ttfamily\bfseries}\hspace{0.15mm}}\par} & \parbox[c][5.19414mm][c]{\linewidth}{\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries GITEA UUID}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily c4bf7933-9a39-4968-b40e-158bafbb3eea}\hspace{0.35mm}}\par\nointerlineskip\hbox to\linewidth{\hspace{0.35mm}{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries CARD UUID} {\fontsize{3.4}{3.75}\selectfont\ttfamily 2214a13f-34c6-40a1-a561-70a00ec98285}\hfill{\fontsize{3.4}{3.75}\selectfont\ttfamily\bfseries AUTHOR M. Pabiszczak}\hspace{0.35mm}}} \\%
\end{tabularx}%
\par\nointerlineskip%
\hrule height0.35pt%
\nointerlineskip%
\begin{tabularx}{\linewidth}{@{}X@{}}%
\parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries GITEA} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-scheduler}{\nolinkurl{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-scheduler}}}} \\%
\end{tabularx}%
\par\nointerlineskip%
\hrule height0.35pt%
\nointerlineskip%
\begin{tabularx}{\linewidth}{@{}X@{}}%
\parbox[c][3.46276mm][c]{\linewidth}{\hspace{0.45mm}{\fontsize{4.5}{4.85}\selectfont\ttfamily\bfseries HTML} {\fontsize{4.5}{4.85}\selectfont\ttfamily\href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2214a13f-34c6-40a1-a561-70a00ec98285}{\nolinkurl{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2214a13f-34c6-40a1-a561-70a00ec98285}}}} \\%
\end{tabularx}%
\end{minipage}%
\vrule width0.35pt%
\begin{minipage}[c][23mm][c]{24mm}\centering%
\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/2214a13f-34c6-40a1-a561-70a00ec98285}%
\end{minipage}%
\end{minipage}%
}%
\endgroup%
}
\pagestyle{fancy}
\fancyhf{}
\fancyhead[C]{\ESCPageResourceHeader}
\renewcommand{\headrulewidth}{0pt}
\renewcommand{\footrulewidth}{0pt}
\newcommand{\ESCMarginTag}[4]{%
\hspace*{#1}\textcolor{#2}{#3~#4}%
}
\newcommand{\ESCSectionBlockStart}{%
\Needspace{8\baselineskip}%
\par\vspace{0.35em}%
\noindent\textcolor{black!28}{\rule{\textwidth}{0.35pt}}%
\par\vspace{0.15em}%
}
\newcommand{\ESCSectionBlockEnd}{%
\par\vspace{0.25em}%
\noindent\textcolor{black!18}{\rule{\textwidth}{0.25pt}}%
\par\vspace{0.45em}%
}
\newcommand{\ESCTinyStepSeparator}{%
\par\vspace{0.10em}%
\noindent{\color{black!18}\leaders\hbox{\rule{0.60em}{0.22pt}\hspace{0.38em}}\hfill\kern0pt}%
\par\vspace{0.10em}%
}
\newtcolorbox{ESCTaskFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black,boxsep=0pt,left=1.4mm,right=1.4mm,top=0.8mm,bottom=0.8mm,colbacktitle=black!7,coltitle=black,title={\ttfamily\bfseries TASK\quad #1}}
\newtcolorbox{ESCBlockFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!55,boxsep=0pt,left=1.0mm,right=1.0mm,top=0.6mm,bottom=0.6mm,colbacktitle=black!4,coltitle=black,title={\ttfamily\bfseries BLOCK\quad #1}}
\newtcolorbox{ESCStepFrame}[1]{enhanced,breakable,arc=0pt,boxrule=0.35pt,colback=white,colframe=black!28,boxsep=0pt,left=0.8mm,right=0.8mm,top=0.45mm,bottom=0.45mm,colbacktitle=black!2,coltitle=black,title={\ttfamily STEP\quad #1}}
\newtcolorbox{ESCConclusionFrame}{enhanced,breakable,arc=0pt,boxrule=0.45pt,colback=blue!2,colframe=blue!45!black,boxsep=0pt,left=1.2mm,right=1.2mm,top=0.7mm,bottom=0.7mm,colbacktitle=blue!7,coltitle=black,title={\ttfamily\bfseries WNIOSEK}}
\newcommand{\ESCLearningTreeWidget}{%
\reversemarginpar
\marginnote[%
\begin{minipage}{\marginparwidth}%
\raggedright
{\fontsize{3.55}{3.95}\selectfont\ttfamily
\begin{minipage}[t]{\marginparwidth}%
\raggedright
{\bfseries\textcolor{black!65}{TECH}\par}%
\vspace{0.08em}%
\hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par%
\hspace*{0.28em}\textcolor{orange!85!black}{EK~LOCAL~DBG}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.03}{Odtwarza scheduler w Hazard3/GDB.}}\par%
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~DBG}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.03}{Łączy checkpoint, UML, rejestry i pamięć.}}\par%
\end{minipage}%
}%
\end{minipage}%
]{}
\normalmarginpar
\marginnote{%
\begin{minipage}{\marginparwidth}%
\raggedright
{\fontsize{3.55}{3.95}\selectfont\ttfamily
\hspace*{0.06cm}%
\begin{minipage}[t]{\dimexpr\marginparwidth-0.06cm\relax}%
\raggedright
{\bfseries\textcolor{black!65}{OG}\par}%
\vspace{0.08em}%
\hspace*{0.00em}\textcolor{red}{WE~01}\textcolor{black!48}{}\par%
\hspace*{0.28em}\textcolor{green!50!black}{EN~LOCAL~EN~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.03}{Analizuje reguły wyboru i stany tasków.}}\par%
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~KW~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.03}{Rozdziela priorytet od time slicing.}}\par%
\end{minipage}%
}%
\end{minipage}%
}
}
\begin{document}
\sloppy
\vspace{1.0em}
\noindent{\Large\bfseries Cel karty}\par
\vspace{0.35em}
Uczeń rozróżnia wybór najwyższego priorytetu od time slicing między równymi priorytetami. Odtwarza tick oraz natychmiastowe wywłaszczenie po zmianie priorytetu i wiąże ślad aplikacji ze stanem Hazard3/GDB.
\vspace{0.8em}
\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}}
\vspace{0.7em}
\noindent{\Large\bfseries Zakres karty}\par
\vspace{0.35em}
Dwa CPU-bound taski o priorytecie 2 tworzą ślad A-B-A. Peer A podnosi Ready task z priorytetu 0 do 3; HIGH musi wykonać się przed powrotem vTaskPrioritySet. Verifier o priorytecie 1 publikuje PASS dopiero po zakończeniu wyższych tasków. Poza zakresem są delay, kolejki, semafory, ISR-safe API i C++.
\vspace{0.55em}
\small\begin{tabularx}{\textwidth}{@{}>{\ttfamily\raggedright\arraybackslash}p{0.85cm}>{\ttfamily\raggedright\arraybackslash}p{1.45cm}X>{\raggedright\arraybackslash}p{2.45cm}>{\raggedright\arraybackslash}p{1.75cm}>{\ttfamily\raggedright\arraybackslash}p{1.50cm}@{}}
\textbf{Lekcja} & \textbf{Task} & \textbf{Najważniejsza idea} & \textbf{Priorytet} & \textbf{Status} & \textbf{Version} \\ \hline
\hline
\multicolumn{1}{|l|}{\textbf{\texttt{FC03}}} & \multicolumn{1}{l|}{\textbf{\texttt{Task01}}} & \multicolumn{1}{l|}{\textbf{Tick, priority selection, preemption i time slicing}} & \multicolumn{1}{l|}{\textbf{główny}} & \multicolumn{1}{l|}{\textbf{opracowane}} & \multicolumn{1}{l|}{\textbf{\texttt{v00.01}}} \\ \hline
\end{tabularx}
\normalsize
\vspace{0.8em}
\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}}
\clearpage
\ESCSectionBlockStart
\noindent{\small\bfseries A1 — Context \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.9303\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a1-context.png}}
\caption{A1 CONTEXT — timer, port, scheduler i taski aplikacji. — część 1/1 (r1 c1).}
\label{fig:a1-context}
\end{figure}
\ESCSectionBlockEnd
\clearpage
\begin{landscape}
\ESCSectionBlockStart
\noindent{\small\bfseries A2 — Structure \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.95319\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a2-structure.png}}
\caption{A2 STRUCTURE — konteksty tasków i rekordy śladów. — część 1/1 (r1 c1).}
\label{fig:a2-structure}
\end{figure}
\ESCSectionBlockEnd
\end{landscape}
\clearpage
\begin{landscape}
\ESCSectionBlockStart
\noindent{\small\bfseries A4 — Application \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.95213\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a4-application.png}}
\caption{A4 APPLICATION — topologia tasków i inwarianty priorytetów. — część 1/1 (r1 c1).}
\label{fig:a4-application}
\end{figure}
\ESCSectionBlockEnd
\end{landscape}
\clearpage
\begin{landscape}
\ESCSectionBlockStart
\noindent{\small\bfseries A5 — Flow \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.96064\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a5-flow-a.png}}
\caption{A5 część 1/2 — konfiguracja, start, pierwszy tick i A-B-A. — część 1/1 (r1 c1).}
\label{fig:a5-flow-a}
\end{figure}
\clearpage
\noindent{\small\bfseries A5 — Flow \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.96064\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a5-flow-b.png}}
\caption{A5 część 2/2 — priority raise, natychmiastowe wywłaszczenie i PASS. — część 1/1 (r1 c1).}
\label{fig:a5-flow-b}
\end{figure}
\ESCSectionBlockEnd
\end{landscape}
\clearpage
\begin{landscape}
\ESCSectionBlockStart
\noindent{\small\bfseries A6 — State \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.95319\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a6-state.png}}
\caption{A6 STATE — przejścia high probe, peerów i verifiera. — część 1/1 (r1 c1).}
\label{fig:a6-state}
\end{figure}
\ESCSectionBlockEnd
\end{landscape}
\clearpage
\begin{landscape}
\ESCSectionBlockStart
\noindent{\small\bfseries A7 — Runtime \hfill część 1/1 \textperiodcentered\ r1 c1}\par
\vspace{0.35em}
\begin{figure}[H]
\centering
\includegraphics[width=0.95426\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a7-runtime.png}}
\caption{A7 RUNTIME — timer, ISR, scheduler, taski i końcowy dowód. — część 1/1 (r1 c1).}
\label{fig:a7-runtime}
\end{figure}
\ESCSectionBlockEnd
\end{landscape}
\clearpage
\ESCSectionBlockStart
\section{Task01 — Scheduler experiment}
\begin{ESCTaskFrame}{TASK01 · Kontrolowany eksperyment schedulera FreeRTOS}
{\scriptsize\ttfamily 2214a13f-34c6-40a1-a561-70a00ec98285}\par
\begin{ESCBlockFrame}{A — model ticka i wyboru taska}
Najpierw odczytaj A1, A2 i A4 oraz zapisz przewidywaną kolejność.
\begin{ESCStepFrame}{read-priorities · Odczytaj kontrakt priorytetów.}
Wyjaśnij, dlaczego high=0, peery=2, verifier=1 nie powodują przedwczesnego uruchomienia high ani verifiera.
\end{ESCStepFrame}
\begin{ESCStepFrame}{predict-traces · Przewidź dwa ślady.}
Rozdziel task-change trace A-B-A od marker projection before-HIGH-after.
\end{ESCStepFrame}
\end{ESCBlockFrame}
\begin{ESCBlockFrame}{B — deterministyczny replay E01E12}
Każdy RUN replay zaczyna się od czystej RAM i zweryfikowanego obrazu.
\begin{ESCStepFrame}{follow-tick · Zbadaj pierwszy tick.}
Na E06 zapisz mcause, mepc, ISR SP i tick.
\end{ESCStepFrame}
\begin{ESCStepFrame}{follow-timeslice · Zbadaj A-B-A.}
Na E07 zapisz triplet tasków, ticki i liczbę obserwowanych zmian.
\end{ESCStepFrame}
\begin{ESCStepFrame}{follow-preemption · Zbadaj natychmiastowe wywłaszczenie.}
Porównaj E08, E09 i E10; pokaż, że HIGH wykonał się przed after_raise.
\end{ESCStepFrame}
\begin{ESCStepFrame}{finish-pass · Zamknij dowód.}
Na E11 sprawdź self-delete peerów, a na E12 końcowe inwarianty i PASS.
\end{ESCStepFrame}
\end{ESCBlockFrame}
\begin{ESCBlockFrame}{Ćwiczenie · Ćwiczenie — bounded observation bez time slicing}
Ustaw configUSE_TIME_SLICING=0, nie zmieniając dwóch CPU-bound peerów o priorytecie 2. Uruchom tylko ograniczoną obserwację debuggera; nie oczekuj PASS. Zapisz, który peer pozostaje Running, jaki jest tick count i dlaczego drugi może być głodzony. Następnie przywróć konfigurację.
\par\textbf{Evidence:} Timestampowany snapshot PC/SP, tick count i obu liczników iteracji oraz krótkie wyjaśnienie expected noncompletion.
\par\textbf{Acceptance:} Uczeń nie interpretuje braku PASS jako błędu harnessu i poprawnie wiąże głodzenie z brakiem rotacji równych priorytetów.
\end{ESCBlockFrame}
\tcblower\textbf{Task acceptance:} Program wypisuje PASS; trace zawiera A-B-A; marker projection to before-HIGH-after; pierwszy tick ma machine-timer mcause; TCB i stack są spójne.
\end{ESCTaskFrame}
\begin{ESCConclusionFrame}
Priorytet wybiera najwyższy Ready task. Time slicing rotuje wyłącznie taski o tym samym priorytecie, a uczynienie wyższego taska Ready może wywłaszczyć caller przed powrotem API.
\end{ESCConclusionFrame}
\ESCSectionBlockEnd
\end{document}
+22
View File
@@ -0,0 +1,22 @@
# FC03 page layout
## Physical sheets
1. Goal, scope, book mapping and viewpoint index — portrait.
2. A1 Context — portrait, vertical system boundary.
3. A2 Structure — landscape.
4. A4 Application — landscape.
5. A5 Flow part 1, E01-E07 — landscape.
6. A5 Flow part 2, E08-E12 — landscape.
7. A6 State — landscape.
8. A7 Runtime — landscape.
9. Task instructions and exercise — portrait.
Every diagram begins on a fresh physical sheet. A5 is one logical sequence
split at a semantic boundary. Both halves keep the same participants, scale,
header geometry and vertical origin. The web viewer may join those two sheets
side by side; print keeps them as separate A4 pages.
No box is cut across a page boundary. A diagram that fits a single physical
sheet is scaled to that sheet instead of being tiled.