Skip to content

Commit

Permalink
Lab2 and new books added
Browse files Browse the repository at this point in the history
  • Loading branch information
VladVanyuk committed Mar 17, 2024
1 parent b5edd9b commit 42aeea0
Show file tree
Hide file tree
Showing 39 changed files with 3,691 additions and 46 deletions.
3 changes: 2 additions & 1 deletion .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -29,5 +29,6 @@
"liveshare.languages.allowGuestCommandControl": true,
"liveshare.launcherClient": "visualStudioCode",
"liveshare.notebooks.allowGuestExecuteCells": true,
"liveshare.publishWorkspaceInfo": true
"liveshare.publishWorkspaceInfo": true,
"idf.adapterTargetName": "esp32"
}
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,4 @@ https://docs.arduino.cc/hardware/mega-2560/
https://arduino.github.io/arduino-cli/0.35/

Simulation example:
https://wokwi.com/projects/391005481372432385
https://wokwi.com/projects/391005481372432385
Binary file not shown.
Binary file not shown.
Binary file not shown.
170 changes: 170 additions & 0 deletions extra/docs/MANUALS_BOOKS/embedded_questions.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,170 @@
C
1.Що таке вказівник?
2.Скільки байтів пам’яті займає вказівник?
3.Чим відрізняється stack від heap?
4.Чим відрізняється malloc від calloc?
5.Як звільнити пам’ять в С?
6.Які проблеми можуть виникнути, якщо не звільнити пам’ять?
7.Яке призначення ключового слова static?
8.Опишіть використання модифікатора static в мовах С і С++.
9.Яке призначення ключового слова const?
10.Які проблеми можуть виникнути, якщо функція повертає вказівник на локальну змінну?
11.Опишіть використання модифікатора volatile.
12.Які існують бітові операції?
13.Як працювати з void?

Embedded
14.В чому полягає різниця між мікропроцесором і мікроконтролером?
15.Як відбувається завантаження програми в мікроконтролері?
16.З якими типами мікроконтролерів вам доводилося працювати?
17.Що таке GPIO?
18.Що таке UART?
19.Як відбувається комунікація через UART?
20.Як працює комунікація RS232?
21.Що таке SPI?
22.Що таке I2C?
23.Що таке PWM?
24.Яка різниця між ОС загального призначення та ОС реального часу?
25.В чому різниця між polling і interrupt?
26.Які типи постійної пам’яті використовуються в Embedded?
27.Що таке watchdog?
28.Які типи сегментів пам’яті ви знаєте?
29.Що таке переривання?


С
1.Для чого потрібне вирівнювання структур?
2.Що таке little endian та big endian?
3.Які проблеми можуть виникнути, якщо привести масив байтів до структури?
4.Як репрезентується Union Type в пам’яті?
5.Як працює виділення пам’яті?
6.Як malloc виділяє пам’ять?
7.Як реалізувати ООП, використовуючи C?
8.Які основні принципи ООП ви знаєте?
9.В чому різниця між поліморфізмом та успадкуванням?
10.Яка різниця між статичною та динамічною бібліотекою?
11.Як працює Cmake?
12.Для чого використовують ключові слова static, const, volatile, restrict? Чи можна їх поєднувати? У яких випадках?
13.Порівняйте вказівники та масиви.
14.Як визначити порядок байтів в системі?
15.Що таке бітові поля? Для чого вони використовуються?
16.Як задається розмір бітового поля при описі його в структурі?
17.Для чого використовується вказівник на вказівник?
18.Порівняйте struct та union. Який розмір struct та union?
19.Етапи компіляції. Як зберегти інформацію кожного етапу?
20.Поясніть, як працює утиліта make та makefile.
21.У чому відмінності стандартів C99 та С11?
22.Які існують класи пам’яті в С?
23.Що таке linker?
24.Що таке bootloader?
25.Що таке таймер?
26.Які функції watchdog ви знаєте?
27.Що таке область видимості?
28.Як працює зв’язування?
29.Для чого потрібне ключове слово typedef?
30.Як відбувається виклик функції?
31.Як передаються значення параметрів при виклику функції?
32.Що таке EABI (Embedded Application Binary Interface)?
33.Який розмір цілочисельних типів (знакових і беззнакових) в архітектурі AVR8?
34.В чому суть використання віртуальних деструкторів?

Embedded
35.Для чого потрібна віртуальна пам’ять?
36.Що таке MMU?
37.Як комунікують пристрої, підключені по I2C?
38.Як працюють переривання?
39.Що таке DMA?
40.Яка різниця між UART vs SPI?
41.В чому перевага інтерфейсів з сигналом синхронізації?
42.Як налагоджувати код, використовуючи мікроконтролер?
43.Який розмір цілочисельних типів (знакових і беззнакових) в архітектурі AVR8?

