⚡️ Самоотчет о светодиодном фонаре: Как меня осветили 5 слоев кода
⚡️ Самоотчет о светодиодном фонаре: Как меня осветили 5 слоев кода

Рассказывайте трогательные истории и пишите код, который понимает людей.

Когда «Интегральная» разрабатывает «Сяобай» (оба случая, когда «Интегрированная» разрабатывает «Сяобай»,Еще один новичок в программировании)читайте нижеизОсновные концепции встроенной разработки BSP, HAL и PACиз При описании,Я часто чувствую растерянность.

Пакет поддержки Совета директоров (Board Support Crate, BSP, в Африке Rust Часто в среде называется Board Support Пакет поддержки плат, отсюда и аббревиатура) BSP Ответственность лежит на всем совете разработчиков (например, micro:bit) для унифицированной абстракции. Он должен обеспечить доступ к микроконтроллеру, а также к датчикам и светодиодам на плате. Абстрактный интерфейс для других устройств. Для заказных плат разработки обычно не существует готовых решений. BSP Доступный. В этом случае вам нужно использовать чип HAL и разрабатывайте драйверы датчиков самостоятельно или в crates.io Найдите дальше. Но удача,micro:bit Уже есть готовый microbit-v2. BSP,Итак, мы можем перейти непосредственно к HAL.

Уровень абстракции оборудования (Аппаратное обеспечение Abstraction Layer, HAL)HAL построенный на чипе PAC Кроме того, он предоставляет простые в использовании абстрактные интерфейсы для разработчиков, не знакомых с функциями чипов. ХАЛ Каждое периферийное устройство обычно выделяется в независимую структуру, что позволяет разработчикам легко выполнять такие операции, как передача данных. Если вы разрабатываете micro:bit v2 встроенная программа для разработки платы, мы будем использовать nRF52-hal

Далее мы обсудим Rust Встроенныйв миреизосновной программный компонент:embedded-hal。как следует из названия,оно учится у насиз Второй уровень абстракции HAL слои тесно связаны。embedded-halпредоставляет набор функций(traits),используется для описания всех HAL Общее поведение конкретных периферийных устройств в реализации. Например, он определяет базовую функцию управления выключателем питания, что позволяет нам управлять LED лампа или другое устройство。embedded-halчто позволяет нам разрабатывать универсальныеиздрайвер оборудования(Например, драйвер датчика температуры),Эти драйверы могут быть реализованы в любомembedded-halособенностьизработать на чипе。Этот вид общенияиспользоватьсексдапроходитьзависит только отembedded-halособенность Приходитьвыполнитьиз。Напишите вот такиз Водитель называетсяНезависимый от платформы。Достойно благодарностиизда,crates.ioначальствоиз Большинство водителей используют это Независимый от платформыдизайн。

Пакет периферийного доступа (Периферийное Access Crate, PAC)PAC Обеспечивает относительно безопасный интерфейс прямого доступа к периферийным устройствам чипа, позволяя разработчикам точно контролировать каждый бит регистра (хотя, конечно, возможна неправильная конфигурация). Обычно только тогда, когда абстракции более высокого уровня не могут удовлетворить потребности или при разработке кода более высокого уровня вам необходимо использовать его напрямую. ПАК. Если вы разрабатываете micro:bit Встроенная программа платы разработки v2, в основном мы будем использовать ее неявно. nRF52 из PAC

Сейчас,Сяову предложит вам проанализировать простойизпример:использоватьКод ржавчинызажечьсяmicro:bit макетная плата v2 со светодиодной подсветкой (например, Рисунок 1). В этом примере мы получим более глубокое понимание того, что означают понятия BSP, HAL и Embedded-halиPAC.

Рисунок 1 Оживите micro:bit с помощью кода Плата разработки Rust v2 со светодиодной подсветкой

Прежде чем мы углубимся в это, давайте взглянем на код.

Код ржавчины для включения светодиодной лампы

Эта статьяиз Полный код доступен по адресуgithubизwubin28 accountizlearn-rust-by-games кодовая базаизch01/lu1lНашел в каталоге。Если вы хотите запустить этот код,Вам нужно всего лишь купить плату разработки micro:bit v2 по цене двух-трех чашек кофе.,тогда следуйГлава 1 книги «Сяобай изучает Rust: от подсветки светодиодов до удовольствия от программирования» (минималистская версия)из Просто следуйте инструкциям。Ниже перечислены Эта статья Связанныйиз Два файла исходного кода。

