SOC3050 — Answers and explanations A

Сначала реши вариант A, затем проверь ответы. Это авторская тренировка по исходникам курса, а не прогноз реальных вопросов.

Quick key

Question Answer Lesson
1 A 00
2 B 00
3 A 00
4 A 01
5 A 01
6 D 01
7 D 01
8 C 02
9 A 02
10 D 02
11 B 03
12 A 03
13 B 03
14 B 04
15 D 04
16 A 04
17 D 05
18 D 05
19 A 05
20 B 05
21 D 05
22 C 06
23 B 06
24 C 06
25 C 06
26 B 07
27 A 07
28 C 07
29 C 07
30 C 08
31 D 08
32 B 08
33 C 08

Разбор

1. A — lesson 00

Ответ: A unified address space for code and data

У Cortex-M единая карта адресов: обычный load читает и RAM, и flash. Отдельные внутренние шины не создают отдельные пространства адресов.

Источник: Lesson 00, slides 4, 5.

2. B — lesson 00

Ответ: D4 C3 B2 A1

Little-endian: младший байт идёт по младшему адресу. Разбиваем слово на A1 B2 C3 D4 и записываем в обратном порядке.

Источник: Lesson 00, slides 10.

3. A — lesson 00

Ответ: MSP; the interrupted task hardware frame is placed on PSP

Контекст прерванной задачи аппаратно сохраняется на её PSP. Сам handler исполняется с MSP. Это разные действия при входе в исключение.

Источник: Lesson 00, slides 8, 3b.

4. A — lesson 01

Ответ: 3 instructions, 2 data accesses

LDR читает данные, ADDS работает внутри CPU, STR записывает данные. Больше инструкций не означает больше обращений к данным.

Источник: Lesson 01, slides 4.

5. A — lesson 01

Ответ: BL overwrites LR with the return address from g

LR хранит один адрес возврата. Вложенный BL заменит его, поэтому non-leaf функция сохраняет свой старый LR, обычно в стеке.

Источник: Lesson 01, slides 8, 18.

6. D — lesson 01

Ответ: BCC

BCC проверяет unsigned lower, то есть отсутствие carry при сравнении. BLT — signed less: для значений с установленным старшим битом результат может отличаться.

Источник: Lesson 01, slides 7.

7. D — lesson 01

Ответ: 0x080004A1

В указателе обработчика установлен бит 0, Thumb: 0x080004A0 | 1. Адрес первой инструкции при этом остаётся чётным.

Источник: Lesson 01, slides 19.

8. C — lesson 02

Ответ: table: flash; count: RAM; limit: RAM plus a flash initialiser

table попадает в .rodata, count — в .bss, limit — в .data. Только .data требует одновременно рабочую RAM и сохранённые начальные значения во flash.

Источник: Lesson 02, slides 4, 5.

9. A — lesson 02

Ответ: Linker: undefined reference to sensor_read

При отдельной компиляции вызов может остаться неразрешённым до link. Если определения нет, linker выдаёт undefined reference; multiple definition означает противоположную проблему.

Источник: Lesson 02, slides 3.

10. D — lesson 02

Ответ: 0x08000120

Type 04 задаёт старшие 16 бит: (0x0800 << 16) + 0x0120 = 0x08000120.

Источник: Lesson 02, slides 7.

11. B — lesson 03

Ответ: Volatile forces accesses but does not make read-modify-write atomic

Сам aligned load/store неделим, но ++ состоит из чтения, изменения и записи. ISR может вклиниться между ними; нужна короткая критическая секция.

Источник: Lesson 03, slides 4, 5.

12. A — lesson 03

Ответ: No: a single aligned word load sees the old or new value

В условиях задачи один writer и одно выровненное машинное слово. Чтение не разрывается на половины. Volatile нужен для реальных чтений, но сам по себе не запрещает прерывания.

Источник: Lesson 03, slides 7.

13. B — lesson 03

Ответ: It delays configurable interrupts and increases worst-case latency

Пока PRIMASK маскирует настраиваемые исключения, они не обслуживаются. NMI и HardFault этой маской не отключаются.

Источник: Lesson 03, slides 5, 8.

14. B — lesson 04

Ответ: SP=0x20003000; handler=0x080004A0

Декодируем каждую четвёрку little-endian. Второе слово — 0x080004A1; убираем Thumb bit для адреса инструкции.

Источник: Lesson 04, slides 5, 7.

15. D — lesson 04

Ответ: The vector still selects Default_Handler and the board hangs there

Имена символов чувствительны к регистру. Неверное имя не заменяет weak alias; Default_Handler в этом репозитории — бесконечный цикл.

Источник: Lesson 04, slides 8.

16. A — lesson 04

Ответ: Increase flash wait states, then increase clock frequency

Сначала flash должна выдерживать будущую скорость. SystemCoreClock — программная переменная, а не команда переключения генератора.

