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
+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

+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

+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

+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

+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

+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

+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