Файл исходного кода Rust: src/main.rs

Файл исходного кода Rust src/main.rs показан в листинге 1:

Листинг кода 1: ch01/lu1l/src/main.rs

Язык кода:rust
копировать
// Отключить небезопасный код
#![deny(unsafe_code)]
// Заявить, что это автономная программа и не использует стандартные точки входа.
#![no_main]
// Не использовать стандартную библиотеку, которая встроена система Общие практики
#![no_std]

// Импортируйте необходимую из Встроенную библиотеку разработки.
// Укажите начальную точку программы
use cortex_m_rt::entry;
// Рабочий аппаратный интерфейс
use embedded_hal::digital::OutputPin;
// Совет по развитию управления
use microbit::board::Board;
// импортировать panic Обработчик ошибок во время выполнения
use panic_halt as _;

// точка входа в программу
#[entry]
fn main() -> ! {  // возвращаться ! означает этода Никто не делаетвозвращатьсяизфункция
    // получать microbit Совет управления
    let mut board = Board::take().unwrap();
    
    // Зажгите 4-ю строку и 4-й столбец светодиодной матрицы изLED,
    // То есть, установив для 4-го столбца низкий уровень, установите для 4-й строки высокий уровень.
    board.display_pins.col4.set_low().unwrap();
    board.display_pins.row4.set_high().unwrap();
    
    // Бесконечный цикл поддерживает работу программы
    loop {}
}

Общий файл управления пакетом проекта Rust: Cargo.toml

Общий файл управления пакетами проекта Rust Cargo.toml показан в листинге 2:

Листинг кода 2 ch01/lu1l/Cargo.toml

Язык кода:ini
копировать
[package]
# Название проекта
name = "lu1l"
# Номер версии проекта
version = "0.1.0"
# Требования к версии Rust (версия 2021 г.)
edition = "2021"

# Зависимые пакеты и их номера версий
[dependencies]
# Поддержка среды запуска Cortex-M
cortex-m-rt = "0.7.3"
# Обеспечивает механизм обработки паники, позволяющий остановить запуск программы в случае ее сбоя.
panic-halt = "0.2.0"
# BBC micro:bit пакет поддержки платы разработки v2
microbit-v2 = "0.15.0"
# Встроенный интерфейс уровня абстракции оборудования
embedded-hal = "1.0.0"

Cargo.toml — это основной файл конфигурации проекта Rust.,В нем фиксируется основная информация о проекте.,нравиться Название проекта、Номер версии и необходимые пакеты зависимостей.

🧠зачем нам это нужноCargo.tomlиз[dependencies]Эти пакеты зависимостей перечислены ниже.?нравиться Удалитьэточто с нами будет?Вы можете узнать, чему соответствуют эти пакеты зависимостейmain.rsсерединаиз Какие коды??

💡Давайте поговорим о том, почему нам нужно перечислить эти пакеты зависимостей в Cargo.toml.,а такжеэтоихнравиться Хэ Юmain.rsсерединаиз Коды работают вместе。первыйдаcortex-m-rtСумка,это как лаунчер,Отвечает за инициализацию процессора Cortex-M и обработку процесса запуска программы. в коде,наспроходитьuse cortex_m_rt::entryи#[entry]标注Приходитьделатьиспользоватьэто。нравиться Если бы не это Сумка,Программа не может быть запущена,Потому что точку входа невозможно найти.

затемдаpanic-haltСумка。этоизделатьиспользоватьдасуществовать Произошла серьезная программная ошибкачас,Поместите систему в сейфиз Остановленное состояние。кодсерединаизuse panic_halt as _Сразудасуществоватьделатьиспользоватьэто。существовать Встроенныйсредасередина,У нас должен быть такой механизм обработки ошибок,В противном случае компилятор напомнит нам об отсутствии необходимых гарантий безопасности.

microbit-v2Сумканоданасизглавный герой,этопоставлятьс советом по развитиювзаимодействиеиз Все функции。когданассуществоватькодсередина Писатьuse microbit::board::Boardчас,Он вызывает этот пакет, чтобы предоставить функцию из. без этого,нас Сразу无法Совет по развитию управленияначальствоизлюбой компонент。

