chore: preserve current FreeRTOS and C card updates
This commit is contained in:
+4
-4
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"card":{"number":"07","slug":"isr-semaphore","title":"Przerwanie zewnętrzne i semaphore FromISR","topic":"Hazard3 MEI, xISRStack, xSemaphoreGiveFromISR i yield","status":"Gotowa","version":"v00.01"},
|
||||
"front":{"goal":"Uczeń rozdziela task context od ISR context, używa API FromISR i dowodzi natychmiastowego przełączenia do wyższego taska.","scope":"Prawdziwe wejście IRQ5 testbencha wywołuje machine external interrupt. Port zapisuje pełny kontekst i przechodzi na xISRStack. ISR czyści źródło, daje binary semaphore i wywołuje portYIELD_FROM_ISR. Waiter priority 3 działa przed powrotem do stimulus priority 2."},
|
||||
"front":{"goal":"Uczeń rozdziela task context od ISR context, używa API FromISR i dowodzi natychmiastowego przełączenia do wyższego taska.","scope":"Prawdziwe wejście IRQ5 testbencha wywołuje machine external interrupt. Port zapisuje pełny kontekst i przechodzi na \\texttt{xISRStack}. ISR czyści źródło, daje binary semaphore i wywołuje \\texttt{portYIELD\\_FROM\\_ISR}. Waiter priority 3 działa przed powrotem do stimulus priority 2."},
|
||||
"viewpoints":[
|
||||
{"id":"A1","label":"CONTEXT","status":"enabled","subtitle":"Testbench → Hazard3 → port → task"},
|
||||
{"id":"A2","label":"STRUCTURE","status":"unavailable","subtitle":"Struktura","reason":"Obiekty runtime i ich relacje są pełniej pokazane w A7."},
|
||||
@@ -74,9 +74,9 @@
|
||||
]}]}]}
|
||||
],
|
||||
"learning":{"model_label":"Model ISR handoff","model":"Uczeń rozdziela hardware source, trap port, xISRStack, FromISR API i task scheduling.","replay_label":"Replay realnego MEI","replay":"Uczeń odtwarza E01–E09 i wiąże mcause, source clear, xHPW, trzy SP oraz kolejność context restore.","criterion":"PASS; mcause=MEI; source=0 przed give; xHPW=1; waiter E07 przed stimulus E08; trzy różne stosy; deterministyczny digest.","requirement":"Zaprojektowanie i zbadanie bezpiecznego handoff z prawdziwego przerwania do taska FreeRTOS."},
|
||||
"task":{"short_label":"ISR semaphore","title":"External IRQ → FromISR semaphore → high-priority task","prompt_tex":"Przejdź po A1, A3, A5, A6 i A7. Odtwórz E01–E09 i udowodnij source-clear-before-give oraz waiter-before-stimulus.","conclusion_tex":"ISR działa na osobnym stacku i używa FromISR API. xHigherPriorityTaskWoken jest informacją dla portu; dopiero portYIELD_FROM_ISR powoduje restore kontekstu wyższego taska przed powrotem do przerwanego kodu.","flow":[
|
||||
"task":{"short_label":"ISR semaphore","title":"External IRQ → FromISR semaphore → high-priority task","prompt_tex":"Przejdź po A1, A3, A5, A6 i A7. Odtwórz E01–E09 i udowodnij source-clear-before-give oraz waiter-before-stimulus.","conclusion_tex":"ISR działa na osobnym stacku i używa FromISR API. \\texttt{xHigherPriorityTaskWoken} jest informacją dla portu; dopiero \\texttt{portYIELD\\_FROM\\_ISR} powoduje restore kontekstu wyższego taska przed powrotem do przerwanego kodu.","flow":[
|
||||
{"kind":"block","id":"contract","title":"A — kontrakt przerwania","content_tex":"Rozdziel source, vector, port, ISR i task.","steps":[{"id":"order","title":"Ustal kolejność ISR.","content_tex":"Najpierw clear, potem give, na końcu yield."},{"id":"predict","title":"Przewidź context restore.","content_tex":"Wskaż, czy pierwszy wykona się waiter czy stimulus."}]},
|
||||
{"kind":"block","id":"replay","title":"B — replay Hazard3","content_tex":"Każdy RUN zaczyna się od czystej RAM i wyłączonego źródła.","steps":[{"id":"trap","title":"Zbadaj E03–E05.","content_tex":"Zapisz mcause, mepc, isr_sp i source state."},{"id":"handoff","title":"Zbadaj E06–E08.","content_tex":"Porównaj xHPW i kolejność tasków."},{"id":"pass","title":"Zbadaj E09.","content_tex":"Sprawdź trzy stosy, markers i digest."}]},
|
||||
{"kind":"exercise","id":"no-yield","title":"Ćwiczenie — brak yield request","prompt_tex":"W kontrolowanym wariancie pomiń portYIELD_FROM_ISR, zachowując GiveFromISR. Zmierz, kiedy waiter zacznie działać i wskaż następny legalny scheduling point.","evidence_tex":"Dwa timestampowane ślady E07/E08 z yield i bez yield oraz opis różnicy.","criterion":"Uczeń nie myli odblokowania taska z natychmiastowym wykonaniem i przywraca poprawny yield w wersji finalnej.","based_on":["contract","replay"]}
|
||||
{"kind":"block","id":"replay","title":"B — replay Hazard3","content_tex":"Każdy RUN zaczyna się od czystej RAM i wyłączonego źródła.","steps":[{"id":"trap","title":"Zbadaj E03–E05.","content_tex":"Zapisz \\texttt{mcause}, \\texttt{mepc}, \\texttt{isr\\_sp} i source state."},{"id":"handoff","title":"Zbadaj E06–E08.","content_tex":"Porównaj xHPW i kolejność tasków."},{"id":"pass","title":"Zbadaj E09.","content_tex":"Sprawdź trzy stosy, markers i digest."}]},
|
||||
{"kind":"exercise","id":"no-yield","title":"Ćwiczenie — brak yield request","prompt_tex":"W kontrolowanym wariancie pomiń \\texttt{portYIELD\\_FROM\\_ISR}, zachowując GiveFromISR. Zmierz, kiedy waiter zacznie działać i wskaż następny legalny scheduling point.","evidence_tex":"Dwa timestampowane ślady E07/E08 z yield i bez yield oraz opis różnicy.","criterion":"Uczeń nie myli odblokowania taska z natychmiastowym wykonaniem i przywraca poprawny yield w wersji finalnej.","based_on":["contract","replay"]}
|
||||
]}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user