diff --git a/LFD112x-RU/Chapters/Chapter1.adoc b/LFD112x-RU/Chapters/Chapter1.adoc index e328b63..f799e34 100644 --- a/LFD112x-RU/Chapters/Chapter1.adoc +++ b/LFD112x-RU/Chapters/Chapter1.adoc @@ -8,21 +8,21 @@ ifdef::env-github[] :warning-caption: :warning: endif::[] -== Введение в RTOS и встраиваемые системы +== Введение в ОСРВ и встраиваемые системы Эту главу мы начнем с объяснения того, что такое система. Мы рассмотрим, как классифицируются системы и как они развивались на протяжении многих лет автоматизации. Затем обсудим, как электроника стала их частью и, как следствие, возникновение встраиваемых систем. После чего мы представим компоненты встраиваемой системы и объясним, как каждый из них вносит свой вклад в систему. Далее будут обсуждены типичные уровни встраиваемого программного обеспечения (ПО). -В завершение главы мы рассмотрим, что такое операционная система реального времени (RTOS) и как она может быть полезна в системе. +В завершение главы мы рассмотрим, что такое операционная система реального времени (ОСРВ) и как она может быть полезна в системе. К концу этой главы вы будете способны: * понимать концепции инженерных и встраиваемых систем; * определять аппаратные и программные компоненты встраиваемых систем; * описывать уровни встраиваемого программного обеспечения; -* рассуждать о RTOS. +* рассуждать о ОСРВ. === Что такое система? @@ -118,7 +118,7 @@ https://en.wikipedia.org/wiki/Factory_automation_infrastructure[автомати Программное обеспечение служит прослойкой между пользователем и машиной, которой он управляет. Ниже перечислены программные компоненты, обычно встречающиеся во встраиваемых системах. -* _Программное обеспечение драйвера_ (или пакеты поддержки платы, BSP (board support packages)). +* _Драйверы_ (или пакеты поддержки платы, BSP (board support packages)). Это самый нижний уровень программного компонента встраиваемой системы, который напрямую взаимодействует с аппаратным компонентом. Этот тип программного обеспечения также называют низкоуровневым драйвером, поскольку он отвечает за управление аппаратным обеспечением. Он взаимодействует с аппаратурой на уровне регистров и обычно написан на языке программирования C или на языке ассемблера. @@ -159,7 +159,7 @@ https://en.wikipedia.org/wiki/Factory_automation_infrastructure[автомати Такие системы являются либо событийно-ориентированными (event-driven), либо с разделением времени (time-sharing). Первые переключают задачи на основе их приоритетов (это также называется вытесняющим планированием), вторые же переключают задачи на основе тактовых прерываний (clock interrupts). -Большинство RTOS используют алгоритм вытесняющего планирования (preemptive scheduling). +Большинство ОСРВ используют алгоритм вытесняющего планирования (preemptive scheduling). Если система реального времени не отвечает на запрос пользователя в течение ожидаемого времени, это несоответствие может привести к опасным последствиям. @@ -175,25 +175,25 @@ https://en.wikipedia.org/wiki/Factory_automation_infrastructure[автомати === Операционные системы реального времени -Операционная система реального времени (RTOS) -- это операционная система (ОС), предназначенная для обслуживания приложений, +Операционная система реального времени (ОСРВ, RTOS, real-time operating system) -- это операционная система (ОС), предназначенная для обслуживания приложений, которые обрабатывают данные в реальном времени, то есть по мере их поступления, обычно без задержек. Требования к времени обработки (включая любые задержки ОС) измеряются десятыми долями секунд или еще более короткими промежутками времени. -Ключевой характеристикой RTOS является постоянство количества времени, которое требуется для принятия и завершения задачи приложения. -Изменчивость времени завершения задачи (также известная как джиттер) в RTOS детерминирована. +Ключевой характеристикой ОСРВ является постоянство количества времени, которое требуется для принятия и завершения задачи приложения. +Изменчивость времени завершения задачи (также известная как джиттер) в ОСРВ детерминирована. Система жёсткого реального времени имеет меньший джиттер (jitter), чем система мягкого реального времени. -Если в «мягкой» RTOS задержка ответа допустима, то в «жёсткой» -- нет. -RTOS, которая обычно или в целом может уложиться в срок, является мягкой RTOS, но если она может уложиться в срок детерминированно, то это жёсткая RTOS. -Основной целью проектирования RTOS является не высокая пропускная способность, а скорее гарантированная задержка той или иной категории производительности. -Другими словами, ожидается, что RTOS будут иметь минимальную задержку прерывания и минимальную задержку переключения потоков; -RTOS ценится больше за то, насколько быстро или предсказуемо она может реагировать, чем за объем работы, который она может выполнить за определенный период времени. +Если в «мягкой» ОСРВ задержка ответа допустима, то в «жёсткой» -- нет. +ОСРВ, которая обычно или в целом может уложиться в срок, является мягкой ОСРВ, но если она может уложиться в срок детерминированно, то это жёсткая ОСРВ. +Основной целью проектирования ОСРВ является не высокая пропускная способность, а скорее гарантированная задержка той или иной категории производительности. +Другими словами, ожидается, что ОСРВ будут иметь минимальную задержку прерывания и минимальную задержку переключения потоков; +ОСРВ ценится больше за то, насколько быстро или предсказуемо она может реагировать, чем за объем работы, который она может выполнить за определенный период времени. -RTOS включает в себя усовершенствованный алгоритм планирования задач в системе. +ОСРВ включает в себя усовершенствованный алгоритм планирования задач в системе. Гибкость планировщика позволяет более широко организовать работу компьютерной системы с различными приоритетами приложений в системе, но ОС реального времени чаще всего предназначена для определенного набора приложений. -Наиболее распространенными конструкциями RTOS являются: +Наиболее распространенными конструкциями ОСРВ являются: * Управляемые событиями (event-driven). + @@ -205,18 +205,18 @@ RTOS включает в себя усовершенствованный алг примером алгоритма переключения с разделением времени является https://ru.wikipedia.org/wiki/Round-robin_(%D0%B0%D0%BB%D0%B3%D0%BE%D1%80%D0%B8%D1%82%D0%BC)[round-robin]. Проекты с разделением времени переключают задачи чаще, чем это строго необходимо, но обеспечивают более плавную многозадачность, -создавая иллюзию, что процесс или задача используется машиной единолично. +создавая иллюзию, что процесс или задача пользуется машиной единолично. -В RTOS задача может находиться в одном из трех различных состояний. +В ОСРВ задача может находиться в одном из трех различных состояний. [arabic] . _Выполняется_ (running, выполняется на процессоре). . _Готова_ (ready, готовность к выполнению). . _Заблокирована_ (blocked, ожидание события, например, ввода/вывода). -Для задач могут быть определены и другие состояния, но три вышеперечисленных являются стандартными и обычно достаточными для большинства RTOS. +Для задач могут быть определены и другие состояния, но три вышеперечисленных являются стандартными и обычно достаточными для большинства ОСРВ. -Существуют также различные типы задач, которые могут быть определены и использованы: +Существуют также различные типы задач, которые могут быть определены и использованы. * _Периодические задачи_. + @@ -231,20 +231,20 @@ RTOS включает в себя усовершенствованный алг Это задачи, которые выполняются безостановочно. Обычно это задачи с очень низким приоритетом, которые позволяют выполнять другие задачи. -В планировщике RTOS могут использоваться различные алгоритмы планирования. +В планировщике ОСРВ могут использоваться различные алгоритмы планирования. Ниже перечислены некоторые из наиболее часто используемых алгоритмов: -* кооперативное планирование; -* вытесняющее планирование; -* планирование с монотонной скоростью (rate monotonic); -* round-robin; +* кооперативное планирование (cooperative scheduling); +* вытесняющее планирование (preemptive scheduling); +* частотно-монотонное планирование (RMS, rate monotonic scheduling); +* планирование по кругу (RR, round-robin scheduling); * вытесняющее планирование с фиксированным приоритетом (fixed-priority preemptive scheduling); -* по ближайшему сроку завершения (earlier deadline first); -* статическое планирование (static time). +* по ближайшему сроку завершения (EDF, earlier deadline first scheduling); +* статическое планирование (static time scheduling). ==== Взаимодействие между задачами и совместное использование ресурсов -Распределение ресурсов и межзадачное взаимодействие поддерживаются в RTOS с помощью одной или нескольких из следующих техник: +Распределение ресурсов и межзадачное взаимодействие поддерживаются в ОСРВ с помощью одной или нескольких из следующих техник: * временная маскировка или отключение прерываний; * мьютексы; @@ -253,33 +253,33 @@ RTOS включает в себя усовершенствованный алг Эти техники будут описаны в последующих главах данного курса. -==== Распределение памяти +==== Выделение памяти -Распределение памяти имеет решающее значение в RTOS, поскольку утечка памяти может привести к резкому снижению производительности, что неприемлемо для системы реального времени. -Распределение памяти может быть _динамическим_ или _статическим_. +Выделение памяти памяти имеет решающее значение в ОСРВ, поскольку утечка памяти может привести к резкому снижению производительности, что неприемлемо для системы реального времени. +Выделение памяти может быть _динамическим_ или _статическим_. -Динамическое распределение памяти должно хорошо обрабатываться RTOS, чтобы избежать неправильного использования ресурсов памяти. -Преимуществом динамического распределения, однако, является большая гибкость для разработчика приложений. -Поскольку ОС управляет распределением памяти, она может выделять и освобождать память по мере необходимости и использования. +Динамическое выделение памяти должно хорошо обрабатываться ОСРВ, чтобы избежать неправильного использования ресурсов памяти. +Преимуществом динамического выделения, однако, является большая гибкость для разработчика приложений. +Поскольку ОС управляет выделением памяти, она может выделять и освобождать память по мере необходимости и использования. -Статическое распределение памяти, с другой стороны, дает разработчику приложения больше контроля над распределением и деаллокацией памяти в системе. +Статическое выделение памяти, с другой стороны, дает разработчику приложения больше контроля над выделением и освобождением памяти в системе. -==== Доступные решения RTOS +==== Доступные решения ОСРВ -В прошлом RTOS создавались производителями специально под требования их аппаратных средств. +В прошлом ОСРВ создавались производителями специально под требования их аппаратных средств. Поскольку большинство аппаратных средств было адаптировано к пользовательским приложениям, разработчики этих аппаратных средств отличали свои устройства от устройств конкурентов, предоставляя высококачественные программные интерфейсы и высокопроизводительное ПО. -В результате RTOS играла решающую роль в отличии одного продукта от другого. +В результате ОСРВ играла решающую роль в отличии одного продукта от другого. -Поскольку RTOS была одним из основных отличий между продуктами, предлагаемыми различными компаниями, -исторически это было программное обеспечение с закрытым исходным кодом, которое поставлялось по цене лицензии. +Поскольку ОСРВ была одним из основных отличий между продуктами, предлагаемыми различными компаниями, +исторически это было программное обеспечение с закрытым исходным кодом и платной лицензией. Однако в последнее время аппаратное обеспечение стало более распространенным, и теперь разница между продуктами в основном заключается в пользовательском прикладном программном обеспечении, которое разрабатывает каждая компания-производитель. -По этой причине в настоящее время существуют различные RTOS с открытым исходным кодом, которые разработчики могут использовать со своим оборудованием для создания систем реального времени. +По этой причине в настоящее время существуют различные ОСРВ с открытым исходным кодом, которые разработчики могут использовать со своим оборудованием для создания систем реального времени. -Примеры RTOS с закрытым и открытым исходным кодом перечислены ниже (расположены в алфавитном порядке, а не в порядке предпочтения): +Примеры ОСРВ с закрытым и открытым исходным кодом перечислены ниже (расположены в алфавитном порядке, а не в порядке предпочтения): * Deos (DDC-I) * embOS (SEGGER) diff --git a/LFD112x-RU/Chapters/Chapter2.adoc b/LFD112x-RU/Chapters/Chapter2.adoc index 60d993f..de6208c 100644 --- a/LFD112x-RU/Chapters/Chapter2.adoc +++ b/LFD112x-RU/Chapters/Chapter2.adoc @@ -31,8 +31,8 @@ endif::[] ==== Что такое FreeRTOS? -FreeRTOS -- одна из наиболее часто используемых операционных систем реального времени (RTOS), распространяемая под открытой лицензией MIT. -FreeRTOS -- это RTOS, ориентированная на микроконтроллеры и небольшие микропроцессоры. +FreeRTOS -- одна из наиболее часто используемых операционных систем реального времени, распространяемая под открытой лицензией MIT. +FreeRTOS -- это ОСРВ, ориентированная на микроконтроллеры и небольшие микропроцессоры. Она включает ядро и растущий набор библиотек IoT, подходящих для использования во всех отраслях промышленности. FreeRTOS создана с акцентом на надежность и простоту использования. @@ -41,7 +41,7 @@ FreeRTOS создана с акцентом на надежность и про ==== Требования приложений -FreeRTOS позволяет пользователям использовать различные преимущества ядра реального времени по сравнению с созданием исходного встраиваемого приложения. +FreeRTOS позволяет пользователям использовать различные возможности ядра реального времени по сравнению с созданием встраиваемого приложения, работающего без ОС. Эти возможности являются типичными требованиями для большинства современных встраиваемых приложений, поскольку одна система может быть приспособлена как к простым, так и к сложным приложениям и должна обеспечивать возможность повторного использования системы в различных компонентах приложения. @@ -136,13 +136,15 @@ FreeRTOS распространяется через Git-репозиторий поэтому пользователи могут свободно использовать его в своих приложениях, а также при необходимости вносить в код любые изменения. Дистрибутив также содержит демонстрационные приложения и демоверсии портов (ports) для различных контроллеров, поддерживаемых FreeRTOS. Эти демоверсии помогают пользователям FreeRTOS быстро адаптировать её к своим требованиям. -Многие поставщики микроконтроллеров поставляют RTOS как часть своего набора инструментов, что еще больше облегчает разработку с FreeRTOS. +Многие поставщики микроконтроллеров поставляют ОСРВ как часть своего набора инструментов, что еще больше облегчает разработку с FreeRTOS. ==== Структура каталогов дистрибутива FreeRTOS Последнюю версию FreeRTOS можно загрузить с https://www.freertos.org/[веб-сайта] FreeRTOS. FreeRTOS также размещен на https://github.com/FreeRTOS[GitHub], и пользователи могут получить последнюю версию исходного кода из каталога Git. +Структура папок дистрибутива FreeRTOS выглядит следующим образом. + * _FreeRTOS_ -- содержит файлы, относящиеся к FreeRTOS ** _Demo_ -- содержит демоверсии портов ** _License_ -- содержит лицензионные файлы @@ -156,10 +158,10 @@ FreeRTOS также размещен на https://github.com/FreeRTOS[GitHub], ==== Содержимое дистрибутива -Ключевая часть ядра (core of the kernel) FreeRTOS содержится в трёх файлах, которые находятся в подкаталоге `FreeRTOS\FreeRTOS\Source`. +Ключевая часть ядра (core of the kernel) FreeRTOS содержится в трёх файлах, которые находятся в подкаталоге `FreeRTOS/FreeRTOS/Source`. Это файлы `tasks.c`, `queue.c` и `lists.c`. Для простых приложений этих трёх файлов достаточно. -Папка `Source` содержит подпапку `include`, в которой находятся файлы `include`, необходимые для установки. +Папка `Source` содержит подпапку `include`, в которой находятся необходимые заголовочние файлы. Существуют и другие файлы, которые могут понадобиться в зависимости от специфической функциональности конкретного приложения. @@ -197,36 +199,36 @@ FreeRTOS также размещен на https://github.com/FreeRTOS[GitHub], ===== Управление памятью: методы распределения памяти Управление памятью осуществляется FreeRTOS для её эффективного использования. -Поддерживается как _статическое_, так и _динамическое_ распределение. +Поддерживается как _статическое_, так и _динамическое_ выделение. Обе схемы имеют свои преимущества и недостатки, в зависимости от приложения. Разработчик приложения выбирает подходящую схему управления памятью в зависимости от требований. -Одно и то же приложение может содержать задачи как динамического, так и статического распределения. +Одно и то же приложение может содержать задачи, требующие как динамического, так и статического выделения. FreeRTOS использует собственные методы управления памятью и определяет собственные функции для её выделения, а также для освобождения после использования. Она также определяет несколько методов управления кучей/памятью, что дает пользователю возможность выбрать оптимальную схему, которая лучше всего подходит для его приложения. -Схема распределения памяти во FreeRTOS по умолчанию динамическая. +Схема выделения памяти во FreeRTOS по умолчанию динамическая. В случаях, когда разработчику приложения требуется больший контроль над управлением памятью для определенных компонентов приложения, -он может выбрать статическое распределение памяти для этих задач. -FreeRTOS предоставляет отдельный набор функций для компонентов, которым требуется статическое распределение памяти. +он может выбрать статическое выделение памяти для этих задач. +FreeRTOS предоставляет отдельный набор функций для компонентов, которым требуется статическое выделение памяти. Эти функции доступны, когда `+configSUPPORT_STATIC_ALLOCATION+` имеет значение `1` в файле настроек конфигурации. -Ниже перечислены некоторые преимущества использования динамического распределения памяти (адаптировано из руководства пользователя FreeRTOS): +Ниже перечислены некоторые преимущества использования динамического выделения памяти (адаптировано из руководства пользователя FreeRTOS): * при создании объекта требуется меньше параметров функции; -* выделение памяти происходит автоматически, в рамках функций API RTOS; +* выделение памяти происходит автоматически, в рамках функций API ОСРВ; * разработчику приложения не нужно заботиться о выделении памяти; -* оперативная память, используемая объектом RTOS, может быть повторно использована при удалении объекта, +* оперативная память, используемая объектом ОСРВ, может быть повторно использована при удалении объекта, что потенциально уменьшает максимальный объем оперативной памяти приложения; -* функции API RTOS позволяют возвращать информацию об использовании кучи, что позволяет оптимизировать её размер. +* функции API ОСРВ позволяют возвращать информацию об использовании кучи, что позволяет оптимизировать её размер. -Ниже перечислены некоторые преимущества использования статического распределения памяти (адаптировано из руководства пользователя FreeRTOS): +Ниже перечислены некоторые преимущества использования статического выделения памяти (адаптировано из руководства пользователя FreeRTOS): -* объекты RTOS могут быть размещены в определенных местах памяти; +* объекты ОСРВ могут быть размещены в определенных местах памяти; * максимальный объем оперативной памяти может быть определен во время компоновки, а не во время выполнения; * разработчику приложения не нужно заботиться о корректной обработке сбоев при выделении памяти; -* это позволяет использовать RTOS в приложениях, которые просто не допускают динамического распределения памяти +* это позволяет использовать ОСРВ в приложениях, которые просто не допускают динамического выделения памяти (хотя FreeRTOS включает схемы распределения, которые могут преодолеть большинство возражений). ===== Управление памятью: схемы управления памятью во FreeRTOS @@ -241,18 +243,18 @@ FreeRTOS определяет пять схем управления памят * `heap_1.c` + Это простейшая реализация управления памятью. -Она похожа на статическое распределение памяти, поэтому это решение может оказаться не очень полезным в текущих реализациях, -поскольку FreeRTOS теперь поддерживает статическое распределение нативно. +Она похожа на статическое выделение памяти, поэтому это решение может оказаться не очень полезным в текущих реализациях, +поскольку FreeRTOS теперь поддерживает статическое выделение нативно. Однако оно очень хорошо подходит для большинства встраиваемых систем, поскольку они занимают мало памяти и являются глубоко встраиваемыми. -При такой реализации вся необходимая память всегда выделяется в начале выполнения системы и перераспределяется только при перезагрузке системы. +При такой реализации вся необходимая память всегда выделяется в начале выполнения системы и перевыделяется только при перезагрузке системы. * `heap_2.c` + `heap_2` использует алгоритм наибольшего соответсвия (best-fit) для выделения памяти, и пространство, которое больше не используется, освобождается для дальнейшего использования. -Он не объединяет свободные места в один блок перед перераспределением. -Эта схема может быть использована, когда во время выполнения приложения происходит многократное удаление и создание задач или других компонентов RTOS. -Не рекомендуется использовать эту схему, если освобождаемые и перераспределяемые блоки памяти имеют произвольный размер, +Он не объединяет свободные участки памяти в один блок перед перевыделением. +Эта схема может быть использована, когда во время выполнения приложения происходит многократное удаление и создание задач или других компонентов ОСРВ. +Не рекомендуется использовать эту схему, если освобождаемые и перевыделяемые блоки памяти имеют произвольный размер, так как это может привести к фрагментации памяти. -Кроме того, распределение не является детерминированным, но оно более эффективно, чем реализация `malloc` в языке Си. +Кроме того, выделение не является детерминированным, но оно более эффективно, чем реализация `malloc` в языке Си. * `heap_3.c` + `heap_3` -- это простая, потокобезопасная обертка вокруг стандартных функций `+malloc()+` и `+free()+` языка Си. @@ -261,8 +263,8 @@ FreeRTOS определяет пять схем управления памят * `heap_4.c` + `heap_4` использует «первый подходящий» алгоритм (first-fit) для выделения памяти. -В отличие от `heap_2`, он объединяет соседние свободные пространства в более крупный блок, а затем выделяет память; -он включает алгоритм коалесценции, который поддерживает эту возможность. +В отличие от `heap_2`, он объединяет соседние свободные участки в более крупный блок, а затем выделяет память; +он включает алгоритм слияния, который поддерживает эту возможность. Эта схема может быть использована в системах, требующих многократного создания и удаления задач и других компонентов. Поскольку эта реализация объединяет области памяти в более крупные блоки памяти, она с меньшей вероятностью приведет к неправильной фрагментации памяти. * `heap_5.c` @@ -277,7 +279,7 @@ FreeRTOS определяет пять схем управления памят Внутри приложения может быть определено любое количество задач. Задачи можно понимать как небольшие подпрограммы, которые доступны для выполнения в течение всего времени работы основного приложения. -Планировщик (scheduler) RTOS отвечает за контроль над тем, какая задача должна быть выполнена в любой момент времени. +Планировщик (scheduler) ОСРВ отвечает за контроль над тем, какая задача должна быть выполнена в каждый момент времени. В одноядерных системах только одна задача может быть активна в приложении в любой момент времени. Поэтому планировщик также отвечает за безопасное включение и выключение каждой задачи, а также за сохранение состояния, чтобы при повторном включении каждая задача возвращалась в свое предшествующее состояние. @@ -287,21 +289,21 @@ FreeRTOS определяет пять схем управления памят Задача может находиться в одном из следующих четырёх состояний: -* _Готова к выполнению_. +* _Готова к выполнению_ (_Ready_). + В этом состоянии задача готова к выполнению, то есть она не находится в состоянии блокировки или приостановки. Однако она не выполняется, потому что на процессоре уже выполняется другая задача с более высоким или равным приоритетом. -* _Выполняется_. +* _Выполняется_ (_Running_). + В этом состоянии задача выполняется на процессоре. Если система имеет только одно ядро, то в каждый момент времени может выполняться только одна задача. -* _Заблокирована_. +* _Заблокирована_ (_Blocked_). + В этом состоянии задача не готова к выполнению, так как ожидает входных данных от внешних источников, других задач или временных событий (например, события таймера или задержки). Для каждой заблокированной задачи существует тайм-аут, по достижении которого задача переходит из заблокированного состояния в состояние готовности. После истечения тайм-аута задаче не нужно ждать наступления события, которое её блокировало. -* _Приостановлена_. +* _Приостановлена_ (_Suspended_). + Приостановленные задачи не могут автоматически выйти из этого состояния, так как для них не установлен тайм-аут. Они должны быть явно выведены из этого состояния приложением с помощью операции _возобновления_ (_resume_). @@ -364,12 +366,12 @@ static void prvQueueReceiveTask( void *pvParameters ) Задачи добавляют информацию в конец очереди, а другие задачи, которым нужны данные из очереди, забирают их из начала и обрабатывают. При необходимости задачи также могут перемещать данные не в конец очереди, а в её начало. -FreeRTOS использует метод очереди путем копирования, где данные, отправленные в очередь, копируются в неё. +Во FreeRTOS данные, отправленные в очередь, копируются в неё. Этот метод обеспечивает простую, но мощную реализацию. Данные могут передаваться через очередь в одном из следующих форматов: * необработанные данные; -* ссылка на данные через указатели (когда данные, которые необходимо разделить, имеют значительный размер). +* ссылка на данные через указатели (когда данные, которыми необходимо поделиться, имеют значительный размер). FreeRTOS отвечает за выделение памяти для очереди и за хранение данных по мере необходимости. @@ -424,7 +426,7 @@ FreeRTOS. Прямые уведомления о задачах (direct task notifications) -- это события, отправляемые непосредственно задаче без промежуточного механизма, такого как очередь или семафор. Это ускоряет обмен данными и занимает гораздо меньше места в памяти. -Задача блокируется, когда в массиве событий уведомления установлен бит уведомления. +Задача блокируется, когда в массиве событий уведомлений устанавливается бит уведомления. Заблокировать задачу может только одно уведомление; если бы произошло другое событие, оно не повлияло бы на состояние задачи. ==== Буферы потоков и сообщений @@ -447,20 +449,20 @@ FreeRTOS. ==== Таймеры -Таймеры могут быть реализованы программно в RTOS, поэтому их также можно назвать программными таймерами. +Таймеры могут быть реализованы программно в ОСРВ, поэтому их также можно назвать программными таймерами. Они не используют аппаратные ресурсы и не потребляют процессорное время. Таймер позволяет запускать задачи или события, которые должны произойти в определенный момент в будущем. Будущее время выполнения контролируется настройками таймера. Задача, которая должна быть выполнена, называется функцией обратного вызова таймера. Функция обратного вызова (callback) таймера выполняется по истечении времени таймера или периода таймера. -Как и другие компоненты RTOS, таймер должен быть явно создан, прежде чем его можно будет использовать. +Как и другие компоненты ОСРВ, таймер должен быть явно создан, прежде чем его можно будет использовать. ===== Таймеры: соображения эффективности при реализации программных таймеров Функциональность программного таймера, в общем, легко реализовать, но трудно реализовать эффективно. -Реализация таймера в RTOS обладает следующими свойствами: +Реализация таймера в ОСРВ обладает следующими свойствами: * не выполняет функции обратного вызова таймера из контекста прерывания, пока таймер не истечет; * не требует времени на обработку; @@ -479,16 +481,16 @@ FreeRTOS. ===== Таймеры: типы -Два типа таймеров могут быть определены и использованы в приложении: +Два типа таймеров могут быть определены и использованы в приложении. [arabic] -. _Однократные таймеры_. +. _Однократные таймеры_ (_One-shot timers_). + Однократный таймер выполняется только один раз. По истечении срока действия таймера его обратный вызов вызывается и выполняется один раз. -. _Таймеры автозагрузки_. +. _Таймеры с автоматической перезагрузкой_ (_Auto-reload timers_). + -Таймер автозагрузки выполняется неограниченное время, пока работает приложение. +Таймер с автоматической перезагрузкой выполняется неограниченное число раз, пока работает приложение. Каждый раз, когда таймер истекает, выполняется обратный вызов, и таймер сбрасывается; таймер снова работает до следующего истечения срока его действия, что приводит к выполнению обратного вызова. Этот процесс повторяется, что приводит к периодическому выполнению обратного вызова. @@ -506,7 +508,7 @@ image:timers.png[title="Примеры различных конфигураци Это обеспечит хорошую отправную точку для приложения и устранит многие проблемы портирования (porting), которые могут возникнуть при создании нового приложения с использованием FreeRTOS. -Затем разработчик должен указать следующую предварительную информацию, необходимую для создания чистого приложения RTOS: +Затем разработчик должен указать следующую предварительную информацию, необходимую для создания чистого приложения ОСРВ: * _Количество требуемых задач_ + @@ -536,15 +538,15 @@ image:timers.png[title="Примеры различных конфигураци ==== Шаг 1: Настройка потока инструментов для контроллера -В качестве первого шага настройте поток инструментов (tool flow) для контроллера, на котором будет выполняться приложение RTOS. +В качестве первого шага настройте набор инструментов для контроллера, на котором будет выполняться приложение ОСРВ. Используя процесс установки, запустите базовый тест `Hello world`, чтобы убедиться в следующем. * Приложение написано. * Необходимый стартовый код для контроллера, файлы компоновщика, файлы конфигурации компоновщика и другие связанные файлы уже готовы. -* Приложение компилируется в тулчейне (toolchain) для выбранного контроллера. +* Приложение компилируется системой компиляции (toolchain) для выбранного контроллера. * Пользователь может запустить приложение на плате или эмулировать функциональность контроллера для проверки программного обеспечения. -В качестве альтернативы пользователь может выбрать демонстрационное приложение FreeRTOS и запустить его в потоке инструментов, +В качестве альтернативы пользователь может выбрать демонстрационное приложение FreeRTOS и запустить его набором инструментов, чтобы убедиться, что установка выполнена правильно, а затем использовать его в качестве отправной точки для разработки приложения. ==== Шаг 2: Включение исходных файлов FreeRTOS @@ -568,28 +570,27 @@ image:timers.png[title="Примеры различных конфигураци * Если требуется поток или буфер сообщений, добавьте `FreeRTOS/Source/stream_buffer.c` в список исходных файлов проекта. * Существует также функциональность сопрограмм (или корутин, coroutines), но её не рекомендуется использовать для новых разработок (эта функциональность устарела). -==== Шаг 3: Включение необходимых заголовочных файлов RTOS +==== Шаг 3: Включение необходимых заголовочных файлов ОСРВ -Следующие каталоги должны быть частью пути `include` сценария -компиляции, чтобы компилятор мог найти заголовочные файлы RTOS: +Следующие каталоги должны быть частью include-пути (include path) скрипта сборки, чтобы компилятор мог найти заголовочные файлы ОСРВ: * `FreeRTOS/Source/include` * `FreeRTOS/Source/portable/[compiler]/[architecture]` * Директория, содержащая `FreeRTOSConfig.h` -В зависимости от того, на какой процессор портируется RTOS, эти пути могут потребоваться и в `include` пути включения ассемблера. +В зависимости от того, на какой процессор портируется ОСРВ, эти пути могут потребоваться и в include-пути ассемблера. ==== Шаг 4: Обновление настроек файла конфигурации FreeRTOS Каждый проект FreeRTOS требует наличия файла конфигурации `FreeRTOSConfig.h`. -Это файл, который определяет настройки для ядра RTOS, подстраивая ядро под конкретное создаваемое приложение. +Это файл, который определяет настройки для ядра ОСРВ, подстраивая ядро под конкретное создаваемое приложение. Этот файл зависит от пользователя или приложения и должен быть размещен в области кода приложения, а не вместе с исходным кодом ядра. Подробнее о различных настройках, доступных в этом файле, можно ознакомиться в https://freertos.org/a00110.html[документации FreeRTOS]. Если в ваш проект включена куча `heap_1`, `heap_2`, `heap_4` или `heap_5`, то значение параметра `+configTOTAL_HEAP_SIZE+` будет определять размер кучи FreeRTOS. -Если для `configTOTAL_HEAP_SIZE` задано слишком большое значение, приложение не будет связываться, поэтому нужно устанавливать разумный размер кучи. +Если для `configTOTAL_HEAP_SIZE` задано слишком большое значение, приложение не получится скомпоновать, поэтому нужно устанавливать разумный размер кучи. Параметр `+configMINIMAL_STACK_SIZE+` определяет размер стека, используемого бездействующей задачей. Если для `configMINIMAL_STACK_SIZE` установлено слишком малое значение, бездействующие задачи будут генерировать переполнение стека. @@ -600,16 +601,16 @@ image:timers.png[title="Примеры различных конфигураци ==== Шаг 5: Установка необходимых векторов прерывания -Каждый порт RTOS использует как минимум один таймер. +Каждый порт ОСРВ использует как минимум один таймер. Он используется для генерации периодического тикового прерывания. В зависимости от порта могут потребоваться дополнительные таймеры для управления переключением контекста и других связанных с этим задач. -Прерывания, которые требуются RTOS, обслуживаются исходным файлом RTOS `port.c`. +Прерывания, которые требуются ОСРВ, обслуживаются исходным файлом ОСРВ `port.c`. В зависимости от порта и используемого компилятора, способ установки обработчиков прерываний также различается. -Пользователи могут скопировать официальное демо-приложение для используемого порта из каталогов демо-версий RTOS. +Пользователи могут скопировать официальное демо-приложение для используемого порта из каталогов демо-версий ОСРВ. После выполнения всех вышеперечисленных шагов пользователь сможет скомпилировать приложение для выбранного им контроллера. -Затем пользователь может улучшить свое приложение в соответствии со своими требованиями и запустить его на выбранном им оборудовании. +Затем пользователь может расширить своё приложение в соответствии со своими требованиями и запустить его на выбранном им оборудовании. === Запуск демо-приложения @@ -752,4 +753,4 @@ image:chapter2_demo8.png[] Перейдите в каталог проекта, где находится исполняемый файл, и запустите исполняемый файл, созданный в Eclipse. image:chapter2_demo9.png[] --- \ No newline at end of file +-- diff --git a/LFD112x-RU/Chapters/Chapter3.adoc b/LFD112x-RU/Chapters/Chapter3.adoc index 2432337..5c36e06 100644 --- a/LFD112x-RU/Chapters/Chapter3.adoc +++ b/LFD112x-RU/Chapters/Chapter3.adoc @@ -11,11 +11,11 @@ endif::[] == Портирование FreeRTOS на другую программную или аппаратную платформу В этой главе представлены концепции, связанные с портированием FreeRTOS, и даны инструкции по реализации. -В первом разделе подробно описаны требования к портированию FreeRTOS на новый компилятор программного обеспечения или на новую аппаратную платформу. +В первом разделе подробно описаны требования к портированию FreeRTOS на новый компилятор или на новую аппаратную платформу. Используя это в качестве основы, мы затем анализируем, как может быть выполнен перенос. В последнем разделе мы исследуем, как FreeRTOS может быть перенесена на новый контроллер. -К концу этой главы вы должны уметь: +К концу этой главы вы сможете: * понимать требования к портированию FreeRTOS на новый компилятор или аппаратную платформу; * портировать на новый компилятор или аппаратную платформу; @@ -26,20 +26,20 @@ endif::[] Следующая документация необходима для портирования FreeRTOS на другую систему компиляции или другую аппаратную платформу. * Информация о новом оборудовании, на которое переносится FreeRTOS: -** Руководство по аппаратному обеспечению -** Руководства пользователя для платы -** Детали портов ввода-вывода -** Другие важные сведения, необходимые для создания новых приложений на этом оборудовании -** Базовый пример соответствующего инструментального потока (tool flow), работающего на этом оборудовании -* Информация о том, как использовать целевой тулчейн для компиляции и запуска программного обеспечения: -** Простой, базовый пример существующего процесса компиляции и сборки +** руководство по аппаратному обеспечению; +** руководства пользователя для платы; +** детали портов ввода-вывода; +** другие важные сведения, необходимые для создания новых приложений на этом оборудовании; +** базовый пример соответствующего набора инструментов, работающего на этом оборудовании. +* Информация о том, как использовать целевую систему компиляции для сборки и запуска программного обеспечения: +** простой, базовый пример существующего процесса компиляции и сборки. После получения вышеперечисленной информации пользователь может приступить к созданию приложения на базе FreeRTOS на основе уже имеющейся демонстрационной версии FreeRTOS. Рекомендуется загрузить последнюю стабильную версию FreeRTOS с https://www.freertos.org/[веб-сайта FreeRTOS] или https://github.com/FreeRTOS[GitHub]. -После получения последней версии RTOS можно выполнить шаги, перечисленные в следующем подразделе, +После получения последней версии FreeRTOS можно выполнить шаги, перечисленные в следующем подразделе, чтобы портировать её либо на новое оборудование, либо на новый компилятор, либо на комбинацию того и другого. === Портирование на новый компилятор или аппаратную платформу @@ -103,12 +103,12 @@ int main( void ) ===== Шаг 3: Использование планировщика FreeRTOS Если светодиоды мигают, замените функцию `main()`, показанную на предыдущем шаге, -на функцию `main()` из выбранной вами демонстрации, чтобы представить планировщик FreeRTOS. -В демо-версию встроен простой тест на мигание светодиодов, который можно использовать для проверки настройки RTOS. +на функцию `main()` из выбранной вами демонстрации, чтобы внедрить планировщик FreeRTOS. +В демо-версию встроен простой тест на мигание светодиодов, который можно использовать для проверки настройки FreeRTOS. -Тест вспышки создает по одной задаче на светодиод и затем использует эти задачи для управления их миганием. +Тест с морганием создает по одной задаче на светодиод и затем использует эти задачи для управления их миганием. Файл для этого теста можно найти в `+FreeRTOS/Demo/Common/Minimal/Flash.c+`. -Функция `main()` содержит вызовы нескольких тестов RTOS. В этой функции закомментируйте все вызовы функций, кроме функции `vStartLEDFlashTasks()`. +Функция `main()` содержит вызовы нескольких тестов FreeRTOS. В этой функции закомментируйте все вызовы функций, кроме функции `vStartLEDFlashTasks()`. Эта функция запускает тест светодиодной вспышки. .Пример кода показан ниже: @@ -158,14 +158,14 @@ int main( void ) ---- После установки задач с помощью функции `vStartLEDFlashTasks()` запустите планировщик с помощью `vTaskStartScheduler()`. -Это запустит планировщик RTOS и позволит задачам выполняться по расписанию. +Это запустит планировщик ОСРВ и позволит задачам выполняться по расписанию. Если светодиоды переключаются, перейдите к следующему шагу. ===== Шаг 4: Создание пользовательских приложений Теперь, когда базовый тест запущен, вы можете раскомментировать другие тесты, чтобы увидеть их выполнение. -Другие тесты включают в себя исчерпывающий список элементов, которые проверяет RTOS. +Другие тесты включают в себя исчерпывающий список элементов, которые проверяет ОСРВ. Кроме того, теперь можно определять, писать и тестировать свои собственные приложения на этой платформе. @@ -173,11 +173,11 @@ int main( void ) В этом разделе мы рассмотрим перенос FreeRTOS на другой компилятор или объединение двух или более демо-версий в соответствии с вашими требованиями. -Есть два возможных сценария, которые могут возникнуть у пользователя при портировании FreeRTOS: +Есть два возможных сценария, которые могут возникнуть у пользователя при портировании FreeRTOS. [arabic] . Портирование на другой микроконтроллер, где тот же компилятор используется в текущем проекте и в другом демонстрационном проекте. -. Начиная с нового проекта и используя необходимый компилятор. +. Начало нового проекта с использованием необходимого компилятора. В обоих вышеперечисленных случаях можно начать с демонстрационного проекта в качестве ориентира и двигаться дальше. Демонстрационный проект должен быть для того же контроллера, который вы используете или планируете использовать. @@ -206,13 +206,13 @@ int main( void ) ====== Файлы низкого уровня -Стартовый файл C и скрипт компоновщика обычно зависят от процессора и компилятора. -Никогда не пытайтесь создавать эти файлы с нуля; в каталоге `demo` FreeRTOS есть демонстрационные примеры для различных процессоров. +Стартовый файл C и скрипт компоновщика (linker script) обычно зависят от процессора и компилятора. +Никогда не пытайтесь создавать эти файлы с нуля; в каталоге `Demo` FreeRTOS есть демонстрационные примеры для различных процессоров. Выберите пример, наиболее подходящий для вашего процессора, и начните с него. -Будьте особенно внимательны с файлами запуска ARM7 C. -Они должны настраивать обработчик IRQ либо на векторную передачу непосредственно в обработчик прерываний, либо на векторную передачу в общую точку входа. +Будьте особенно внимательны с файлами запуска ARM7 на Си. +Они должны настраивать обработчик IRQ либо на передачу управления непосредственно в обработчик конкретного прерывания, либо на передачу упрваления в общую процедуру обработки. Примеры обработки векторов показаны в `+FreeRTOS/source/portable/[compiler]/[microcontroller]/port.c+` и `portISR.c`. Опять же, обязательно используйте существующие файлы в качестве справочника. @@ -229,22 +229,21 @@ int main( void ) Опять же, обратитесь за примерами к существующим демонстрационным проектам приложений. В зависимости от способа сборки проекта, необходимо определить соответствующие опции для компилятора. -Они могут быть заданы в опциях GUI, если компилятор является системой, основанной на пользовательском интерфейсе, -или в скриптах compile или make, которые будут использоваться для компиляции проекта. +Они могут быть заданы в опциях графического интерфейса (GUI), если система сборки поддерживает его, +или в скриптах компиляции, которые будут использоваться для сборки проекта. ===== Настройка прерывания таймера Прерывание таймера настраивается функцией `prvSetupTimerInterrupt()`, которая находится в файле `+FreeRTOS/source/portable/[compiler]/[microcontroller]/port.c+`. -===== Управление использованием ОЗУ и ПЗУ +===== Управление использованием ОЗУ (RAM) и ПЗУ (ROM) В качестве последнего шага определите необходимую схему управления памятью, которая будет соответствовать требованиям приложения, и обновите соответствующую настройку в файле `FreeRTOSConfig.h`. ==== Портирование на новый контроллер или процессор Портирование FreeRTOS на новый контроллер или процессор -- довольно сложный процесс. -Перенос на одно и то же семейство процессоров гораздо более прост и может быть выполнен с использованием существующих демонстрационных настроек, -доступных в `demo` в каталогах релизов FreeRTOS. +Перенос на одно и то же семейство процессоров гораздо более прост и может быть выполнен с использованием существующих демонстрационных настроек. Перенос на другое семейство процессоров, с другой стороны, требует глубокого понимания процесса. Для получения подробной информации о портировании на новый контроллер или процессор см. https://freertos.org/FreeRTOS-porting-guide.html[руководство по портированию FreeRTOS]. diff --git a/LFD112x-RU/Course.adoc b/LFD112x-RU/Course.adoc index ad43454..3827809 100644 --- a/LFD112x-RU/Course.adoc +++ b/LFD112x-RU/Course.adoc @@ -30,7 +30,7 @@ toc::[] :rquot: » :sectnums: -include::Chapters/Chapter1.adoc[Глава 1. Введение в RTOS и встраиваемые системы] +include::Chapters/Chapter1.adoc[Глава 1. Введение в ОСРВ и встраиваемые системы] :sectnumlevels: 2 include::Chapters/Chapter2.adoc[Глава 2. FreeRTOS]