» » CooCox CoOS + STM32VL-Discovery. Первый проект с многозадачной ОС: мигаем светодиодами!

 
 
 
18

CooCox CoOS + STM32VL-Discovery. Первый проект с многозадачной ОС: мигаем светодиодами!

Разместил sergey_esp 30 октября 2014. Просмотров: 14 278


CooCox CoOS + STM32VL-Discovery. Первый проект с многозадачной ОС: мигаем светодиодами!

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

Сейчас микроконтроллеры имеют большой запас и этого делать уже не нужно. Практические задачи остались прежними, а способы их решения упростились за счёт большего расточительства. Когда у тебя в кране полно воды, будешь ли ты пить её, как в пустыне, экономя каждый глоток?

Об одном из уникальных средств приятного расточительства, упрощающего разработку сложных микроконтроллерных систем, и хотелось бы поговорить. Это так называемые операционные системы. Их достаточно большое количество.
Я для работы использую среду разработки CooCox IDE и считаю её лучшей. А CooCox CoOS это многозадачная операционная система реального времени (ОСРВ) для встраиваемых систем.

После старого доброго WinAVR и IAR создается впечатление, будто пересел с простого автомобиля на тачку бизнес класса. Поэтому предлагаю начать именно с нее. К тому же эта среда является бесплатной.

Использовать для первого опыта будем микроконтроллер STM32F100RBT6 установленный на бюджетной отладочной плате STM32VL-Discovery, которую на время эксперимента я взял у друга. На ней как раз установлено два светодиода, темп мигания которых мы установим независимо друг от друга, каждый с произвольной частотой.

Использование операционной системы - это неоспоримое преимущество перед написанием самостоятельного софта, непосредственно дергающего выводы микроконтроллера.

Сперва я обратил внимание на операционную систему FreeRTOS. Собрал первый проект на ней, но так и не запустил, так как не хватило оперативной памяти у имеющегося на плате STM32VL-Discovery микроконтроллера. Установил в настройках среды разработки более мощный контроллер 103-й серии и у меня всё отлично откомпилировалось, но реального железа не было, чтобы проверить.

Позже, совершенно случайно обнаружил среди встроенных в CooCox IDE библиотек ядро операционной системы и решил ещё раз попробовать.

Поискал в интернете информацию и ничего об этой операционной системе не нашёл, а в последствии оказалось - классная штука, после сборки заработала с первого раза. Меня это удивило, так как с первого раза обычно ничего не работает. В CooCox есть example (пример) её использования, который я переделал под поставленную задачу мигания светодиодами.

Принцип создания продукта прост. Отдельно мы разрабатываем задачи, это похоже на то, как мы пишем функцию вне основного тела main. А задачи мы создаём с помощью функции, встроенной в ядро системы и предназначенной для создания задач уже в теле main.

Выполняет ранее созданные задачи операционная система самостоятельно после запуска встроенной в неё функции старта.

Рассмотрим все подробнее

Прежде чем приступить к написанию исходного кода программы необходимо установить среду CooCox IDE и настроить её под наш проект.

В конце статьи будут приложены файлы проекта, поэтому после установки необходимого программного обеспечения, мы можем открыть готовый проект, подключить отладочную плату STM32VL-Discovery, прошить и получить быстрый результат.

А уже после провести серию экспериментов над кодом. Например, изменить частоту мигания светиков, добавить еще задач и т. п.

Настройка среды

После установки CooCox IDE нам нужно указать путь к компилятору, программе, которая собственно и превращает наш исходный текст программы в машинный код микроконтроллера. Для этого заходим во вкладку Project –> Select Toolchain Patch и выбираем путь к компилятору arm_2011.03_coocox\bin, жмём ОК.

Далее необходимо выбрать отладчик, в нашем случае это ST-LINK. Вкладка Debug –> Debug Configuration –> ST-Link, нажать Apply. Не забываем установить драйвера для этого отладчика с сайта производителя.

Если Вы не желаете собирать проект сами, можете открыть проект, который находится в приложении. Для этого вкладка Project –> Open Project и выбрать путь к файлу проекта - CooOStest.cob.

Далее подключить плату STM32VL-Discovery к Вашему компьютеру. Для прошивки микроконтроллера вкладка Flash –> Program Download. На плате при этом на пару секунд должен замигать красный светодиод, означающий, что идет обмен данными между компьютером и микроконтроллером. После этого на плате замигают два светодиода, зеленый и синий, с разными частотами мигания.

