Compare commits
1 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| b7c3747e2c |
@@ -7,7 +7,7 @@ NM := $(RISCV_PREFIX)nm
|
||||
READELF := $(RISCV_PREFIX)readelf
|
||||
HOSTCC ?= cc
|
||||
|
||||
LOCAL_ENV_ROOT := $(abspath ../../../rv32i-hazard3-env)
|
||||
LOCAL_ENV_ROOT := $(abspath ../../../../../edu/rv32i-hazard3-student-env)
|
||||
RV_ENV_ROOT ?= $(if $(wildcard /opt/rv-env/vendor/Hazard3),/opt/rv-env,$(LOCAL_ENV_ROOT))
|
||||
H3_COMMON := $(RV_ENV_ROOT)/vendor/Hazard3/test/sim/common
|
||||
H3_INIT := $(H3_COMMON)/init.S
|
||||
|
||||
@@ -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-first-task}%
|
||||
\href{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-first-task}{\qrcode[level=L,height=22mm]{https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-first-task}}%
|
||||
\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/a2538a1a-3c37-4c14-a6ea-db5aba8fd038}%
|
||||
\href{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a2538a1a-3c37-4c14-a6ea-db5aba8fd038}{\qrcode[level=L,height=22mm]{https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/a2538a1a-3c37-4c14-a6ea-db5aba8fd038}}%
|
||||
\end{minipage}%
|
||||
\end{minipage}%
|
||||
}%
|
||||
@@ -312,16 +312,16 @@ Najpierw czytaj A1--A3 bez uruchamiania programu.
|
||||
Rozróżnij static context, adres pola handle, wartość handle, TCB i stack.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{prove-c-abi · Udowodnij callback ABI.}
|
||||
Na E03 zbadaj argumenty xTaskCreate, a na E06 rejestr a0 przed prologiem sum_task_entry.
|
||||
Na E03 zbadaj argumenty \texttt{xTaskCreate}, a na E06 rejestr \texttt{a0} przed prologiem \texttt{sum\_task\_entry}.
|
||||
\end{ESCStepFrame}
|
||||
\end{ESCBlockFrame}
|
||||
\begin{ESCBlockFrame}{B — sekwencja i scheduler}
|
||||
Każdy RUN replay zaczyna się od czystej RAM.
|
||||
\begin{ESCStepFrame}{follow-context · Śledź jeden adres context.}
|
||||
Porównaj &g_worker_a w main, xTaskCreate i sum_task_entry.
|
||||
Porównaj \texttt{\&g\_worker\_a} w \texttt{main}, \texttt{xTaskCreate} i \texttt{sum\_task\_entry}.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{follow-stack · Śledź osobny stos.}
|
||||
Potwierdź stack_low <= sp <= stack_high i created_handle == tcb_address.
|
||||
Potwierdź \texttt{stack\_low <= sp <= stack\_high} i \texttt{created\_handle == tcb\_address}.
|
||||
\end{ESCStepFrame}
|
||||
\begin{ESCStepFrame}{follow-scheduler · Śledź A-B-A.}
|
||||
Zapisz triplet workerów, ticki i liczbę obserwowanych zmian.
|
||||
@@ -335,7 +335,7 @@ Wybierz E01, E03, E06, E08, E10 i E12. Dla każdego zapisz timestamp, PC, SP, ad
|
||||
\tcblower\textbf{Task acceptance:} Program wypisuje PASS; oba wyniki wynoszą 200010000; E06 pokazuje a0=\&workerA; trace zawiera A-B-A; context, TCB i stack są rozdzielone.
|
||||
\end{ESCTaskFrame}
|
||||
\begin{ESCConclusionFrame}
|
||||
Surowe API C przekazuje zachowanie i dane oddzielnie: \texttt{TaskFunction_t} wybiera kod, a \texttt{void*} niesie adres jawnego kontekstu. Scheduler, TCB i stos pozostają własnością FreeRTOS.
|
||||
Surowe API C przekazuje zachowanie i dane oddzielnie: \texttt{TaskFunction\_t} wybiera kod, a \texttt{void*} niesie adres jawnego kontekstu. Scheduler, TCB i stos pozostają własnością FreeRTOS.
|
||||
\end{ESCConclusionFrame}
|
||||
\ESCSectionBlockEnd
|
||||
|
||||
|
||||
@@ -314,7 +314,7 @@
|
||||
},
|
||||
{
|
||||
"title": "A6 — State", "order": 50, "content_kind": "prose", "asset_page_mode": "one-per-page",
|
||||
"content_tex": "Statyczny lifetime context, diagnostyczny trace_state i rzeczywiste stany taska kernela to trzy różne osie.",
|
||||
"content_tex": "Statyczny lifetime context, diagnostyczny \\texttt{trace\\_state} i rzeczywiste stany taska kernela to trzy różne osie.",
|
||||
"assets": [{
|
||||
"path": "assets/a6-state.png", "html_path": "assets/a6-state.svg", "source_path": "assets/a6-state.puml",
|
||||
"caption": "A6 STATE — korelacja stanu kontekstu z Ready, Running, time slice i Deleted.", "label": "fig:a6-state", "alt": "Oddzielne tory stanu diagnostycznego i stanu FreeRTOS.", "kind": "diagram", "width": 1.0,
|
||||
@@ -370,17 +370,17 @@
|
||||
"task01": {
|
||||
"title": "Pierwszy task FreeRTOS — callback, context, TCB i stos",
|
||||
"uuid": "a2538a1a-3c37-4c14-a6ea-db5aba8fd038",
|
||||
"prompt_tex": "Przejdź po aktywnych perspektywach A1, A2, A3, A5, A6 i A7. Dla kroków RUN użyj Enter lub F2 i udowodnij w Hazard3/GDB przepływ \\texttt{xTaskCreate -> sum_task_entry -> WorkerContext -> vTaskDelete}.",
|
||||
"prompt_tex": "Przejdź po aktywnych perspektywach A1, A2, A3, A5, A6 i A7. Dla kroków RUN użyj Enter lub F2 i udowodnij w Hazard3/GDB przepływ \\texttt{xTaskCreate -> sum\\_task\\_entry -> WorkerContext -> vTaskDelete}.",
|
||||
"criterion": "Program wypisuje PASS; oba wyniki wynoszą 200010000; E06 pokazuje a0=&workerA; trace zawiera A-B-A; context, TCB i stack są rozdzielone.",
|
||||
"conclusion_tex": "Surowe API C przekazuje zachowanie i dane oddzielnie: \\texttt{TaskFunction_t} wybiera kod, a \\texttt{void*} niesie adres jawnego kontekstu. Scheduler, TCB i stos pozostają własnością FreeRTOS.",
|
||||
"conclusion_tex": "Surowe API C przekazuje zachowanie i dane oddzielnie: \\texttt{TaskFunction\\_t} wybiera kod, a \\texttt{void*} niesie adres jawnego kontekstu. Scheduler, TCB i stos pozostają własnością FreeRTOS.",
|
||||
"flow": [
|
||||
{"kind": "block", "id": "c-model", "title": "A — model C i granica ABI", "content_tex": "Najpierw czytaj A1--A3 bez uruchamiania programu.", "steps": [
|
||||
{"id": "read-context", "title": "Odczytaj WorkerContext.", "content_tex": "Rozróżnij static context, adres pola handle, wartość handle, TCB i stack."},
|
||||
{"id": "prove-c-abi", "title": "Udowodnij callback ABI.", "content_tex": "Na E03 zbadaj argumenty xTaskCreate, a na E06 rejestr a0 przed prologiem sum_task_entry."}
|
||||
{"id": "prove-c-abi", "title": "Udowodnij callback ABI.", "content_tex": "Na E03 zbadaj argumenty \\texttt{xTaskCreate}, a na E06 rejestr \\texttt{a0} przed prologiem \\texttt{sum\\_task\\_entry}."}
|
||||
]},
|
||||
{"kind": "block", "id": "runtime-trace", "title": "B — sekwencja i scheduler", "content_tex": "Każdy RUN replay zaczyna się od czystej RAM.", "steps": [
|
||||
{"id": "follow-context", "title": "Śledź jeden adres context.", "content_tex": "Porównaj &g_worker_a w main, xTaskCreate i sum_task_entry."},
|
||||
{"id": "follow-stack", "title": "Śledź osobny stos.", "content_tex": "Potwierdź stack_low <= sp <= stack_high i created_handle == tcb_address."},
|
||||
{"id": "follow-context", "title": "Śledź jeden adres context.", "content_tex": "Porównaj \\texttt{\\&g\\_worker\\_a} w \\texttt{main}, \\texttt{xTaskCreate} i \\texttt{sum\\_task\\_entry}."},
|
||||
{"id": "follow-stack", "title": "Śledź osobny stos.", "content_tex": "Potwierdź \\texttt{stack\\_low <= sp <= stack\\_high} i \\texttt{created\\_handle == tcb\\_address}."},
|
||||
{"id": "follow-scheduler", "title": "Śledź A-B-A.", "content_tex": "Zapisz triplet workerów, ticki i liczbę obserwowanych zmian."}
|
||||
]},
|
||||
{"kind": "exercise", "id": "raw-c-debug-report", "title": "Ćwiczenie — timestampowany ślad taska C", "prompt_tex": "Wybierz E01, E03, E06, E08, E10 i E12. Dla każdego zapisz timestamp, PC, SP, adres context, wartość handle/TCB i stan. Wyjaśnij, których adresów po E11 nie wolno dereferencjonować.", "evidence_tex": "Timestampowane snapshoty Hazard3/GDB powiązane z kotwami UML oraz końcowy PASS.", "criterion": "Raport zachowuje tożsamość context, rozdziela TCB od stack i nie myli trace_state z eTaskState.", "based_on": ["c-model", "runtime-trace"]}
|
||||
|
||||
+1
-1
File diff suppressed because one or more lines are too long
+9
-9
File diff suppressed because one or more lines are too long
+130
-60
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user