Источник: Lesson 04, slides 16.

17. D — lesson 05

Ответ: Bits 13:12, value 01

MODER выделяет по два бита на pin: 2*6=12, значит 13:12. Коды: 00 input, 01 output, 10 AF, 11 analog.

Источник: Lesson 05, slides 4, 5.

18. D — lesson 05

Ответ: 0x00800004

Set PB2: 1<<2 = 0x4. Reset PB7: 1<<(7+16)=0x00800000. Объединяем OR.

Источник: Lesson 05, slides 12.

19. A — lesson 05

Ответ: AFR[1] bits 11:8

10/8=1, 10 mod 8=2; 4*2=8. Поле AFR[1] — 11:8. MODER отдельно должен выбирать AF mode.

Источник: Lesson 05, slides 14.

20. B — lesson 05

Ответ: EXTI->RPR1 = 1u << 1;

RPR1 — write-1-to-clear. Присваивание пишет 1 только в bit1. |= читает bit4=1 и записывает его обратно, тем самым также очищая необработанный bit4.

Источник: Lesson 05, slides 25.

21. D — lesson 05

Ответ: The pending event does not execute the handler until the IRQ can be serviced

В цепочке pin → EXTI → NVIC → vector нужны все разрешения. Наличие pending в EXTI ещё не доказывает, что handler может запуститься.

Источник: Lesson 05, slides 23, 25, 26.

22. C — lesson 06

Ответ: 95999

48 000 000 * 0.002 = 96 000 тактов. LOAD хранит ticks-1 = 95 999.

Источник: Lesson 06, slides 2.

23. B — lesson 06

Ответ: PSC=47, ARR=9999

Делитель 48 даёт 1 MHz, значит PSC=47. За 10 ms проходит 10 000 отсчётов: ARR=9999.

Источник: Lesson 06, slides 5b.

24. C — lesson 06

Ответ: 48 ms; yes

До нуля от FFFFFFF0 — 16, затем ещё 32: всего 48. Проверка 48>=40 истинна. Предполагается, что не прошло целое дополнительное переполнение.

Источник: Lesson 06, slides 3.

25. C — lesson 06

Ответ: TIM3->SR = ~TIM_SR_UIF;

Записываем 0 в UIF и 1 в остальные status flags. EXTI-стиль с записью 1 оставит UIF установленным и может вызвать бесконечный вход в ISR.

Источник: Lesson 06, slides 7.

26. B — lesson 07

Ответ: Return to Thread mode using PSP

FD — специальный код exception return, не обычный указатель. Он выбирает Thread mode и PSP; F9 выбирает Thread/MSP.

Источник: Lesson 07, slides 3b, 5.

27. A — lesson 07

Ответ: Kernel task 3 runs; NVIC priority 0 is most urgent

В учебном kernel большее число означает более срочную задачу. В NVIC ноль — самый срочный уровень. Это две независимые шкалы.

Источник: Lesson 07, slides 9.

28. C — lesson 07

Ответ: Temporarily raise Low to High's priority while High waits

Priority inheritance даёт владельцу mutex приоритет ожидающей High. Тогда Medium не задерживает освобождение ресурса; после unlock приоритет возвращается.

Источник: Lesson 07, slides 13, 14.

29. C — lesson 07

Ответ: Return 0 immediately

ISR API никогда не блокирует: full → 0. Handler должен учесть потерю или выбрать другую политику; task API в такой ситуации может блокировать задачу.

Источник: Lesson 07, slides 15.

30. C — lesson 08

Ответ: BRR=2500; 1920 bytes/s

BRR=48 000 000/19 200=2500. У 8N1 на байт 10 бит: start+8 data+stop, поэтому 19 200/10=1920 bytes/s.

Источник: Lesson 08, slides 1b, 2.

31. D — lesson 08

Ответ: Repeated UART interrupts starve lower-priority work

TXE означает свободный TDR, а свободный он и в idle. Если нечего отправлять, ISR должен выключить TXEIE; включить обратно можно при появлении данных.

Источник: Lesson 08, slides 6.

32. B — lesson 08

Ответ: $LED,2*53

4C^45=09; ^44=4D; ^2C=61; ^32=53. Символы $ и * в checksum не входят.

Источник: Lesson 08, slides 10.

33. C — lesson 08

Ответ: One Up-arrow key encoded as a three-byte escape sequence

Клавиши могут быть многобайтными. Декодер сохраняет состояние между байтами; ESC [ A — Up. Одиночный ESC отличают ожиданием таймаута.

Источник: Lesson 08, slides 9b.

Как использовать результат

Каждая ошибка — повод вернуться к указанному слайду и объяснить механизм своими словами. Балл здесь — диагностика, не прогноз оценки. Повторяй вопросы после разбора без подсматривания.

Скачать Markdown