"Класс 101" о том какая бывает память, как она работает на разных архитектурах и как не тратить её впустую.
На примерах рассмотрим чем отличается работа с памятью в Гарвардской и Принстонской (фон Неймана) архитектурах, какие бывают секции, как они используются, что такое стек и куча, как оценить минимальный объём свободной оперативной памяти и почему возникает фрагментация памяти.
Примеры из ролика - https://drive.google.com/drive/folders/118RrPqYAyvBZbVwHCrt22N60LjBJyzot
Ролик на Boosty - https://boosty.to/muravyev/posts/0705f4e4-5047-496c-9938-b57dc605cabd?share=post_link
*********
СОДЕРЖАНИЕ:
00:00 - Вступление
00:42 - Память в МК
03:26 - Секции text, data и bss
10:06 - Стек
13:32 - Обзор вводной части
15:31 - Гарвардская и Принстонская архитектуры
19:15 - Секция progmem в Гарвардской архитектуре
20:22 - Особенности AVR с ПЗУ более 64КБ
25:17 - Современные МК на Гарвардской архитектуре
26:30 - Лирическое отступление
26:52 - Секция noinit
28:11 - Инициализация EEPROM
29:58 - AVRDUDESS
30:40 - optiboot и flash в качестве EEPROM
32:26 - Куча и динамическое выделение памяти
34:14 - Фрагментация памяти
42:10 - Окрашивание памяти
44:45 - Целочисленные вычисления
49:27 - Мощный финал
ССЫЛКИ:
Секции памяти:
text, data, bss, and dec - https://mirzafahad.github.io/2021-05-08-text-data-bss/
Code segment - https://en.wikipedia.org/wiki/Code_segment
Data segment - https://en.wikipedia.org/wiki/Data_segment
Stack - https://ru.wikipedia.org/wiki/%D0%A1%D1%82%D0%B5%D0%BA
Memory management - https://en.wikipedia.org/wiki/Memory_management
Manual memory management - https://en.wikipedia.org/wiki/Manual_memory_management
Cекции памяти - https://microsin.net/programming/avr/avr-gcc-memory-sections.html
Модель памяти в языке Си - https://ru.wikipedia.org/wiki/%D0%9C%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8_%D0%B2_%D1%8F%D0%B7%D1%8B%D0%BA%D0%B5_%D0%A1%D0%B8
Области памяти и использование malloc() - https://microsin.net/programming/avr/avr-gcc-memories-and-malloc.html
malloc.c - http://svn.savannah.gnu.org/viewvc/avr-libc/tags/avr-libc-2_1_0-release/libc/stdlib/malloc.c?revision=2557&view=markup
Memory fragmentation - https://en.wikipedia.org/wiki/Fragmentation_%28computing%29
Архитектуры:
Архитектура фон Неймана - https://ru.wikipedia.org/wiki/%D0%90%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0_%D1%84%D0%BE%D0%BD_%D0%9D%D0%B5%D0%B9%D0%BC%D0%B0%D0%BD%D0%B0
Harvard architecture - https://en.wikipedia.org/wiki/Harvard_architecture
Гарвардская архитектура - https://ru.wikipedia.org/wiki/%D0%93%D0%B0%D1%80%D0%B2%D0%B0%D1%80%D0%B4%D1%81%D0%BA%D0%B0%D1%8F_%D0%B0%D1%80%D1%85%D0%B8%D1%82%D0%B5%D0%BA%D1%82%D1%83%D1%80%D0%B0
ARM Cortex-M - https://en.wikipedia.org/wiki/ARM_Cortex-M
Распределение памяти в ESP32 - https://kotyara12.ru/iot/esp32_memory/
AVR 64K problems - https://github.com/arduino/ArduinoCore-avr/issues/174
ATtiny microcontroller comparison chart - https://en.wikipedia.org/wiki/ATtiny_microcontroller_comparison_chart
Программирование:
Options That Control Optimization - https://gcc.gnu.org/onlinedocs/gcc-4.4.7/gcc/Optimize-Options.html
STM32 Cortex-M4 programming manual - https://st.com/resource/en/programming_manual/pm0214-stm32-cortexm4-mcus-and-mpus-programming-manual-stmicroelectronics.pdf
ESP system API - https://docs.espressif.com/projects/esp8266-rtos-sdk/en/release-v3.3/api-reference/system/system.html
Guide to PROGMEM on ESP8266 and Arduino IDE - https://arduino-esp8266.readthedocs.io/en/latest/PROGMEM.html
avr-gcc - https://gcc.gnu.org/wiki/avr-gcc
AVR instruction set - https://en.wikipedia.org/wiki/Atmel_AVR_instruction_set
AVR instruction set manual - https://ww1.microchip.com/downloads/en/DeviceDoc/AVR-Instruction-Set-Manual-DS40002198A.pdf
Arduino Memory Guide - https://docs.arduino.cc/learn/programming/memory-guide/
PROGMEM - https://docs.arduino.cc/language-reference/en/variables/utilities/PROGMEM/
Работа с PROGMEM памятью - https://alexgyver.ru/lessons/progmem/
Профилирование памяти - https://habr.com/ru/articles/443030/
C Functions for Reading and Writing to Flash Memory (AVR) - https://ww1.microchip.com/downloads/en/AppNotes/Atmel-2575-C-Functions-for-Reading-and-Writing-to-Flash-Memory_ApplicationNote_AVR106.pdf
Optiboot - https://github.com/Optiboot/optiboot
ATtiny10Core - https://github.com/technoblogy/attiny10core
megaTinyCore - https://github.com/SpenceKonde/megaTinyCore
Дополнительно:
Avrdudess - https://github.com/ZakKemble/AVRDUDESS (https://blog.zakkemble.net/avrdudess-a-gui-for-avrdude/)
Hexspeak - https://en.wikipedia.org/wiki/Hexspeak
Графика:
https://freepik.com/free-vector/set-cute-cartoon-human-brain-character-lifting-dumbbell-looking-air-balloon-graduating_28189658.htmhttps://freepik.com/free-vector/illustration-different-expressions_1148476.htm
https://freepik.com/free-vector/thunderbolt-icon-illustration_33168699.htm
#программирование #ардуино #dmitrymuravyev