наконецдаembedded-halСумка,Это как универсальный переводчик,Определяет стандартный интерфейс аппаратного обеспечения управления. в коде,насиспользоватьuse embedded_hal::digital::OutputPinуправлять штифтами。этот Сумкапозволятьнас Можетиспользоватьединыйизразные способы контроляиз Аппаратное оборудование。

Если какой-либо из этих пакетов зависимостей будет удален, наш код не будет работать как машина без частей. Это потому, что:

  • Каждый из этих пакетов выполняет незаменимые базовые функции.
  • Между ними существует тесная связь сотрудничества
  • В Интегрированной разработке эта особая среда,Вместе они обеспечивают необходимую поддержку системы.

Почему microbit-v2 недостаточно, чтобы зажечь светодиод?

🧠для什么仅делатьиспользоватьCargo.tomlсерединаизmicrobit-v2полагаться Сумканедостаточно,Все еще нужноembedded-halполагаться Сумка ПриходитьзажечьсяLEDлампа?этот两个полагаться Сумкаданравиться何Сотрудничать工делатьиз?

💡нас聊一下для什么仅делатьиспользоватьmicrobit-v2полагаться Сумканедостаточно,Все еще нужноembedded-halполагаться Сумка ПриходитьзажечьсяLEDлампа。этот问题涉及приезжатьполагаться Сумкамеждуиз Механизм сотрудничества。

первый,microbit-v2делатьдляодин Поддержка на уровне совета директоров Сумка,как домработница,Отвечает за управление всей командой разработчиков. Но экономке нужен набор стандартных и платформонезависимых правил для работы с различными устройствами.,Включает светодиодные фонари. Таким образом, стандартные правила могут сделать один и тот же метод работы применимым к различным аппаратным платформам (таким как платформа micro:bit v2, Arduino, STM32, платформа ESP32, обсуждаемая в этой статье).

В это время,embedded-halСразу像一本Проходитьиспользоватьиз Руководство по эксплуатации,этоопределениестандартный интерфейс(нравитьсяOutputPin черты). Он сообщает менеджеру: «Чтобы включить или выключить устройство, необходимо следовать этим правилам». Это позволяет различным менеджерам оборудования работать единообразно.

этоихиз Сотрудничатьдатакиз:microbit-v2Этот профессионализэкономка,проходитьembedded-halпоставлятьиз Стандартные методы управления оборудованием。когданасдумать Чтобы зажечь светодиодчас,экономка Сразу会делатьиспользоватьembedded-halопределениеизOutputPin черты характера, необходимые для выполнения работы.

Чтобы зажечь светодиод,В дополнение к экономке и стандартному руководству по эксплуатации.,Все еще нужно具体执行工делатьизкоманда:выполнитьembedded-halизпротивnRF52833платформаиз"руководитель проекта"nrf52833-hal,а такжеруководитель проекта所полагатьсяиз"Профессиональные механики"nrf52833-pac

Какова связь между BSP, Embedded-Hal, HAL и PAC?

Давайте сначала посмотрим на обязанности каждого члена этой команды:

  • main()функция
    • В качестве главного контроллера программы,Ответственный за выдачу инструкций
    • Определите время инициализации макетной платы и метод управления светодиодной матрицей.
    • непосредственно сmicrobit-v2взаимодействие
  • microbit-v2(Board Support Ящик, также известный как Доска Support Package,BSP)Поддержка на уровне совета директоров Сумка
    • Служил как плата разработки micro:bit v2 из эксклюзивного менеджера
    • Получите информацию о местоположении всего оборудования, такого как светодиодная матрица и кнопки.
    • проходитьembedded-halиnrf52833-halвыполнять определенные действия
  • embedded-hal(Hardware Abstraction Layer,HAL)Независимый от платформыуровень аппаратной абстракции
    • Определить типовые спецификации по эксплуатации оборудования
    • поставлятьOutputPinдождаться сообщенияиспользоватьинтерфейс
    • Унифицируйте методы управления различными устройствами
  • nrf52833-hal(Hardware Abstraction Layer,HAL)противnRF52833платформаизуровень аппаратной абстракции
    • В качестве чипа координатора nRF52833,Фокус на функциональной реализации,Отправка инструкций на уровень PAC
    • следовать ивыполнитьembedded-halиз Стандартные характеристики
    • Обеспечить безопасный рабочий интерфейс
  • nrf52833-pac(Peripheral Access Crate,PAC)противnRF52833платформаиз Периферийный доступ Сумка
    • В качестве основного исполнителя чипа nRF52833.,Отвечает за конкретные операции с оборудованием.
    • Устройство управления с отображением физических адресов
    • Обеспечивает самые основные функции управления оборудованием.