В случае самостоятельной сборки необходимо создать новый проект. Вкладка Project –> New Project.
Затем придумать имя проекту, например CooCoxOStest. Жмем Finish.
Перед вами в центре среды появится вкладка Repository.

Шаг 1. Выбираем фирму производителя микроконтроллера, в нашем случае для STM32VL-Discovery это ST.
Далее получаем следующий шаг.


Шаг 2. Выбираем контроллер STM32F100RB.


Шаг 3. В появившемся окне ставим галочку GPIO. Автоматически установятся еще три галочки CMSIS core, CMSIS Boot и RCC. Эти библиотеки необходимы для того чтобы включить периферию, те порты ввода вывода GPIO (ноги контроллера), тактирование внутренних шин (RCC) и вспомогательные библиотеки для работы с ядром.


Осталось подключить ядро ОС. Для этого прокруткой попадаем в самую нижнюю строку Repository и ставим галочку напротив CooCox OS.


Настройки готовы. Осталось в левом нижнем окошке Project открыть файл main.c


И в появившейся вкладке main.c написать текст программы, подобно тому, как будет описано дальше.

В исходном коде программы подключаем файлы ядра и стандартных CMSIS библиотек.
#include "CoOS.h"
#include "stm32f10x.h"
#include "stm32f10x_gpio.h"
#include "stm32f10x_rcc.h"


Определяем под каждую необходимую нам задачу размер оперативной
памяти под стек. Если ее выделить мало, задача не сможет быть выполнена до конца. Если слишком много, то, при увеличении числа задач, памяти может не хватить.

#define STACK_SIZE_TASKA 128  //128 – это и есть наш размер стека            
#define STACK_SIZE_TASKB 128
OS_STK     taskA_stk[STACK_SIZE_TASKA];	  
OS_STK     taskB_stk[STACK_SIZE_TASKB];


Независимо от того, насколько хороша наша операционная система, нам в первую очередь необходимо настроить внутреннюю периферию контроллера, для этого собственно мы и подключали выше стандартные библиотеки МК от производителя.

void InitPort(void)
{
    GPIO_InitTypeDef  GPIO_InitStructure;
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOC, ENABLE);
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8|GPIO_Pin_9;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
    GPIO_Init(GPIOC, &GPIO_InitStructure);
}


Пример программы

Далее нам необходимо составить саму задачу на примере задачи А.
Исключён фрагмент. Полный вариант статьи доступен только полноправным членам сообщества и подписчикам.
Пожалуйста, ознакомьтесь с условиями доступа.

Наконец-то компилируем, нажав F7, прошиваем и любуемся результатом.

Прошивка чипа на демоплате


Вариант 1. Вкладка Flash -> жмем Program download. В процессе (пара секунд) на плате мигает красный светодиод, после чего плата стартует автоматически.
Вариант 2. Кнопка с зеленой иконкой, как на скриншоте, всплывающая подсказка Download Code To Flash. Эффект такой же.
Видео в низком разрешении, извините, но суть понятна.


Файлы

CooOStest.7z | Файл 195,57 Kb загружен 17 раз.

Ссылки

Заказать себе демо-плату STM32VL Discovery
Драйвер для этой платы - STM32 ST-LINK utility
CooCox CoIDE
CooCox CoOS
CooCox компилятор
FreeRTOS

Спасибо за внимание!
Сергей (sergey_esp)
г. Красногоровка Донецкая обл.
Профиль sergey_esp
Я радиолюбитель US8IHS, музыкант. Мне 36 лет. Электронникой увлекаюсь с 4-го класса школы.

В электронике люблю радиолампы, микроконтроллеры и все что с ними связанно.

Работать начал рано, сперва на кабельном телевидении, затем монтером и кабельщиком-спайщиком в связи.

Затем работал инженером в частотнадзоре, ремонт терминалов GSM, проектировщиком звука и света для клубов, ресторанов, театров.

В вольном предпринимательстве занимался системами видеонаблюдения.
 

Понравилось? Палец вверх!

  • всего лайков: 101

Поделись с друзьями!

Связанные материалы:


Схема на Датагоре. Новая статья Кит отладочной платы ЦАПа «Silver Wolf R192» (WM8805, WM8740, TOSLINK, S/PDIF с гальванической развязкой)... Для разработки следующего Датагорского ЦАПа и написания управляющего софта была создана и заказана...
Схема на Датагоре. Новая статья Датагорский проект 10 "Water Tank Controller". Модификация блока управления для полива... Привет, друзья! Последний раз я имел дело с микроконтроллерами лет 20 назад, во время ПК типа...
Схема на Датагоре. Новая статья Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги... Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно....
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 1... Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще...
Схема на Датагоре. Новая статья Поделки начинающего цапостроителя. Часть 3. РСМ1796, DIR9001, РСМ2704, ADM485... РСМ1796 - что это за зверь и с чем ее едят. Покорение новых горизонтов. Иногда наступает момент,...
Схема на Датагоре. Новая статья Вариант подключения датчиков и темброблок для гитары Gibson Les Paul и подобных... Доброго времени суток, коллеги! Это моя первая статья, поэтому прошу строго не судить. Разумная...
Схема на Датагоре. Новая статья Проект DMX512. Микроконтроллер управляет профессиональным шоу. Ч.2... Мой первый готовый проект DMX512 на 60 каналов. Нечто подобное можно найти в инете, но часто это...
Схема на Датагоре. Новая статья Применение микроконтроллеров в звуковой технике. С. Р. Баширов, А. С. Баширов, Р. И. Авилов.... Применение микроконтроллеров в звуковой технике. С. Р. Баширов, А. С. Баширов, Р. И. Авилов. ...
Схема на Датагоре. Новая статья Грызем микроконтроллеры. Урок 1.... Эту статью (а точнее цикл статей…) я решил полностью посвятить микроконтроллерам фирмы Atmel....
Схема на Датагоре. Новая статья Как делают динамики?... Вы знаете, как делают динамики? Вот и я не знал. Но недавно мне прислали видео канала Discovery....
Схема на Датагоре. Новая статья Микроконтроллеры AVR в радиолюбительской практике. А. В. Белов... А. В. Белов Микроконтроллеры AVR в радиолюбительской практике Данная книга представляет собой...
Схема на Датагоре. Новая статья Силовая электроника. От простого к сложному. Семенов Б.Ю. 2005... Почитай, друг! Почерпнешь из этой книги что-нибудь интересное, новое, а может освежишь в памяти...
<
  • Гражданин
30 октября 2014 22:19

Сергей / Yamazaki

Цитата
  • С нами с 2.07.2009
  • Ушёл в реал Пользователь offline
  • 145 комментариев
  • 4 публикации
 
  • +1
Когда-то светодиодами мигали с помощью мультивибратора.
Потом с помощью atmega8.
И вот до чего дошел прогресс, теперь можно мигать светодиодом с помощью мощного 32-битного микропроцессора good

Если серьёзно, вы затронули интересную тему, особенно для тех, кому уже тесно в рамках возможностей атмеги, кто хочет двигаться дальше. Очень познавательно!

<
  • Главный редактор
30 октября 2014 22:29

Игорь Петрович Котов / Datagor

Цитата
  • С нами с 25.02.2011
  • Ушёл в реал Пользователь offline
  • 1 676 комментариев
  • 264 публикации
 
  • +1
Серёг, как ты вероятно понимаешь, это первая статья цикла.
На кортексах можно творить ужасные вещи smile

<
  • Гражданин
30 октября 2014 23:45

Сергей / sergey_esp

Цитата
  • С нами с 13.10.2014
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 2 публикации
 
  • +1
Игорь, очень понравилась Ваша редакция, спасибо большое! Даже перечитал с удовольствием smile

<
  • Гражданин
31 октября 2014 00:13

Игорь Рогов / AudioKiller

Цитата
  • С нами с 10.01.2012
  • Ушёл в реал Пользователь offline
  • 293 комментария
  • 3 публикации
 
  • 0
Я так понимаю, что потом вторая задача будет выполняться параллельно, не мешая миганиям светодиодов? И сразу возникает вопрос: если добавить с десяток задач. помимо "мигалки", то они отожрут ресурсы, и Delay(7) будет работать заметно дольше. Или система автоматически подстроит все под возросшую загрузку (на то она и многозадачная)?

<
  • Гражданин
31 октября 2014 01:11

Сергей / sergey_esp

Цитата
  • С нами с 13.10.2014
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 2 публикации
 
  • 0
Цитата: AudioKiller
Я так понимаю, что потом вторая задача будет выполняться параллельно...

Функция CoTickDelay(7) работает от контроллера прерываний. Если загрузить процессор, то контроллер прерываний отдельно будет тикать. Теоретически должно работать также как и при малом количестве задач.

