{ "$schema": "../../../tools/card-layouts/schemas/card-source.schema.json", "schema": "esc-card-source.v1", "card": { "id": "mpabi-freertos-c-11-static-allocation", "series": "freertos-c", "series_title": "FreeRTOS C", "number": "11", "count": "15", "slug": "static-allocation", "title": "Static and dynamic allocation", "topic": "task, queue and timer with two storage policies", "project": "Freestanding C nad FreeRTOS", "subject": "Informatyka", "level": "Rok 2 · L11 · RV32I/Hazard3", "revision_date": "2026-07-19T00:00:00+02:00", "status": "Gotowa", "version": "v00.01", "uuid": "33c1da5c-dd20-5ed1-a829-64a5306fc804", "author": "M. Pabiszczak", "year": "2026" }, "generated": { "tex": "doc/generated/main.tex", "html": "web/index.html", "html_css": "web/style.css", "html_tree_inspector": false, "react_app": true }, "render_dictionary": false, "viewpoints": [ { "id": "A1", "label": "CONTEXT", "subtitle": "ownership boundaries", "status": "enabled", "target_label": "fig:a1-context" }, { "id": "A2", "label": "STRUCTURE", "subtitle": "dynamic/static object pairs", "status": "enabled", "target_label": "fig:a2-structure" }, { "id": "A3", "label": "DISPATCH", "subtitle": "same kernel dispatch", "status": "unavailable", "reason": "Storage policy does not change callback dispatch." }, { "id": "A4", "label": "APPLICATION", "subtitle": "behavior parity", "status": "enabled", "target_label": "fig:a4-application" }, { "id": "A5", "label": "FLOW", "subtitle": "H0/H1/H2/H3", "status": "enabled", "target_label": "fig:a5-flow" }, { "id": "A6", "label": "STATE", "subtitle": "covered by flow", "status": "unavailable", "reason": "No new lifecycle state machine; the card compares storage." }, { "id": "A7", "label": "RUNTIME", "subtitle": "address provenance", "status": "enabled", "target_label": "fig:a7-runtime" }, { "id": "A8", "label": "PATTERNS", "subtitle": "policy comparison", "status": "unavailable", "reason": "No wrapper pattern is introduced in this C card." } ], "debug_strategies": { "code.storage": { "id": "code.storage", "kind": "code", "action": "open", "expected_observations": [ "persistent Static* buffers", "application static Idle/timer task memory" ], "assertions": [ "no local-lifetime storage", "both allocation modes enabled" ], "evidence_fields": [ "symbol", "section", "code_ref" ], "prerequisites": [ "FC11 source" ], "layout": [ "buffers", "create APIs", "FreeRTOSConfig" ], "commands": [ "rg -n 'x.*CreateStatic|vApplicationGet.*TaskMemory|Static(Task|Queue|Timer)_t' include src" ] }, "run.heap": { "id": "run.heap", "kind": "run", "action": "replay", "expected_observations": [ "H1 < H0", "H2 == H1", "H3 == H2" ], "assertions": [ "objects alive at H3", "no exact delta assumption" ], "evidence_fields": [ "H0", "H1", "H2", "H3", "timestamp" ], "prerequisites": [ "clean Hazard3 RAM" ], "layout": [ "heap values", "event order" ], "commands": [ "print g_fc11.heap_h0", "print g_fc11.heap_h1", "print g_fc11.heap_h2", "print g_fc11.heap_h3" ] }, "run.parity": { "id": "run.parity", "kind": "run", "action": "replay", "expected_observations": [ "both receive 0xCAFE", "both timers callback once" ], "assertions": [ "distinct stacks", "PASS and deterministic digest" ], "evidence_fields": [ "received", "timer calls", "SP", "digest" ], "prerequisites": [ "scheduler running" ], "layout": [ "two branches", "verifier" ], "commands": [ "print/x g_fc11.dynamic_received", "print/x g_fc11.static_received", "print g_fc11_pass" ] } }, "template": "templates/karta-klasyczna.json", "title_block": { "category": "KARTA PRACY · INFORMATYKA", "prepared_by": "M. Pabiszczak", "prepared_on": "2026-07-19T00:00:00+02:00", "title": "Static and dynamic allocation", "url": "https://dce7fb9d-7b2f-5d49-96a2-3a30d3070b84.mpabi.pl/f4d7caf3-d665-5a2d-b9eb-39a120a64ff7", "repository_url": "https://zsl-gitea.mpabi.pl/edu-freertos-c/lab-rv32i-freertos-c-static-allocation", "url_host_uuid": "dce7fb9d-7b2f-5d49-96a2-3a30d3070b84", "url_domain": "mpabi.pl", "doc_uuid": "f4d7caf3-d665-5a2d-b9eb-39a120a64ff7", "revision": "v00.01", "issued_on": "2026-07-19T00:00:00+02:00", "series": "FREERTOS-C-11", "document_type": "karta pracy", "tool": "card-layouts", "show_qr": true, "show_repository_qr": true, "height_cm": 2.6, "repeat_on_every_page": true, "replace_front_matter": true }, "front_page_scope": { "title": "Cel karty", "content_tex": "Uczeń rozdziela semantykę obiektu FreeRTOS od polityki przechowywania i dowodzi jej przez adresy oraz cztery pomiary wolnego heap.", "scope_title": "Zakres karty", "scope_content_tex": "Dynamiczny i statyczny task, queue oraz timer wykonują ten sam eksperyment. H1 jest mniejsze od H0, H2 równa się H1, a H3 równa się H2. Pamięć Idle i timer-service dostarcza aplikacja.", "scope_table": { "headers": [ "Lekcja", "Task", "Najważniejsza idea", "Priorytet", "Status", "Version" ], "rows": [ { "chapter": "FC11", "task": "Task01", "idea_tex": "task, queue and timer with two storage policies", "priority": "główny", "status": "ready", "version": "v00.01", "key": true } ] } }, "side_margin_tree_layout": { "columns": [ { "id": "zawodowe", "label": "TECH", "side": "left", "tree": "WE -> EK -> KW", "description": "Dowody runtime." }, { "id": "ogolne", "label": "OG", "side": "right", "tree": "WE -> EN -> KW", "description": "Model FreeRTOS C." } ] }, "learning_effects": { "FC11.EN01": { "bloom_level": "Analiza", "label": "Storage ownership", "text": "Uczeń rozdziela semantykę obiektu i politykę przechowywania.", "assessment_criteria": [ "FC11.KW01" ] }, "FC11.EK01": { "bloom_level": "Zastosowanie", "label": "Heap replay", "text": "Uczeń odtwarza E01–E08 i dowodzi H1