chore: preserve current FreeRTOS and C card updates

This commit is contained in:
2026-07-21 19:13:55 +02:00
parent 0fc6158501
commit 4055b21868
6 changed files with 142 additions and 72 deletions
+3 -3
View File
@@ -73,7 +73,7 @@
\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-software-timers}%
\href{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-software-timers}{\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-software-timers}}%
\end{minipage}%
\vrule width0.35pt%
\begin{minipage}[c][23mm][c]{\dimexpr\linewidth-48mm-0.7pt\relax}%
@@ -109,7 +109,7 @@
\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/ab188300-f03d-5ddb-8316-b9534876a5bc}%
\href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/ab188300-f03d-5ddb-8316-b9534876a5bc}{\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/ab188300-f03d-5ddb-8316-b9534876a5bc}}%
\end{minipage}%
\end{minipage}%
}%
@@ -309,7 +309,7 @@ Sprawdź brak czwartego callbacku i digest.
\end{ESCStepFrame}
\end{ESCBlockFrame}
\begin{ESCBlockFrame}{Ćwiczenie · Ćwiczenie — command queue pressure}
Zmniejsz configTIMER_QUEUE_LENGTH do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż pdFAIL bez utraty poprzedniego stanu timera.
Zmniejsz \texttt{configTIMER\_QUEUE\_LENGTH} do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż \texttt{pdFAIL} bez utraty poprzedniego stanu timera.
\par\textbf{Evidence:} Snapshot queue pressure, jawny expected failure i deterministyczny final state.
\par\textbf{Acceptance:} Uczeń nie interpretuje pdFAIL jako wykonanej komendy i nie blokuje callbacku.
\end{ESCBlockFrame}
+2 -2
View File
@@ -722,7 +722,7 @@
"content_kind": "prose",
"asset_page_mode": "one-per-page",
"page_orientation": "landscape",
"content_tex": "Callback otrzymuje nieprzezroczysty TimerHandle_t. pvTimerGetTimerID odzyskuje jawny kontekst aplikacyjny bez globalnej tablicy rozgałęzień po adresach.",
"content_tex": "Callback otrzymuje nieprzezroczysty \\texttt{TimerHandle\\_t}. \\texttt{pvTimerGetTimerID} odzyskuje jawny kontekst aplikacyjny bez globalnej tablicy rozgałęzień po adresach.",
"assets": [
{
"path": "assets/a3-dispatch.png",
@@ -1354,7 +1354,7 @@
"kind": "exercise",
"id": "late-command",
"title": "Ćwiczenie — command queue pressure",
"prompt_tex": "Zmniejsz configTIMER_QUEUE_LENGTH do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż pdFAIL bez utraty poprzedniego stanu timera.",
"prompt_tex": "Zmniejsz \\texttt{configTIMER\\_QUEUE\\_LENGTH} do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż \\texttt{pdFAIL} bez utraty poprzedniego stanu timera.",
"evidence_tex": "Snapshot queue pressure, jawny expected failure i deterministyczny final state.",
"criterion": "Uczeń nie interpretuje pdFAIL jako wykonanej komendy i nie blokuje callbacku.",
"based_on": [
+2 -2
View File
@@ -41,7 +41,7 @@
{"id":"lists","number":4,"label":"active lists hold expiry","mode":"RUN","event_id":"E03","strategy_ref":"run.commands","svg_label":"04","code_ref":"src/tasks/task01_software_timers.c:131","snapshot_ref":"task01.reset","description":"Reset przesuwa one-shot.","evidence":"brak callbacku w tick 5."},
{"id":"callback","number":5,"label":"callback records only","mode":"RUN","event_id":"E07","strategy_ref":"run.callback","svg_label":"05","code_ref":"src/tasks/task01_software_timers.c:68","snapshot_ref":"task01.one-shot","description":"Krótka funkcja na daemon stack.","evidence":"one_shot_count=1."}
]}]}]},
{"id":"A3","label":"DISPATCH","title":"Dispatch","order":30,"orientation":"landscape","description":"Handle → Timer_t → callback → TimerTag.","content_tex":"Callback otrzymuje nieprzezroczysty TimerHandle_t. pvTimerGetTimerID odzyskuje jawny kontekst aplikacyjny bez globalnej tablicy rozgałęzień po adresach.","assets":[{"stem":"a3-dispatch","title":"A3 · callback dispatch","caption":"A3 DISPATCH — jeden callback i dwa typowane IDs.","label":"fig:a3-dispatch","alt":"Mechanizm dispatch software timera.","phases":[{"id":"dispatch","label":"HANDLE / ID / CALLBACK","steps":[
{"id":"A3","label":"DISPATCH","title":"Dispatch","order":30,"orientation":"landscape","description":"Handle → Timer_t → callback → TimerTag.","content_tex":"Callback otrzymuje nieprzezroczysty \\texttt{TimerHandle\\_t}. \\texttt{pvTimerGetTimerID} odzyskuje jawny kontekst aplikacyjny bez globalnej tablicy rozgałęzień po adresach.","assets":[{"stem":"a3-dispatch","title":"A3 · callback dispatch","caption":"A3 DISPATCH — jeden callback i dwa typowane IDs.","label":"fig:a3-dispatch","alt":"Mechanizm dispatch software timera.","phases":[{"id":"dispatch","label":"HANDLE / ID / CALLBACK","steps":[
{"id":"handle","number":1,"label":"opaque handle identifies Timer_t","mode":"CODE","strategy_ref":"code.timer-contract","svg_label":"01","code_ref":"include/task01_software_timers.h:37","description":"Aplikacja nie czyta pól Timer_t.","evidence":"TimerHandle_t."},
{"id":"timer","number":2,"label":"kernel stores callback and ID","mode":"CODE","strategy_ref":"code.timer-contract","svg_label":"02","code_ref":"src/tasks/task01_software_timers.c:249","description":"xTimerCreate wiąże funkcję z TimerTag.","evidence":"one-shot i auto."},
{"id":"callback","number":3,"label":"daemon invokes shared callback","mode":"RUN","event_id":"E04","strategy_ref":"run.callback","svg_label":"03","code_ref":"src/tasks/task01_software_timers.c:68","snapshot_ref":"task01.auto-1","description":"Wywołanie jest synchroniczne w daemon task.","evidence":"PC w callback, daemon SP."},
@@ -81,6 +81,6 @@
"task":{"short_label":"software timers","title":"One-shot, auto-reload i timer daemon","prompt_tex":"Przejdź po A1, A3, A5, A6 i A7. Odtwórz E01E10 i rozdziel moment enqueue command od callback execution.","conclusion_tex":"Software timer jest obsługiwany przez daemon task. API wysyła komendę, aktywna lista przechowuje expiry, a callback działa później na stosie daemon task.","flow":[
{"kind":"block","id":"model","title":"A — model timer service","content_tex":"Przewidź oś czasu i właściciela każdego wywołania.","steps":[{"id":"commands","title":"Rozdziel command i callback.","content_tex":"Wskaż dwa różne momenty dowodowe."},{"id":"timeline","title":"Przewidź 2/4/6/7.","content_tex":"Uwzględnij reset i change period."}]},
{"kind":"block","id":"replay","title":"B — replay Hazard3","content_tex":"Zbadaj controller i daemon w osobnych layoutach.","steps":[{"id":"enqueue","title":"Zbadaj E02/E03/E06.","content_tex":"Sprawdź accepted flags i command source."},{"id":"callbacks","title":"Zbadaj E04/E05/E07/E08.","content_tex":"Porównaj TimerTag, PC, SP i tick."},{"id":"pass","title":"Zbadaj E09/E10.","content_tex":"Sprawdź brak czwartego callbacku i digest."}]},
{"kind":"exercise","id":"late-command","title":"Ćwiczenie — command queue pressure","prompt_tex":"Zmniejsz configTIMER_QUEUE_LENGTH do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż pdFAIL bez utraty poprzedniego stanu timera.","evidence_tex":"Snapshot queue pressure, jawny expected failure i deterministyczny final state.","criterion":"Uczeń nie interpretuje pdFAIL jako wykonanej komendy i nie blokuje callbacku.","based_on":["model","replay"]}
{"kind":"exercise","id":"late-command","title":"Ćwiczenie — command queue pressure","prompt_tex":"Zmniejsz \\texttt{configTIMER\\_QUEUE\\_LENGTH} do 1 i przygotuj kontrolowany burst dwóch komend z block time 0. Obsłuż \\texttt{pdFAIL} bez utraty poprzedniego stanu timera.","evidence_tex":"Snapshot queue pressure, jawny expected failure i deterministyczny final state.","criterion":"Uczeń nie interpretuje pdFAIL jako wykonanej komendy i nie blokuje callbacku.","based_on":["model","replay"]}
]}
}
+1 -1
View File
File diff suppressed because one or more lines are too long
+9 -9
View File
File diff suppressed because one or more lines are too long
+125 -55
View File
File diff suppressed because one or more lines are too long