<
  • Гражданин
31 октября 2014 16:05

Игорь Рогов / AudioKiller

Цитата
  • С нами с 10.01.2012
  • Ушёл в реал Пользователь offline
  • 293 комментария
  • 3 публикации
 
  • 0
А точно известно, что по прерываниям? А то в CodeVisionAVR функция delay вроде прерывания не трогает...

<
  • Гражданин
31 октября 2014 21:02

Сергей / sergey_esp

Цитата
  • С нами с 13.10.2014
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 2 публикации
 
  • 0
Цитата: AudioKiller
А точно известно, что по прерываниям? А то в CodeVisionAVR функция delay вроде прерывания не трогает...

В CooCox при наведении курсором на функцию во всплывающем окошке видно содержимое самой функции. Это очень удобно, именно таким способом перед ответом на предидущее письмо я подглядел в ее устройство. Действительно используются прерывания.

<
  • Гражданин
1 ноября 2014 01:09

Максим Черепанов / еще один max

Цитата
  • С нами с 10.03.2009
  • Ушёл в реал Пользователь offline
  • 91 комментарий
  • 10 публикаций
 
  • 0
Наконец-то у нас появился цикл по STM32. Больше года лежит плата, все руки не доходят. Правда у меня чуть мощнее, STM32F407VGT6. И цветной TFT дисплейчик на 3 дюйма, и все кабели микро и мини USB. И кокос поставил, и диодами поморгал...
И запал прошел - в руки попал Cubietruck. Теперь даже не знаю, вернусь ли. ИМХО, STMовские платы попали между молотом и наковальней - для простых задач AVR выше крыши, и делать самостоятельно что-то на STM практически нереально - корпуса чисто промышленные, под LQFP100 самостоятельно разводить и травить плату - не для слабонервных и слабовидящих. Нет вопросов, проектов в сети немало, и именно сделанных ручками. Но ручки должны быть как у хорошего хирурга.
С другой стороны есть Малинка, Banana Pi и линейка Cubieboard'ов. Куда ставятся полноценные Линуксы (не говоря про Андроид), так же есть GPIO, светодиоды. А уж периферия... Не у всякого полноценного компа есть. И разница в цене с демо-платами STM32 не такая уж и большая.
И главная мысль, которая лично меня сильно затормозила в освоении STM32 - что бы мне хотелось на нем сделать? Ответить на это вопрос я не смог.
Но это все очень субъективные мысли.

<
  • Гражданин
1 ноября 2014 01:29

Сергей / sergey_esp

Цитата
  • С нами с 13.10.2014
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 2 публикации
 
  • 0
Максим, только один довод в защиту STM32 - цена. Столкнулся с STM32 случайно. Мой друг купил для нашего проекта вакуумный графический индикатор. Он с 3,3В логикой, а вся автоматика в нашем проекте 5В, как раз Атмеги. Для того чтобы состыковать с ним Атмеги, нужны были схемные костыли. Вышли из ситуации платой STM32VL-Discovery, порты которой можно настроить для работы 3,3В и 5В. Так вот STM-32 тоже решили не распаивать, в разъем на плате воткнули Дискавери целиком. Еще с индикатором был подвох, пришлось под него библиотеку писать, но это уже другая история.

<
  • Гражданин
1 ноября 2014 01:33

Георгий / asterix_72

Цитата
  • С нами с 19.09.2008
  • Ушёл в реал Пользователь offline
  • 32 комментария
  • 1 публикация
 
  • 0
Цитата: AudioKiller
А точно известно, что по прерываниям? А то в CodeVisionAVR функция delay вроде прерывания не трогает...

Точно, тут (в данном примере) задержка задается не в миллисекундах, а в системных тиках, длительность которых указывается в конфигах.
Я так понял CoOS, это аналог freeRTOS, а может и копия))
Я долго боялся кортексов, заказал нуклео, почитал и понял - зря боялся. Производительность просто в разы выше, дма позволяет многое делать намного быстрее.

<
  • Гражданин
1 ноября 2014 16:02

Александр / mazr

Цитата
  • С нами с 22.09.2014
  • Ушёл в реал Пользователь offline
  • 10 комментариев
  • 2 публикации
 
  • 0
Хотелось уточнить у автора. Что он понимает под многозадачностью операционной системы применительно к данному мк?
Если я правильно понимаю, то многозадачность это одновременное выполнение нескольких операций. На одном ядре с одним АЛУ не представляю как это возможно.