Отношения между этими компонентами,Это может быть представлено следующей диаграммой классов UML.,нравиться Рисунок 2:

Рисунок 2 Связь между BSP, Embedded-Hal и HALиPAC

Давайте посмотрим на это подробно UML Диаграмма классов проектирования архитектуры. Это типичная извстроенная многоуровневая архитектура, переходящая от уровня приложений к уровню доступа к оборудованию.

Начиная сверху:

  • Прикладной уровень (основной,Как хозяин дома) — расположение кода пользователя,этопроходитьнастраиватьиспользовать Board интерфейс для управления LED матрицу, не заботясь о деталях реализации.
  • Поддержка на уровне совета директоров Сумка(microbit-v2,Как домработница) как адаптационный слой,Будет ли совет по развитиюизконкретное оборудование(нравиться LED Матрица (выводы строк и столбцов) упакованы в простой в использовании интерфейс. это зависит от embedded-hal интерфейс для работы GPIO, эта конструкция позволяет пакету поддержки платы адаптироваться к любой реализации. embedded-hal Интерфейс аппаратной платформы.
  • уровень аппаратной абстракцииинтерфейс(embedded-hal,нравитьсяплатформане имеющий отношения Руководство по эксплуатации)определениестандартыиз Интерфейс работы оборудования(нравиться OutputPin)。этотдавыполнитьчерезплатформасовместимыйизключ,этозаявил set_high() и set_low() Подождите базового GPIO действовать.
  • уровень аппаратной абстракциивыполнить(nrf52833-hal,нравитьсяnRF52833 Фишка из менеджера проекта) для nRF52833 Чип реализован. embedded-hal интерфейс. Он отвечает за преобразование абстрактного GPIO Операция преобразуется в соответствующую операцию регистрации, и обеспечивается механизм безопасного доступа.
  • Уровень периферийного доступа(nrf52833-pac,Например, чип nRF52833 (профессиональный техник) обеспечивает функцию доступа к регистру самого низкого уровня.,Взаимодействуйте напрямую с оборудованием. Он инкапсулирует операции чтения и записи аппаратных регистров.,Но обычно не рекомендуется использовать непосредственно верхний слой.

Преимущества многоуровневой конструкции:

  • проходить embedded-hal Интерфейсы реализуют аппаратную абстракцию, поэтому код приложения можно легко переносить на другие платформы.
  • BSP Слой будет нижним слоем из GPIO Операции трансформируются для лучшего соответствия требованиям приложений. LED Интерфейс управления матрицей
  • Послойная инкапсуляция снижает риск непосредственного использования оборудования и обеспечивает более безопасную среду разработки.
  • Четкие обязанности на каждом уровне,Облегчает обслуживание кода и модульное тестирование.

Отношения зависимости на рисунке ясно показывают взаимодействие между каждым уровнем: сплошная стрелка представляет отношение «использования».,Полая пунктирная стрелка представляет отношения «реализации». Эта конструкция обеспечивает хорошую развязку,И может в полной мере использовать возможности оборудования.

🧠Что такое GPIO?

💡этотдавстроенная системасерединаиз базового аппаратного интерфейса, полное имя — General. Purpose Ввод/вывод (универсальный интерфейс ввода/вывода) в основном используется для реализации ввода и вывода цифрового сигнала.

Его основные особенности и функции заключаются в следующем:

  • Имеет отличную программируемость. Каждый вывод GPIO действует как гибкий переключатель.,Может быть установлен в режим ввода или вывода по мере необходимости。
    • в режиме ввода,Это как внимательный разведчик,Может читать различные внешние сигналы,Например, статус нажатия кнопки или изменение статуса датчика.
    • в режиме вывода,он становится командиром,Может контролировать поведение внешнего устройства,Будь то включение светодиодных фонарей или вождение двигателей.
  • в режиме вывода,GPIO может выводить два цифровых уровня,нравиться Тот же переключательиздва государства:
    • Высокий уровень эквивалентен состоянию «включено».,Обычно напряжение 3,3 В или 5 В.
    • Низкий уровень эквивалентен состоянию «выключено».,Обычно 0 В или земля

В нашей диаграмме изUML,Вы можете увидеть, как плата разработки micro:bit v2 умело использует GPIO. Каждый светодиод похож на маленькую лампочку.,Совместно используйте контакты строк и столбцов для управления. необходимо соответствующим образом отрегулировать уровни этих контактов GPIO.,можно добиться точного управления конкретными светодиодами,Пусть он загорится или погаснет по нашей команде.

🧠Как быстро проверить связь зависимости между BSP, Embedded-Hal и HALиPAC?

💡Зависимости на этой UML-диаграмме,Можетпроходитьбегатьcargo tree(Показать текущий проектиздерево зависимостей)команда для проверки:

Язык кода:bash
копировать
% cargo tree
lu1l v0.1.0 (/Users/<your-username>/learn-rust-by-games/ch01/lu1l)
    # основное использование cortex-m-rt
├── cortex-m-rt v0.7.5
(Другие стратегии)
    # основное использование встроенного-hal
├── embedded-hal v1.0.0
    # основной использует microbit-v2
├── microbit-v2 v0.15.1
│   └── microbit-common v0.15.1
            # microbit-v2 использует интерфейс Embedded-Hal
│       ├── embedded-hal v1.0.0
            # Интерфейс microbit-v2проходитьembedded-hal использует инъекцию изnrf52833-hal
│       ├── nrf52833-hal v0.18.0
│       │   ├── nrf-hal-common v0.18.0
(Другие стратегии)
                    # nrf52833-hal реализует встроенный интерфейс-hal
│       │   │   ├── embedded-hal v1.0.0
(Другие стратегии)
                # nrf52833-hal использует nrf52833-pac
│       │   └── nrf52833-pac v0.12.2 (*)
│       └── tiny-led-matrix v1.0.2
    # основное использование паники-остановки
└── panic-halt v0.2.0

Как BSP, HAL, Embedded-Hal и PAC работают вместе, чтобы зажечь светодиод?

Поймите приведенные выше концепции,Сейчас Можетчат Код ржавчины — это чудесное путешествие о том, как материал работает слой за слоем, чтобы зажечь светодиодные фонари. Это путешествие открытий сверху вниз.

Все начинается с основной функции верхнего уровня. здесь,нассталкиватьсяприезжатьпервая важная роль:Boardобъект。проходить Одна строка краткоизкод:

Язык кода:rust
копировать
let mut board = Board::take().unwrap();

Мы создали этот базовый интерфейс для взаимодействия с оборудованием, который является дверью в мир оборудования.

затем,нас Приходитьприезжатьmicrobit-v2Этот слой。этот里дадляmicro:bit v2Тщательно созданныйизконтрольсередина Сердце,Сумка СодержитсяBoardОсновная консоль、DisplayPinsПоказать панель управления,и аккуратно оформленоизrow0приезжатьrow4иcol0приезжатьcol4контактный переключатель。существоватьэтот里,Мы можем сделать следующее:

Язык кода:rust
копировать
board.display_pins.col4.set_low().unwrap();
board.display_pins.row4.set_high().unwrap();

дальше вниз,нас Приходитьприезжатьembedded-halинтерфейсный уровень。этотдаодинключизслой абстракции,этоопределениестандартыиз Интерфейс работы оборудования。проходитьопределениеOutputPin trait,этопредусматривает, что все выходные контакты должнывыполнитьset_high()иset_low()Подождите базовый метод. Этот унифицированный дизайн интерфейса обеспечивает переносимость кода.

nrf52833-hal层но负责выполнитьэтот些интерфейс。этопроходитьgpio(Проходитьиспользовать输入输出контроль)、Pin(булавочная абстракция)иLevel(Контроль уровня)и другие компоненты,Воляembedded-halопределениеиз Преобразование абстрактного интерфейса в конкретныйизаппаратное обеспечениедействовать.когданаснастраиватьиспользоватьset_high()илиset_low()час,Именно этот уровень обрабатывает конкретные детали реализации.

наконец Приходитьприезжатьсамый низкий уровеньизnrf52833-pac。этот里непосредственно саппаратное обеспечениедиалог,Оснащен оператором регистра GPIO, физическим контроллером контактов и инструментами доступа к регистрам низкого уровня.

Весь процесс включения светодиода похож на точную эстафету: начиная с создания экземпляра Board,пройтиdisplay_pinsточное позиционирование,проходитьOutputPinИнтерфейс выдает команды,Преобразовано из hal-слоя в конкретные операции.,Наконец, он записывается в аппаратный регистр через уровень pac. вот и все,Загорается небольшой индикатор в месте расположения светодиодной матрицы (4,4). Эта послойная конструкция похожа на прецизионную машину.,Каждая часть играет уникальную и важную роль.,Давайте вместе выполним эту, казалось бы, простую задачу по зажиганию лампочек.


Если вам понравилась эта статья,Не забудьте оценить статьюНажмите «Нравится»,Это действительно воодушевляет меня продолжать писать~😃

boy illustration
Неразрушающее увеличение изображений одним щелчком мыши, чтобы сделать их более четкими артефактами искусственного интеллекта, включая руководства по установке и использованию.
boy illustration
Копикодер: этот инструмент отлично работает с Cursor, Bolt и V0! Предоставьте более качественные подсказки для разработки интерфейса (создание навигационного веб-сайта с использованием искусственного интеллекта).
boy illustration
Новый бесплатный RooCline превосходит Cline v3.1? ! Быстрее, умнее и лучше вилка Cline! (Независимое программирование AI, порог 0)
boy illustration
Разработав более 10 проектов с помощью Cursor, я собрал 10 примеров и 60 подсказок.
boy illustration
Я потратил 72 часа на изучение курсорных агентов, и вот неоспоримые факты, которыми я должен поделиться!
boy illustration
Идеальная интеграция Cursor и DeepSeek API
boy illustration
DeepSeek V3 снижает затраты на обучение больших моделей
boy illustration
Артефакт, увеличивающий количество очков: на основе улучшения характеристик препятствия малым целям Yolov8 (SEAM, MultiSEAM).
boy illustration
DeepSeek V3 раскручивался уже три дня. Сегодня я попробовал самопровозглашенную модель «ChatGPT».
boy illustration
Open Devin — инженер-программист искусственного интеллекта с открытым исходным кодом, который меньше программирует и больше создает.
boy illustration
Эксклюзивное оригинальное улучшение YOLOv8: собственная разработка SPPF | SPPF сочетается с воспринимаемой большой сверткой ядра UniRepLK, а свертка с большим ядром + без расширения улучшает восприимчивое поле
boy illustration
Популярное и подробное объяснение DeepSeek-V3: от его появления до преимуществ и сравнения с GPT-4o.
boy illustration
9 основных словесных инструкций по доработке академических работ с помощью ChatGPT, эффективных и практичных, которые стоит собрать
boy illustration
Вызовите deepseek в vscode для реализации программирования с помощью искусственного интеллекта.
boy illustration
Познакомьтесь с принципами сверточных нейронных сетей (CNN) в одной статье (суперподробно)
boy illustration
50,3 тыс. звезд! Immich: автономное решение для резервного копирования фотографий и видео, которое экономит деньги и избавляет от беспокойства.
boy illustration
Cloud Native|Практика: установка Dashbaord для K8s, графика неплохая
boy illustration
Краткий обзор статьи — использование синтетических данных при обучении больших моделей и оптимизации производительности
boy illustration
MiniPerplx: новая поисковая система искусственного интеллекта с открытым исходным кодом, спонсируемая xAI и Vercel.
boy illustration
Конструкция сервиса Synology Drive сочетает проникновение в интрасеть и синхронизацию папок заметок Obsidian в облаке.
boy illustration
Центр конфигурации————Накос
boy illustration
Начинаем с нуля при разработке в облаке Copilot: начать разработку с минимальным использованием кода стало проще
boy illustration
[Серия Docker] Docker создает мультиплатформенные образы: практика архитектуры Arm64
boy illustration
Обновление новых возможностей coze | Я использовал coze для создания апплета помощника по исправлению домашних заданий по математике
boy illustration
Советы по развертыванию Nginx: практическое создание статических веб-сайтов на облачных серверах
boy illustration
Feiniu fnos использует Docker для развертывания личного блокнота Notepad
boy illustration
Сверточная нейронная сеть VGG реализует классификацию изображений Cifar10 — практический опыт Pytorch
boy illustration
Начало работы с EdgeonePages — новым недорогим решением для хостинга веб-сайтов
boy illustration
[Зона легкого облачного игрового сервера] Управление игровыми архивами
boy illustration
Развертывание SpringCloud-проекта на базе Docker и Docker-Compose