//****************************************НЕ У МЕНЕ, АЛЕ ЗНАТИ ТРЕБА (PS: ВладОС)****************************************
Linux
44.Як комунікує User Space and Kernel Space?
45.В чому різниця між блокуючими і неблокуючими операціями?
46.Які типи IPC ви знаєте?
47.Які способи синхронізації потоків ви знаєте?
48.Що таке сокет?
49.Що таке Mutex?
50.Що таке Semaphore?
51.Що таке Copy on Write?

Операційні системи
52.Що таке операційна система реального часу (ОСРЧ)?
53.З яких частин складається ОС? Поясніть на прикладі Linux.
54.Що таке interrupt latency?
55.Які особливості компіляції статичних та динамічних бібліотек?
56.Що таке файл формату ELF?
57.Що таке міжпроцесова взаємодія (IPC)?
58.Що таке bash?
59.Наведіть приклади абстрактних типів даних.
60.Що таке процес та потік (thread)?
61.Що таке одиниця трансляції?
62.Що таке конвеєр команд? Наведіть приклади.
63.У чому різниця між архітектурою фон Неймана та архітектурою Гарварда?
64.Що таке кроскомпіляція?

Protocols
65.Як відбувається перше підключення до інтернету?
66.Опишіть роботу стеку протоколів TCP/IP.
67.Опишіть різницю між MQTT, RMQ, WebSocket. В якому випадку який протокол краще обрати для передачі даних з IoT-пристрою у хмару?
68.Як працює Bluetooth? Поясніть загальні концепції.
69.Що таке TLS?
70.Що таке SSH?
71.Що таке TCP handshake?
72.Яка різниця між TCP та UDP?

//****************************************ЗНОВУ В МЕНЕ, але не так критично, бо в МК ЧАСТИНА 2 (PS: ВладОС)****************************************
C
1.Як реалізована команда «delay»?
2.Що таке ISR?
3.Як відбувається передача параметрів в ISR?
4.Чи можливе повернення результату з ISR?
5.Як працюють таймери?
6.Що таке регістри? Як вони працюють?

CI
7.Чи доводилося вам працювати з Docker?
8.Як налаштувати CI для компіляції коду під різні платформи?
9.Розкажіть про побудову білд-системи.

Linux
10.Які є типи пристроїв у ядрі?
11.Як написати драйвер для ядра Linux?
12.Що таке вектор переривання?
13.Які фреймворки для збірки ядра ви знаєте?
14.Розкажіть про алгоритми планування задач в операційних системах.

Embedded
15.Як забезпечити Continuous Delivery для MCU?
16.Як працює RTOS?
17.Що таке задача в RTOS?
18.Які засоби синхронізації є у RTOS?
19.Як працює комунікація через RS485?
20.Boot sequence на мікроконтролерах.
21.Назвіть особливості периферійних інтерфейсів UART, USART, I2C, SPI.

//****************************************ЗНОВУ НЕ В МЕНЕ(PS: ВладОС)****************************************
Мережі
22.Як працює BLE?
23.Що таке OSI model?
24.В чому різниця між Bluetooth Classic and BLE?
25.Як працює Wi-Fi?
26.Які способи існують для оновлення прошивки?
27.Що таке OTA?
28.Розкажіть про протокол ARP.
29.Як працює протокол TCP?
30.Що таке маска мережі?
31.Що таке шлюз за замовчуванням?
32.Що таке комутатор L2? Які його функції?
33.Що таке маршрутизатор L3? Назвіть його функції.
34.Розкажіть про інкапсуляцію пакетів при проходженні по рівнях моделі OSI.
35.Яке призначення протоколу ICMP?
36.Що таке Ethernet Frame?
37.Що таке фаєрвол? Як налаштувати його на Linux?
38.Що таке DHCP та DHCP relay?
39.Які види та алгоритми маршрутизації ви знаєте?
40.Що таке NAT?
41.Що таке MQTT, і як він використовується?
42.Розкажіть про автомобільні шини даних CAN, LIN, MOST, FlexRay.
File renamed without changes.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
File renamed without changes.
File renamed without changes.
52 changes: 52 additions & 0 deletions extra/other/esp_extra/ESP_API.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Some ESP-specific APIs related to deep sleep, RTC and flash memories are available in the ESP object.

ESP.deepSleep(microseconds, mode) will put the chip into deep sleep. mode is one of WAKE_RF_DEFAULT, WAKE_RFCAL, WAKE_NO_RFCAL, WAKE_RF_DISABLED. (GPIO16 needs to be tied to RST to wake from deepSleep.) The chip can sleep for at most ESP.deepSleepMax() microseconds. If you implement deep sleep with WAKE_RF_DISABLED and require WiFi functionality on wake up, you will need to implement an additional WAKE_RF_DEFAULT before WiFi functionality is available.

