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

 
 
 

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

30.10.14   sergey_esp   19 804   18  

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. Эффект такой же.
Видео в низком разрешении, извините, но суть понятна.


Файлы

Файловый сервис недоступен. Зарегистрируйтесь или авторизуйтесь на сайте.



Ссылки

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

Спасибо за внимание!

Камрад, рассмотри датагорские рекомендации

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

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

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

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

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

Читательское голосование

Нравится

Статью одобрили 38 читателей.

Для участия в голосовании зарегистрируйтесь и войдите на сайт с вашими логином и паролем.
 

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

 

 

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

 

Схема на Датагоре. Новая статья Подарок ко Дню влюблённых на МК MSP430G2452 от Ti. Launchpad в действии... Каждый, кто брался за изучение программирования микроконтроллеров, обычно начинает свой путь с...
Схема на Датагоре. Новая статья Применение микроконтроллеров в звуковой технике. С. Р. Баширов, А. С. Баширов, Р. И. Авилов.... Применение микроконтроллеров в звуковой технике. С. Р. Баширов, А. С. Баширов, Р. И. Авилов....
Схема на Датагоре. Новая статья Микроконтроллеры AVR в радиолюбительской практике. А. В. Белов... А. В. Белов Микроконтроллеры AVR в радиолюбительской практике Данная книга представляет собой...
Схема на Датагоре. Новая статья Программирование микроконтроллеров в AtmelStudio 6. Часть 1. Первые шаги... Современное радиолюбительство невозможно представить без микроконтроллеров, и это очевидно. В...
Схема на Датагоре. Новая статья Грызем микроконтроллеры. Урок 1.... Эту статью (а точнее цикл статей…) я решил полностью посвятить микроконтроллерам фирмы Atmel....
Схема на Датагоре. Новая статья Проект DMX512. Микроконтроллер управляет профессиональным шоу. Ч.2... Мой первый готовый проект DMX512 на 60 каналов. Нечто подобное можно найти в инете, но часто это...
Схема на Датагоре. Новая статья Как делают динамики?... Вы знаете, как делают динамики? Вот и я не знал. Но недавно мне прислали видео канала Discovery....
Схема на Датагоре. Новая статья Аудио ЦАП DAC. Поделки начинающего цапостроителя. Часть 3. PCM1796, DIR9001, PCM2704, ADM485... РСМ1796 - что это за зверь и с чем ее едят. Покорение новых горизонтов Иногда наступает момент,...
Схема на Датагоре. Новая статья Програмирование в AVR Studio 5 с самого начала. Часть 1... Каждый человек, который только начинает осваивать программирование микроконтроллеров, да и вообще...
Схема на Датагоре. Новая статья «Часы-пропеллер» с эффектом стробоскопа на PIC16F84A. LED POV Clock... Много диковинных электронных проектов можно найти на просторах Интернета, что и не даёт пытливому...
Схема на Датагоре. Новая статья Вариант подключения датчиков и темброблок для гитары Gibson Les Paul и подобных... Доброго времени суток, коллеги! Это моя первая статья, поэтому прошу строго не судить. Разумная...
Схема на Датагоре. Новая статья Силовая электроника. От простого к сложному. Семенов Б.Ю. 2005... Почитай, друг! Почерпнешь из этой книги что-нибудь интересное, новое, а может освежишь в памяти...
 

Общаемся по статье 💬

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

Комментарии, вопросы, ответы, дополнения, отзывы

 

Назад Вперед
<
Читатель Датагора

mazr
Александр

  • Гражданин
Комментарий # 17 от 03-11-14, 16:45.
  • С нами с 22.09.2014
  • 10 комментариев
  • 2 публикации
 
Это как? На оси не надо задачи определять?

<
Читатель Датагора

asterix_72
Георгий

  • Гражданин
Комментарий # 18 от 05-11-14, 18:27.
  • С нами с 19.09.2008
  • 31 комментарий
  • 1 публикация
 
Игорь, наверно имел ввиду, что их можно в любое время подгрузить задачу, с карты памяти например. Но во freeRTOS, на сколько я понял, задачи надо явно указывать, перед компиляцией.

Назад Вперед
Информация
Вы не можете участвовать в комментировании. Вероятные причины:
— Администратор остановил комментирование этой статьи.
— Вы не авторизовались на сайте. Войдите с паролем.
— Вы не зарегистрированы у нас. Зарегистрируйтесь.
— Вы зарегистрированы, но имеете низкий уровень доступа. Получите полный доступ.