feat: publish FreeRTOS C FC04 card
|
After Width: | Height: | Size: 44 KiB |
@@ -0,0 +1,39 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 PeriodicContext" as Periodic <<C struct>> {
|
||||
handle · created_handle
|
||||
phase
|
||||
initial_tick
|
||||
release_tick[3]
|
||||
entry_sp · stack range
|
||||
}
|
||||
|
||||
class "02 SuspendContext" as Suspend <<C struct>> {
|
||||
handle · created_handle
|
||||
phase
|
||||
resumed
|
||||
entry_sp
|
||||
}
|
||||
|
||||
class "03 ObserverContext" as Observer <<C struct>> {
|
||||
handle
|
||||
periodic_state : eTaskState
|
||||
suspend_state : eTaskState
|
||||
pass
|
||||
}
|
||||
|
||||
class "04 periodic timeline" as Timeline <<bounded record>> {
|
||||
t0
|
||||
t0 + 2
|
||||
t0 + 4
|
||||
t0 + 6
|
||||
}
|
||||
|
||||
Periodic --> Timeline : vTaskDelayUntil
|
||||
Observer --> Periodic : eTaskGetState
|
||||
Observer --> Suspend : eTaskGetState · vTaskResume
|
||||
Observer --> Timeline : verifies exact deltas
|
||||
@enduml
|
||||
@@ -0,0 +1,117 @@
|
||||
<?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="453.5936px" preserveAspectRatio="none" style="width:894px;height:453px;" version="1.1" viewBox="0 0 894 453" width="894.4099px" zoomAndPan="magnify"><defs/><g><!--MD5=[86b35a35deff3f53bdfe096e65e1dcc4]
|
||||
class Periodic--><rect fill="#F5F8FA" height="166.0486" id="Periodic" style="stroke: #607985; stroke-width: 1.1978704525288377;" width="166.1047" x="413.6646" y="6.1012"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="8.7844" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="55.9006" x="468.7666" y="23.0394">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="11.9787" lengthAdjust="spacingAndGlyphs" textLength="136.5572" x="428.4383" y="45.813">01 PeriodicContext</text><line style="stroke: #607985; stroke-width: 1.1978704525288377;" x1="414.4632" x2="578.9707" y1="57.4224" y2="57.4224"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="146.9388" x="423.2476" y="75.0446">handle · created_handle</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="31.9432" x="423.2476" y="96.7123">phase</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="76.6637" x="423.2476" y="118.3801">initial_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="95.8296" x="423.2476" y="140.0478">release_tick[3]</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="140.5501" x="423.2476" y="161.7155">entry_sp · stack range</text><!--MD5=[fe4f93b87d8dddf11c9ebf60b1f7018c]
|
||||
class Suspend--><rect fill="#F5F8FA" height="144.3808" id="Suspend" style="stroke: #607985; stroke-width: 1.1978704525288377;" width="166.1047" x="413.6646" y="200.6034"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="8.7844" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="55.9006" x="468.7666" y="217.5416">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="11.9787" lengthAdjust="spacingAndGlyphs" textLength="129.37" x="432.0319" y="240.3152">02 SuspendContext</text><line style="stroke: #607985; stroke-width: 1.1978704525288377;" x1="414.4632" x2="578.9707" y1="251.9246" y2="251.9246"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="146.9388" x="423.2476" y="269.5468">handle · created_handle</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="31.9432" x="423.2476" y="291.2146">phase</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="44.7205" x="423.2476" y="312.8823">resumed</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="51.1091" x="423.2476" y="334.55">entry_sp</text><!--MD5=[d40932010816485ec57b44b6eea2392a]
|
||||
class Observer--><rect fill="#F5F8FA" height="144.3808" id="Observer" style="stroke: #607985; stroke-width: 1.1978704525288377;" width="191.6593" x="4.7915" y="200.6034"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="8.7844" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="55.9006" x="72.6708" y="217.5416">«C struct»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="11.9787" lengthAdjust="spacingAndGlyphs" textLength="136.5572" x="32.3425" y="240.3152">03 ObserverContext</text><line style="stroke: #607985; stroke-width: 1.1978704525288377;" x1="5.5901" x2="195.6522" y1="251.9246" y2="251.9246"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="38.3319" x="14.3744" y="269.5468">handle</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="172.4933" x="14.3744" y="291.2146">periodic_state : eTaskState</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="166.1047" x="14.3744" y="312.8823">suspend_state : eTaskState</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="25.5546" x="14.3744" y="334.55">pass</text><!--MD5=[bc85b0cffdc1196fa135ce200aaffd70]
|
||||
class Timeline--><rect fill="#F5F8FA" height="144.3808" id="Timeline" style="stroke: #607985; stroke-width: 1.1978704525288377;" width="165.3061" x="720.3194" y="301.2245"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="8.7844" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="89.441" x="758.252" y="318.1627">«bounded record»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="11.9787" lengthAdjust="spacingAndGlyphs" textLength="150.9317" x="727.5067" y="340.9363">04 periodic timeline</text><line style="stroke: #607985; stroke-width: 1.1978704525288377;" x1="721.118" x2="884.827" y1="352.5458" y2="352.5458"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="12.7773" x="729.9024" y="370.1679">t0</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="38.3319" x="729.9024" y="391.8357">t0 + 2</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="38.3319" x="729.9024" y="413.5034">t0 + 4</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="10.3815" lengthAdjust="spacingAndGlyphs" textLength="38.3319" x="729.9024" y="435.1711">t0 + 6</text><!--MD5=[b5317db61bfa9ffb7f1583a47e1bca56]
|
||||
link Periodic to Timeline--><path d="M580.1606,166.2405 C623.8669,207.0319 677.3239,256.9193 720.8385,297.5191 " fill="none" id="Periodic->Timeline" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><polygon fill="#607985" points="723.6016,300.0905,720.5128,292.8573,720.6773,297.3718,716.1628,297.5363,723.6016,300.0905" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="11.1801" lengthAdjust="spacingAndGlyphs" textLength="95.8296" x="602.1295" y="181.202">vTaskDelayUntil</text><!--MD5=[9a13c79469e182d9ac760982ce00a3f7]
|
||||
link Observer to Periodic--><path d="M196.6664,228.4499 C261.3514,198.3354 346.2245,158.8137 409.0648,129.5617 " fill="none" id="Observer->Periodic" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><polygon fill="#607985" points="412.4508,127.9805,404.587,128.1266,408.8327,129.6696,407.2897,133.9154,412.4508,127.9805" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="11.1801" lengthAdjust="spacingAndGlyphs" textLength="83.0524" x="263.5315" y="130.3963">eTaskGetState</text><!--MD5=[6337c7a371cd26c61b81731d2523cb3f]
|
||||
link Observer to Suspend--><path d="M196.6664,272.795 C261.2236,272.795 345.8891,272.795 408.6815,272.795 " fill="none" id="Observer->Suspend" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><polygon fill="#607985" points="412.339,272.795,405.1517,269.6007,408.3461,272.795,405.1517,275.9894,412.339,272.795" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="11.1801" lengthAdjust="spacingAndGlyphs" textLength="172.4933" x="218.811" y="264.8053">eTaskGetState · vTaskResume</text><!--MD5=[8f4095da67caa2e1eabf447bb271ea1c]
|
||||
link Observer to Timeline--><path d="M196.5546,315.8705 C257.2786,340.9618 338.4463,370.118 413.6646,382.9991 C486.4312,395.465 505.9645,384.5883 579.7693,382.9991 C624.4179,382.0408 674.0736,379.9965 715.1207,378.0399 " fill="none" id="Observer->Timeline" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><polygon fill="#607985" points="718.874,377.8563,711.5403,375.0144,714.8858,378.05,711.8502,381.3955,718.874,377.8563" style="stroke: #607985; stroke-width: 1.0381543921916594;"/><text fill="#425B67" font-family="DejaVu Sans Mono" font-size="11.1801" lengthAdjust="spacingAndGlyphs" textLength="134.1615" x="429.6362" y="375.0094">verifies exact deltas</text><!--MD5=[b8379206f304b13281e1570a39728778]
|
||||
@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 PeriodicContext" as Periodic <<C struct>> {
|
||||
handle · created_handle
|
||||
phase
|
||||
initial_tick
|
||||
release_tick[3]
|
||||
entry_sp · stack range
|
||||
}
|
||||
|
||||
class "02 SuspendContext" as Suspend <<C struct>> {
|
||||
handle · created_handle
|
||||
phase
|
||||
resumed
|
||||
entry_sp
|
||||
}
|
||||
|
||||
class "03 ObserverContext" as Observer <<C struct>> {
|
||||
handle
|
||||
periodic_state : eTaskState
|
||||
suspend_state : eTaskState
|
||||
pass
|
||||
}
|
||||
|
||||
class "04 periodic timeline" as Timeline <<bounded record>> {
|
||||
t0
|
||||
t0 + 2
|
||||
t0 + 4
|
||||
t0 + 6
|
||||
}
|
||||
|
||||
Periodic - -> Timeline : vTaskDelayUntil
|
||||
Observer - -> Periodic : eTaskGetState
|
||||
Observer - -> Suspend : eTaskGetState · vTaskResume
|
||||
Observer - -> Timeline : verifies exact deltas
|
||||
@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: 11 KiB |
|
After Width: | Height: | Size: 42 KiB |
@@ -0,0 +1,26 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
|
||||
participant main
|
||||
participant periodic
|
||||
participant suspend_target
|
||||
participant observer
|
||||
participant "FreeRTOS scheduler" as Scheduler
|
||||
|
||||
main -> main : 01 configuration committed
|
||||
main -> Scheduler : 02 create three tasks and start
|
||||
Scheduler -> periodic : 03 highest Ready task runs
|
||||
periodic -> Scheduler : vTaskDelayUntil(t0 + 2)
|
||||
Scheduler -> suspend_target : self-suspend
|
||||
Scheduler -> observer : 04 sees Blocked + Suspended
|
||||
observer -> Scheduler : vTaskResume(suspend_target)
|
||||
Scheduler -> suspend_target : 05 resumed; self-delete
|
||||
Scheduler -> periodic : 06 release at t0 + 2
|
||||
periodic -> Scheduler : vTaskDelayUntil(t0 + 4)
|
||||
Scheduler -> periodic : 07 release at t0 + 4
|
||||
periodic -> Scheduler : vTaskDelayUntil(t0 + 6)
|
||||
Scheduler -> periodic : 08 release at t0 + 6
|
||||
periodic -> Scheduler : 09 clear handle; self-delete
|
||||
Scheduler -> observer : 10 verify timeline and PASS
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 14 KiB |
|
After Width: | Height: | Size: 25 KiB |
@@ -0,0 +1,27 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
state "01 Ready" as Ready
|
||||
state "02 Running" as Running
|
||||
state "03 Blocked\nuntil absolute wake tick" as Blocked
|
||||
state "04 Suspended\nno wake tick" as Suspended
|
||||
state "05 Resumed Ready" as Resumed
|
||||
state "06 Completed\nbefore self-delete" as Completed
|
||||
state "07 Deleted\nTCB cleanup deferred" as Deleted
|
||||
|
||||
Ready --> Running : selected
|
||||
Running --> Blocked : vTaskDelayUntil
|
||||
Blocked --> Ready : wake tick
|
||||
Running --> Suspended : vTaskSuspend(NULL)
|
||||
Suspended --> Resumed : vTaskResume(handle)
|
||||
Resumed --> Running : selected
|
||||
Running --> Completed : application record
|
||||
Completed --> Deleted : vTaskDelete(NULL)
|
||||
|
||||
note bottom of Blocked
|
||||
Blocked has a time/event condition.
|
||||
Suspended has no automatic wake condition.
|
||||
end note
|
||||
@enduml
|
||||
|
After Width: | Height: | Size: 13 KiB |
|
After Width: | Height: | Size: 47 KiB |
@@ -0,0 +1,40 @@
|
||||
@startuml
|
||||
!include card-uml-style.iuml
|
||||
scale 900 width
|
||||
left to right direction
|
||||
|
||||
class "01 public state evidence" as Public <<application>> {
|
||||
eTaskGetState(periodic) = eBlocked
|
||||
eTaskGetState(target) = eSuspended
|
||||
}
|
||||
|
||||
class "02 periodic task runtime" as Periodic <<runtime>> {
|
||||
handle / TCB
|
||||
task stack range
|
||||
PC · SP
|
||||
}
|
||||
|
||||
class "03 absolute wake timeline" as Wake <<runtime>> {
|
||||
initial_tick
|
||||
release = 2 · 4 · 6
|
||||
exact delta = 2
|
||||
}
|
||||
|
||||
class "04 suspended task runtime" as Suspend <<runtime>> {
|
||||
handle / TCB
|
||||
no delayed-list wake tick
|
||||
resumed = 1
|
||||
}
|
||||
|
||||
class "05 forensic completion" as Evidence <<evidence>> {
|
||||
public handles = NULL
|
||||
contexts remain in static storage
|
||||
source blob · ELF hash · PASS
|
||||
}
|
||||
|
||||
Public --> Periodic
|
||||
Public --> Suspend
|
||||
Periodic --> Wake
|
||||
Periodic --> Evidence
|
||||
Suspend --> Evidence
|
||||
@enduml
|
||||
@@ -0,0 +1,120 @@
|
||||
<?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="346.0805px" preserveAspectRatio="none" style="width:893px;height:346px;" version="1.1" viewBox="0 0 893 346" width="893.3263px" zoomAndPan="magnify"><defs/><g><!--MD5=[3833dfc58284d688f88001bd4346281f]
|
||||
class Public--><rect fill="#F5F8FA" height="120.6336" id="Public" style="stroke: #607985; stroke-width: 1.430084745762712;" width="282.2034" x="5.7203" y="111.4513"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="10.4873" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="86.7585" x="103.4428" y="131.6731">«application»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="14.3008" lengthAdjust="spacingAndGlyphs" textLength="214.5127" x="39.5657" y="158.8615">01 public state evidence</text><line style="stroke: #607985; stroke-width: 1.430084745762712;" x1="6.6737" x2="286.9703" y1="172.7215" y2="172.7215"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="259.322" x="17.161" y="193.7598">eTaskGetState(periodic) = eBlocked</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="259.322" x="17.161" y="219.628">eTaskGetState(target) = eSuspended</text><!--MD5=[86b35a35deff3f53bdfe096e65e1dcc4]
|
||||
class Periodic--><rect fill="#F5F8FA" height="146.5018" id="Periodic" style="stroke: #607985; stroke-width: 1.430084745762712;" width="231.6737" x="332.2564" y="7.9513"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="10.4873" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.0636" x="418.0614" y="28.1731">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="14.3008" lengthAdjust="spacingAndGlyphs" textLength="214.5127" x="340.8369" y="55.3615">02 periodic task runtime</text><line style="stroke: #607985; stroke-width: 1.430084745762712;" x1="333.2097" x2="562.9767" y1="69.2215" y2="69.2215"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="91.5254" x="343.697" y="90.2598">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="122.0339" x="343.697" y="116.128">task stack range</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="53.3898" x="343.697" y="141.9961">PC · SP</text><!--MD5=[e1eb4ff42ad6fe6744f3d2d780dcb722]
|
||||
class Wake--><rect fill="#F5F8FA" height="146.5018" id="Wake" style="stroke: #607985; stroke-width: 1.430084745762712;" width="240.2542" x="625.4237" y="7.9513"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="10.4873" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.0636" x="715.5191" y="28.1731">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="14.3008" lengthAdjust="spacingAndGlyphs" textLength="223.0932" x="634.0042" y="55.3615">03 absolute wake timeline</text><line style="stroke: #607985; stroke-width: 1.430084745762712;" x1="626.3771" x2="864.7246" y1="69.2215" y2="69.2215"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="91.5254" x="636.8644" y="90.2598">initial_tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="144.9153" x="636.8644" y="116.128">release = 2 · 4 · 6</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="114.4068" x="636.8644" y="141.9961">exact delta = 2</text><!--MD5=[fe4f93b87d8dddf11c9ebf60b1f7018c]
|
||||
class Suspend--><rect fill="#F5F8FA" height="146.5018" id="Suspend" style="stroke: #607985; stroke-width: 1.430084745762712;" width="240.2542" x="327.9661" y="189.0953"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="10.4873" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="60.0636" x="418.0614" y="209.3172">«runtime»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="14.3008" lengthAdjust="spacingAndGlyphs" textLength="223.0932" x="336.5466" y="236.5055">04 suspended task runtime</text><line style="stroke: #607985; stroke-width: 1.430084745762712;" x1="328.9195" x2="567.2669" y1="250.3655" y2="250.3655"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="91.5254" x="339.4068" y="271.4039">handle / TCB</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="190.678" x="339.4068" y="297.272">no delayed-list wake tick</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="83.8983" x="339.4068" y="323.1402">resumed = 1</text><!--MD5=[13f56afd7aace6dccdfaaac41cf97a6a]
|
||||
class Evidence--><rect fill="#F5F8FA" height="146.5018" id="Evidence" style="stroke: #607985; stroke-width: 1.430084745762712;" width="274.5763" x="608.2627" y="189.0953"/><text fill="#526B77" font-family="DejaVu Sans Mono" font-size="10.4873" font-style="italic" lengthAdjust="spacingAndGlyphs" textLength="66.7373" x="712.1822" y="209.3172">«evidence»</text><text fill="#1F3039" font-family="DejaVu Sans Mono" font-size="14.3008" lengthAdjust="spacingAndGlyphs" textLength="197.3517" x="646.875" y="236.5055">05 forensic completion</text><line style="stroke: #607985; stroke-width: 1.430084745762712;" x1="609.2161" x2="881.8856" y1="250.3655" y2="250.3655"/><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="160.1695" x="619.7034" y="271.4039">public handles = NULL</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="251.6949" x="619.7034" y="297.272">contexts remain in static storage</text><text fill="#2E424D" font-family="DejaVu Sans Mono" font-size="12.3941" lengthAdjust="spacingAndGlyphs" textLength="221.1864" x="619.7034" y="323.1402">source blob · ELF hash · PASS</text><!--MD5=[8014a0f10d1c54cd49a04ba349132a69]
|
||||
link Public to Periodic--><path d="M288.2574,129.2701 C300.8994,125.447 313.6367,121.5858 326.0975,117.8199 " fill="none" id="Public->Periodic" style="stroke: #607985; stroke-width: 1.239406779661017;"/><polygon fill="#607985" points="330.4163,116.5138,321.1002,115.3394,325.8523,117.8898,323.3019,122.6418,330.4163,116.5138" style="stroke: #607985; stroke-width: 1.239406779661017;"/><!--MD5=[17e999d6446600b847a6cb8cb5f374d4]
|
||||
link Public to Suspend--><path d="M288.2574,214.2744 C299.5074,217.678 310.8337,221.1006 321.9693,224.4756 " fill="none" id="Public->Suspend" style="stroke: #607985; stroke-width: 1.239406779661017;"/><polygon fill="#607985" points="326.393,225.8104,319.2786,219.6823,321.829,224.4344,317.0769,226.9848,326.393,225.8104" style="stroke: #607985; stroke-width: 1.239406779661017;"/><!--MD5=[de7239d11f85c01a3917f6e65c696cec]
|
||||
link Periodic to Wake--><path d="M564.1589,81.2002 C582.1494,81.2002 600.8072,81.2002 619.0074,81.2002 " fill="none" id="Periodic->Wake" style="stroke: #607985; stroke-width: 1.239406779661017;"/><polygon fill="#607985" points="623.7267,81.2002,615.1462,77.3867,618.9597,81.2002,615.1462,85.0138,623.7267,81.2002" style="stroke: #607985; stroke-width: 1.239406779661017;"/><!--MD5=[80b41d776a842d71f9fe5b1fa56b71b9]
|
||||
link Periodic to Evidence--><path d="M564.1589,151.7511 C582.2352,162.8294 600.9979,174.3273 619.2839,185.5392 " fill="none" id="Periodic->Evidence" style="stroke: #607985; stroke-width: 1.239406779661017;"/><polygon fill="#607985" points="623.2023,187.9417,617.8745,180.2098,619.1365,185.4533,613.893,186.7152,623.2023,187.9417" style="stroke: #607985; stroke-width: 1.239406779661017;"/><!--MD5=[45096a90a3324b6007814ebd88be5d10]
|
||||
link Suspend to Evidence--><path d="M568.411,262.3443 C579.3559,262.3443 590.5201,262.3443 601.6462,262.3443 " fill="none" id="Suspend->Evidence" style="stroke: #607985; stroke-width: 1.239406779661017;"/><polygon fill="#607985" points="606.3845,262.3443,597.804,258.5307,601.6176,262.3443,597.804,266.1578,606.3845,262.3443" style="stroke: #607985; stroke-width: 1.239406779661017;"/><!--MD5=[51ed389d12f971a7aef6fd7463f99a8f]
|
||||
@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 public state evidence" as Public <<application>> {
|
||||
eTaskGetState(periodic) = eBlocked
|
||||
eTaskGetState(target) = eSuspended
|
||||
}
|
||||
|
||||
class "02 periodic task runtime" as Periodic <<runtime>> {
|
||||
handle / TCB
|
||||
task stack range
|
||||
PC · SP
|
||||
}
|
||||
|
||||
class "03 absolute wake timeline" as Wake <<runtime>> {
|
||||
initial_tick
|
||||
release = 2 · 4 · 6
|
||||
exact delta = 2
|
||||
}
|
||||
|
||||
class "04 suspended task runtime" as Suspend <<runtime>> {
|
||||
handle / TCB
|
||||
no delayed-list wake tick
|
||||
resumed = 1
|
||||
}
|
||||
|
||||
class "05 forensic completion" as Evidence <<evidence>> {
|
||||
public handles = NULL
|
||||
contexts remain in static storage
|
||||
source blob · ELF hash · PASS
|
||||
}
|
||||
|
||||
Public - -> Periodic
|
||||
Public - -> Suspend
|
||||
Periodic - -> Wake
|
||||
Periodic - -> Evidence
|
||||
Suspend - -> Evidence
|
||||
@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: 11 KiB |
@@ -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
|
||||
@@ -0,0 +1,12 @@
|
||||
# FC04 card plan
|
||||
|
||||
Task01 · Delay and task-state experiment
|
||||
├── A2 STRUCTURE contexts and absolute wake timeline
|
||||
├── A5 FLOW E01–E10 deterministic replay
|
||||
├── A6 STATE Ready/Running/Blocked/Suspended/Deleted
|
||||
├── A7 RUNTIME public state, TCB/stack, ticks and forensic evidence
|
||||
└── Exercise replace absolute delay with relative delay and measure drift
|
||||
|
||||
A1 and A3 are inherited unchanged from FC03/FC02. A4 is already completely
|
||||
expressed by A2 and A5. A8 is unavailable because this card studies kernel
|
||||
state semantics rather than an application design pattern.
|
||||
@@ -0,0 +1,312 @@
|
||||
% 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}{04}
|
||||
\newcommand{\CardCount}{15}
|
||||
\newcommand{\CardSlug}{delay-state}
|
||||
\newcommand{\CardVersion}{v00.01}
|
||||
\newcommand{\DocumentUUID}{7691d61c-eaae-5228-b9c8-fa42527b75b9}
|
||||
|
||||
\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-delay-state}%
|
||||
\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 Delay, blokowanie, stany taska i usuwanie}\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-19T00: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 04/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 7691d61c-eaae-5228-b9c8-fa42527b75b9}\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 4a7ef04c-ab08-5783-9192-5b02a90f05f8}\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-delay-state}{\nolinkurl{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-delay-state}}}} \\%
|
||||
\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/4a7ef04c-ab08-5783-9192-5b02a90f05f8}{\nolinkurl{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/4a7ef04c-ab08-5783-9192-5b02a90f05f8}}}} \\%
|
||||
\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/4a7ef04c-ab08-5783-9192-5b02a90f05f8}%
|
||||
\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~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.04}{Uczeń odtwarza E01–E10 i wiąże publiczny stan, tick, PC/SP, TCB oraz stos.}}\par%
|
||||
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.04}{Łączy kod, diagram i zweryfikowany dowód.}}\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]{.04}{Uczeń rozróżnia Ready, Running, Blocked, Suspended i Deleted oraz przyczynę każdego\textCR przejścia.}}\par%
|
||||
\hspace*{0.54em}\textcolor{blue!70!black}{KW~LOCAL~KW~RTOS}\textcolor{black!48}{\pdftooltip[width=\textwidth]{.04}{Łączy kod, diagram i zweryfikowany dowód.}}\par%
|
||||
\end{minipage}%
|
||||
}%
|
||||
\end{minipage}%
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
\begin{document}
|
||||
\sloppy
|
||||
|
||||
\vspace{1.0em}
|
||||
\noindent{\Large\bfseries Cel karty}\par
|
||||
\vspace{0.35em}
|
||||
Uczeń odróżnia Ready, Running, Blocked, Suspended i Deleted oraz wiąże każdy stan z konkretną przyczyną i publiczną obserwacją FreeRTOS.
|
||||
|
||||
\vspace{0.8em}
|
||||
\noindent\textcolor{black!25}{\rule{\textwidth}{0.35pt}}
|
||||
\vspace{0.7em}
|
||||
\noindent{\Large\bfseries Zakres karty}\par
|
||||
\vspace{0.35em}
|
||||
Task okresowy budzi się co dwa ticki przez vTaskDelayUntil. Drugi task zawiesza się bez warunku czasowego i jest jawnie wznawiany. Observer sprawdza publiczne eTaskState, dokładną oś 2/4/6, osobny stos i bezpieczny zapis przed self-delete.
|
||||
\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{FC04}}} & \multicolumn{1}{l|}{\textbf{\texttt{Task01}}} & \multicolumn{1}{l|}{\textbf{vTaskDelayUntil, Blocked, Suspended i vTaskDelete}} & \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
|
||||
|
||||
\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.95106\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a2-structure.png}}
|
||||
\caption{A2 STRUCTURE — trzy konteksty i absolutna oś wybudzeń. — część 1/1 (r1 c1).}
|
||||
\label{fig:a2-structure}
|
||||
\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.95\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a5-flow.png}}
|
||||
\caption{A5 FLOW — od konfiguracji do okresowych wybudzeń i PASS. — część 1/1 (r1 c1).}
|
||||
\label{fig:a5-flow}
|
||||
\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 — Ready, Running, Blocked, Suspended i Deleted. — 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.95\linewidth,trim=0.000bp 0.000bp 0.000bp 0.000bp,clip]{\detokenize{../assets/a7-runtime.png}}
|
||||
\caption{A7 RUNTIME — stany publiczne, task memory, wake ticks i PASS. — część 1/1 (r1 c1).}
|
||||
\label{fig:a7-runtime}
|
||||
\end{figure}
|
||||
\ESCSectionBlockEnd
|
||||
\end{landscape}
|
||||
|
||||
\clearpage
|
||||
\ESCSectionBlockStart
|
||||
\section{Task01 — delay i stany}
|
||||
|
||||
\begin{ESCTaskFrame}{TASK01 · Delay, blokowanie, zawieszenie i self-delete}
|
||||
{\scriptsize\ttfamily 4a7ef04c-ab08-5783-9192-5b02a90f05f8}\par
|
||||
\begin{ESCBlockFrame}{A — model stanów}
|
||||
Najpierw przewidź przyczynę i wyjście z każdego stanu.
|
||||
\begin{ESCStepFrame}{classify · Sklasyfikuj Blocked i Suspended.}
|
||||
Wskaż warunek automatycznego wybudzenia albo jego brak.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{predict · Przewidź oś czasu.}
|
||||
Zapisz oczekiwane t0+2, t0+4 i t0+6.
|
||||
\end{ESCStepFrame}
|
||||
\end{ESCBlockFrame}
|
||||
\begin{ESCBlockFrame}{B — replay Hazard3}
|
||||
Każdy RUN zaczyna się od czystej RAM.
|
||||
\begin{ESCStepFrame}{observe · Zbadaj E04.}
|
||||
Zapisz publiczne stany obu tasków i ich przyczyny.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{resume · Zbadaj E05.}
|
||||
Wyjaśnij, dlaczego target preemptuje observera.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{timeline · Zbadaj E06–E08.}
|
||||
Policz delty release ticks i sprawdź stack taska.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{finish · Zbadaj E09–E10.}
|
||||
Oddziel application completion od cleanup kernela.
|
||||
\end{ESCStepFrame}
|
||||
\end{ESCBlockFrame}
|
||||
\begin{ESCBlockFrame}{Ćwiczenie · Ćwiczenie — względny delay i dryf}
|
||||
Zastąp vTaskDelayUntil przez vTaskDelay i dodaj bounded workload trwający jeden tick po każdym wybudzeniu. Zmierz trzy release ticks i porównaj fazę z wersją bazową.
|
||||
\par\textbf{Evidence:} Timestampowane snapshoty release ticks oraz krótka tabela różnic względem 2/4/6.
|
||||
\par\textbf{Acceptance:} Uczeń poprawnie wyjaśnia, dlaczego relative delay kumuluje czas pracy i przesuwa fazę.
|
||||
\end{ESCBlockFrame}
|
||||
\tcblower\textbf{Task acceptance:} Program kończy się PASS; observer widzi eBlocked i eSuspended; timeline ma dokładne delty 2; resume działa raz; context, TCB i stack pozostają rozdzielone.
|
||||
\end{ESCTaskFrame}
|
||||
\begin{ESCConclusionFrame}
|
||||
Blocked task ma warunek wybudzenia, Suspended wymaga jawnego resume, a vTaskDelayUntil utrzymuje absolutną fazę okresu. Self-delete kończy task, lecz aplikacyjny context może zachować bounded forensic evidence.
|
||||
\end{ESCConclusionFrame}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
\end{document}
|
||||
@@ -0,0 +1,10 @@
|
||||
# FC04 page layout
|
||||
|
||||
1. Goal and scope — portrait.
|
||||
2. A2 Structure — landscape.
|
||||
3. A5 Flow — landscape.
|
||||
4. A6 State — landscape.
|
||||
5. A7 Runtime — landscape.
|
||||
6. Task and exercise — portrait.
|
||||
|
||||
Each diagram begins on a fresh physical page and no block is tiled.
|
||||