ESP.deepSleepInstant(microseconds, mode) works similarly to ESP.deepSleep but sleeps instantly without waiting for WiFi to shutdown.

ESP.rtcUserMemoryWrite(offset, &data, sizeof(data)) and ESP.rtcUserMemoryRead(offset, &data, sizeof(data)) allow data to be stored in and retrieved from the RTC user memory of the chip respectively. offset is measured in blocks of 4 bytes and can range from 0 to 127 blocks (total size of RTC memory is 512 bytes). data should be 4-byte aligned. The stored data can be retained between deep sleep cycles, but might be lost after power cycling the chip. Data stored in the first 32 blocks will be lost after performing an OTA update, because they are used by the Core internals.

ESP.restart() restarts the CPU.

ESP.getResetReason() returns a String containing the last reset reason in human readable format.

ESP.getFreeHeap() returns the free heap size.

ESP.getHeapFragmentation() returns the fragmentation metric (0% is clean, more than ~50% is not harmless)

ESP.getMaxFreeBlockSize() returns the largest contiguous free RAM block in the heap, useful for checking heap fragmentation. NOTE: Maximum malloc() -able block will be smaller due to memory manager overheads.

ESP.getChipId() returns the ESP8266 chip ID as a 32-bit integer.

ESP.getCoreVersion() returns a String containing the core version.

ESP.getSdkVersion() returns the SDK version as a char.

ESP.getCpuFreqMHz() returns the CPU frequency in MHz as an unsigned 8-bit integer.

ESP.getSketchSize() returns the size of the current sketch as an unsigned 32-bit integer.

ESP.getFreeSketchSpace() returns the free sketch space as an unsigned 32-bit integer.

ESP.getSketchMD5() returns a lowercase String containing the MD5 of the current sketch.

ESP.getFlashChipId() returns the flash chip ID as a 32-bit integer.

ESP.getFlashChipSize() returns the flash chip size, in bytes, as seen by the SDK (may be less than actual size).

ESP.getFlashChipRealSize() returns the real chip size, in bytes, based on the flash chip ID.

ESP.getFlashChipSpeed(void) returns the flash chip frequency, in Hz.

ESP.getCycleCount() returns the cpu instruction cycle count since start as an unsigned 32-bit. This is useful for accurate timing of very short actions like bit banging.

ESP.random() should be used to generate true random numbers on the ESP. Returns an unsigned 32-bit integer with the random number. An alternate version is also available that fills an array of arbitrary length. Note that it seems as though the WiFi needs to be enabled to generate entropy for the random numbers, otherwise pseudo-random numbers are used.

ESP.checkFlashCRC() calculates the CRC of the program memory (not including any filesystems) and compares it to the one embedded in the image. If this call returns false then the flash has been corrupted. At that point, you may want to consider trying to send a MQTT message, to start a re-download of the application, blink a LED in an SOS pattern, etc. However, since the flash is known corrupted at this point there is no guarantee the app will be able to perform any of these operations, so in safety critical deployments an immediate shutdown to a fail-safe mode may be indicated.

ESP.getVcc() may be used to measure supply voltage. ESP needs to reconfigure the ADC at startup in order for this feature to be available. Add the following line to the top of your sketch to use getVcc:

ADC_MODE(ADC_VCC);
TOUT pin has to be disconnected in this mode.

Note that by default ADC is configured to read from TOUT pin using analogRead(A0), and ESP.getVCC() is not available.
8 changes: 8 additions & 0 deletions extra/other/esp_extra/NOTE_ANALOG.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
NOTE: Calling analogRead() too frequently causes WiFi to stop working. When WiFi is under operation, analogRead() result may be cached for at least 5ms between effective calls.

ESP8266 has a single ADC channel available to users. It may be used either to read voltage at ADC pin, or to read module supply voltage (VCC).

To read external voltage applied to ADC pin, use analogRead(A0). Input voltage range of bare ESP8266 is 0 — 1.0V, however some boards may implement voltage dividers. To be on the safe side, <1.0V can be tested. If e.g. 0.5V delivers values around ~512, then maximum voltage is very likely to be 1.0V and 3.3V may harm the ESP8266. However values around ~150 indicates that the maximum voltage is likely to be 3.3V.

To read VCC voltage, use ESP.getVcc() and ADC pin must be kept unconnected. Additionally, the following line has to be added to the sketch:
ADC_MODE(ADC_VCC);
21 changes: 21 additions & 0 deletions extra/other/esp_extra/esp_directory structure.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Arduino
|
--- hardware
|
--- esp8266com
|
--- esp8266
|
--- bootloaders
--- cores
--- doc
--- libraries
--- package
--- tests
--- tools
--- variants
--- platform.txt
--- programmers.txt
--- README.md
--- boards.txt
--- LICENSE
Loading

0 comments on commit 42aeea0

Please sign in to comment.