SOC3050 — Answers and explanations C
Сначала реши вариант C, затем проверь ответы. Это авторская тренировка по исходникам курса, а не прогноз реальных вопросов.
Quick key
| Question | Answer | Lesson |
|---|---|---|
| 1 | B | 00 |
| 2 | B | 00 |
| 3 | B | 00 |
| 4 | A | 01 |
| 5 | B | 01 |
| 6 | A | 01 |
| 7 | A | 01 |
| 8 | C | 02 |
| 9 | C | 02 |
| 10 | D | 02 |
| 11 | D | 03 |
| 12 | A | 03 |
| 13 | C | 03 |
| 14 | A | 04 |
| 15 | A | 04 |
| 16 | B | 04 |
| 17 | D | 05 |
| 18 | C | 05 |
| 19 | B | 05 |
| 20 | D | 05 |
| 21 | B | 05 |
| 22 | A | 06 |
| 23 | D | 06 |
| 24 | D | 06 |
| 25 | C | 06 |
| 26 | A | 07 |
| 27 | D | 07 |
| 28 | B | 07 |
| 29 | C | 07 |
| 30 | D | 08 |
| 31 | C | 08 |
| 32 | C | 08 |
| 33 | A | 08 |
Разбор
1. B — lesson 00
Ответ: Enable its RCC peripheral clock gate
Без clock gate периферия в модели курса не отвечает на конфигурацию. Сначала clock, потом configure, потом use. Clean build не доказывает работу hardware.
Источник: Lesson 00, slides 5, 11.
2. B — lesson 00
Ответ: 44
Первые16 vector slots принадлежат core. Exception/vector number =16+IRQ=44=0x2C. IRQ number и exception number не одно и то же.
Источник: Lesson 00, slides 3b, 9.
3. B — lesson 00
Ответ: Tasks share a physical address space without an MMU providing private virtual maps
Отдельные стеки не создают отдельные address spaces. Без настроенной аппаратной защиты ошибочная запись в существующую RAM может повредить соседа; unmapped адрес может fault.
Источник: Lesson 00, slides 8.
4. A — lesson 01
Ответ: BLT is taken; BCC is not taken
Signed: FFFFFFFF=-1, и -1<1. Unsigned:4294967295>1. Поэтому signed BLT и unsigned BCC расходятся.
Источник: Lesson 01, slides 7.
5. B — lesson 01
Ответ: r4; r0 is caller-saved and may carry the result
r0-r3 и r12 — scratch/caller-saved; r4-r11 — callee-saved в соглашении курса. Возврат обычного 32-битного результата происходит через r0.
Источник: Lesson 01, slides 18.
6. A — lesson 01
Ответ: Read a 32-bit constant from a nearby literal pool
Полная 32-битная константа не помещается в 16-битную instruction. Literal pool хранит слово рядом с кодом; PC-relative load достаёт его.
Источник: Lesson 01, slides 9, 12.
7. A — lesson 01
Ответ: LR=0x08000125; return instruction at 0x08000124
Следующая instruction начинается после4 байт:124. LR содержит next|1=125. BX использует bit0 как Thumb-признак, а адресом становится124.
Источник: Lesson 01, slides 8, 20.
8. C — lesson 02
Ответ: A multiple-definition link error
Две внешние strong definitions одного символа конфликтуют. Weak/strong override — другой, явно объявленный механизм.
Источник: Lesson 02, slides 3.
9. C — lesson 02
Ответ: Its promised zero initial value is no longer guaranteed
В bare-metal исполнении обещание C обеспечивает startup. RAM может сохранить старое содержимое или иметь случайное; наблюдаемое0 на одном старте не исправляет bug.
Источник: Lesson 02, slides 5, 8.
10. D — lesson 02
Ответ: Preprocess, compile, assemble, link/locate; then the simulator executes the image
Симуляторы исполняют готовую firmware. Получение .o и размещение sections — задача toolchain; ни Wokwi, ни Renode не заменяет эти build stages.
Источник: Lesson 02, slides 1, 7, 9.
11. D — lesson 03
Ответ: Polling checks readiness; an interrupt invokes a handler; DMA transfers data without a CPU instruction per item
DMA требует настройки и обработки завершения, но убирает CPU из переноса каждого элемента. Ни interrupts, ни polling не дают бесконечный буфер или гарантию при любой нагрузке.
Источник: Lesson 03, slides 1.
12. A — lesson 03
Ответ: PRIMASK affects local interrupt handling, not execution on the other core
Masking даёт исключение конкурента на одном core. Другой core продолжает работу; нужны подходящие межъядерные atomics/locks. Сам учебный M0+ — single-core.
Источник: Lesson 03, slides 5.
13. C — lesson 03
Ответ: Restore the saved PRIMASK value
enter/leave в os.c сохраняет старую маску. Безусловный enable из внутренней секции преждевременно нарушил бы защиту внешней. Для simple snippets с парой disable/enable предполагается известное исходное состояние.
Источник: Lesson 03, slides 5.
14. A — lesson 04
Ответ: Its strong symbol overrides the weak symbol during linking
Замена происходит у linker, который заполняет таблицу адресом strong definition. NVIC не знает ни C, ни имён функций.
Источник: Lesson 04, slides 6, 8.
15. A — lesson 04
Ответ: Run-time address in RAM, load image stored in flash
VMA — рабочий RAM address; LMA — flash address исходного образа. Startup копирует между ними. Это не desktop virtual memory.
Источник: Lesson 04, slides 10, 14.
16. B — lesson 04
Ответ: _write
В этой newlib-среде printf вызывает _write. Сначала он polled, в lesson08 заменяется strong buffered implementation. Также нужно проверить UART init и _sbrk.
Источник: Lesson 04, slides 4c, 17.
17. D — lesson 05
Ответ: 11 (analog)
OR не очищает единицы:11|01=11. Сначала AND с инверсной2-битной маской, потом OR нового кода. Остальные поля нужно сохранить.
Источник: Lesson 05, slides 5, 15.
18. C — lesson 05
Ответ: PA2 and PB2
У line2 один port-select: она выбирает pin2 только одного порта. Разные номера pins используют разные линии; общий handler сам по себе не запрещает несколько линий.
Источник: Lesson 05, slides 24.
19. B — lesson 05
Ответ: 0x0800008C
Vector=16+19=35. Смещение=35*4=140=0x8C. Таблица хранит адрес handler, а вычисленное значение — адрес самого vector word.
Источник: Lesson 05, slides 27.
20. D — lesson 05
Ответ: No; bit 3 is 1, so the active-low button is released
0x8=1<<3 → pin high. Кнопка active-low: pressed означает0. IDR даёт уровень, MODER задаёт режим.
Источник: Lesson 05, slides 9, 10, 19.
21. B — lesson 05
Ответ: Clear pending flags, record edges, return; decide stable state outside the ISR
Handler должен быть коротким. Debounce ждёт20 ms тишины в main/task; ожидание в ISR задержит равные и менее срочные interrupts.
Источник: Lesson 05, slides 29, 31.
22. A — lesson 06
Ответ: It keeps future deadlines on the original time grid
+=period не переносит всю сетку вслед за разовым опозданием. Сам пропущенный deadline это не отменяет; долгий job по-прежнему задерживает superloop.
Источник: Lesson 06, slides 4.
23. D — lesson 06
Ответ: 100 Hz and 2.5 ms
Counter=48 MHz/480=100 kHz →10 us/count. Period=100010 us=10 ms →100 Hz. High=25010 us=2.5 ms.
Источник: Lesson 06, slides 5b, 8.
24. D — lesson 06
Ответ: Wrong alternate-function selection or a disabled channel output
Работающий counter не гарантирует связь channel→pin. Проверяем CCER.CC1E, MODER=AF, AFR и wiring. Аналогично отсутствие capture в Wokwi — ограничение модели, не доказательство неверной формулы.
Источник: Lesson 06, slides 10, 12, 13b.
25. C — lesson 06
Ответ: Hardware latches CNT at the edge before ISR latency occurs
ISR читает уже сохранённый CCR timestamp. При EXTI счётчик читается позже на величину latency; различная задержка двух edges искажает width. Capture всё равно нужно прочесть до overwrite.
Источник: Lesson 06, slides 12, 13.
26. A — lesson 07
Ответ: 0x01000000
У xPSR T расположен в bit24:1<<24=0x01000000. Это не bit0 function pointer; при exception return состояние Thumb восстанавливается из frame.
Источник: Lesson 07, slides 8.
27. D — lesson 07
Ответ: Round-robin time slicing among equals
pick начинает поиск после current и заменяет best только строго большим priority. Поэтому равные highest READY tasks чередуются; low priorities могут ждать.
Источник: Lesson 07, slides 9, 10.
28. B — lesson 07
Ответ: Mutex: BLOCKED; delay: SLEEPING
В модели kernel BLOCKED означает ожидание объекта, SLEEPING — ожидание wake time. Обе задачи пока не используют CPU; running обозначается current среди READY.
Источник: Lesson 07, slides 10, 12.
29. C — lesson 07
Ответ: Index 6; PSP when bit 2 is 1, otherwise MSP
Порядок hardware frame:r0,r1,r2,r3,r12,lr,pc,xPSR. PC — index6. LR исключения определяет стек frame; addr2line затем связывает PC со строкой исходника.
Источник: Lesson 07, slides 18.
30. D — lesson 08
Ответ: 100 microseconds per byte; about 6.4 ms for 64 bytes
8N1=10 bits/byte.10/100000=100 us;64*100 us=6.4 ms. ISR всё равно должен вовремя снимать каждый hardware byte; queue лишь даёт task запас.
Источник: Lesson 08, slides 2, 3.
31. C — lesson 08
Ответ: The two XOR changes cancel and the corrupted body passes this checksum
XOR дельта равна01^01=00. Checksum обнаруживает любой одиночный bit flip, но не все комбинации ошибок; он не восстанавливает данные.
Источник: Lesson 08, slides 10.
32. C — lesson 08
Ответ: To avoid treating echoed commands as received frames and mixing telemetry into partial shell lines
На одной UART-линии сосуществуют shell и framed protocol. Эхо $frame могло бы выглядеть как ответ board, а telemetry посреди набираемой строки разрушила бы разметку.
Источник: Lesson 08, slides 9, 9b.
33. A — lesson 08
Ответ: Two sequence numbers are missing; it does not identify the physical cause
13-10-1=2: отсутствуют11 и12. Sequence gaps показывают недоставленные валидные frames, но не различают повреждение, drop, disconnect и другие причины.
Источник: Lesson 08, slides 12, 13.
Как использовать результат
Каждая ошибка — повод вернуться к указанному слайду и объяснить механизм своими словами. Балл здесь — диагностика, не прогноз оценки. Повторяй вопросы после разбора без подсматривания.