<
  • Гражданин
1 ноября 2014 20:05

Георгий / asterix_72

Цитата
  • С нами с 19.09.2008
  • Ушёл в реал Пользователь offline
  • 32 комментария
  • 1 публикация
 
  • 0
Цитата: mazr
Хотелось уточнить у автора. Что он понимает под многозадачностью операционной системы применительно к данному мк?
Если я правильно понимаю, то многозадачность это одновременное выполнение нескольких операций. На одном ядре с одним АЛУ не представляю как это возможно.

отвечу за автора, задачи не выполняются одновременно, мы пишем задачи,
задаем приоритеты, задержки и т. п., а ос запускает задачи на выполнение согласно нашим требованиям, рекомендую почитать труды Андрея Курниц.

<
  • Гражданин
1 ноября 2014 22:44

Сергей / sergey_esp

Цитата
  • С нами с 13.10.2014
  • Ушёл в реал Пользователь offline
  • 8 комментариев
  • 2 публикации
 
  • 0
Спасибо, Георгий.
Александр, многозадачность можно сравнить с работой обычного компьютера. Проц в одно время работает над кусочком всего одной задачи. Потом переключается на кусочек следующей, доходит до последней задачи и начинает отрабатывать сначала первую задачу, но уже второй кусочек и так далее.
P.S. Только в Эльбрусах, где больше сотни процов на кристалле задачи выполняются парралельно в прямом смысле.

<
  • Гражданин
2 ноября 2014 01:43

Игорь Рогов / AudioKiller

Цитата
  • С нами с 10.01.2012
  • Ушёл в реал Пользователь offline
  • 293 комментария
  • 3 публикации
 
  • 0
Также как и персоналка до сих пор бывает с одним ядром, и работает в многозадачной Винде. И даже восьмиядерный процессор все равно при работе в Винде выполняет не один десяток задач одновременно. Смысл многозадачности - в достаточно быстром переключении процессора между ними. Простые ОС, типа Вин-95, делали это "неправильно" (хотя несколько программ свободно работали впараллель) - из каждой задачи выполнялись довольно большие куски, прежде чем переключиться на новую. Поэтому Вин-95 не могла обслуживать несколько модемов одновременно. А начиная с NT уже все стало ОК. Как это происходит в микроконтроллерах - точно не знаю, но по идее должно точно также: современные микроконтроллеры мощнее комповых процессоров двадцатилетней давности.

<
  • Гражданин
2 ноября 2014 15:35

Александр / mazr

Цитата
  • С нами с 22.09.2014
  • Ушёл в реал Пользователь offline
  • 10 комментариев
  • 2 публикации
 
  • 0
Тогда понятно. Значит я на асм пишу многозадачные программы, без всякой оси. Приятно. Даже не знал

<
  • Гражданин
3 ноября 2014 02:11

Игорь Рогов / AudioKiller

Цитата
  • С нами с 10.01.2012
  • Ушёл в реал Пользователь offline
  • 293 комментария
  • 3 публикации
 
  • 0
Цитата: mazr
Значит я на асм пишу многозадачные программы, без всякой оси

Только задачи уже заранее определенные. А ОС позволяет запускать любые задачи. blum

<
  • Гражданин
3 ноября 2014 16:45

Александр / mazr

Цитата
  • С нами с 22.09.2014
  • Ушёл в реал Пользователь offline
  • 10 комментариев
  • 2 публикации
 
  • 0
Это как? На оси не надо задачи определять?

<
  • Гражданин
5 ноября 2014 18:27

Георгий / asterix_72

Цитата
  • С нами с 19.09.2008
  • Ушёл в реал Пользователь offline
  • 32 комментария
  • 1 публикация
 
  • 0
Игорь, наверно имел ввиду, что их можно в любое время подгрузить задачу, с карты памяти например. Но во freeRTOS, на сколько я понял, задачи надо явно указывать, перед компиляцией.

Добавление комментария


Налетай! Паяльники, станции, жала с доставкой
  • smilelolbyewinkyahoocoollaughing
    crazybadcryingsadirefulsickstraight
    ballooncakegooddrinksmailbombsun
    nightrainstarscolddashguitar-manhandshake
    musicnegativenopardonshoksleepunknown
    wackoyawnblushbullyhashsmokingwhew
Скопируйте текст вашего комментария на случай неверного ответа на контрольный вопрос.