Лучшее время для изучения микроконтроллеров

image
Признайтесь, как часто вы думали о том, чтоб освоить азы программирования микроконтроллеров? Наверняка у вас есть в голове несколько идей потенциальных проектов, но воплощать их в жизнь вы так и не взялись. Так вот: лучше времени для старта, чем сейчас просто не найти.

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

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

Не смотря на то, что писать на asm’е для микроконтроллеров проще, чем под x86 архитектуру, многие его боятся и это служит для них преградой на пути к встраиваемым системам. Друзья, для того, чтоб сейчас запустить микроконтроллер, не обязательно, даже, досконально читать даташиты, не говоря уже о том, чтоб знать его инструкции. Конечно, если это – ваша профессия, то тут уровень погружения гораздо выше, но, скажите мне, как часто вы, вне зависимости от того, профессионалом в каком деле вы являетесь, при создании продуктов стараетесь не нарушать принципа инкапсуляции до последнего и нет нет да и заглядываете в исходники используемых библиотек? Сейчас вы поймёте, что я имею в виду.

Я смутно помню те времена, когда я не программировал микроконтроллеры. Я начинал писать на asm’е, не только потому, что это делали все, но и потому, что нормальных инструментов практически не было. Популярность 8-битных контроллеров от AVR я объясняю тем, что для них создавались очень простые в использовании библиотеки, позволяющие создать новый проект, написать десяток строчек кода и получить вполне себе рабочую программу (адреса регистров периферийных устройств и векторы прерываний любезно заполнены создателями библиотек). Я не проводил исследования, это из моих личных воспоминаний — я уверен, что более толковые библиотеки для других контроллеров существовали ещё раньше, но тогда мы об этом не знали.

Первый действительно массовый 32-битный микроконтроллер создала французская контора STM. Именно в тот момент многие любители познакомились с архитектурой Cortex-M3 и начали её широко использовать. Помню, мне одновременно в руки попало 2 контроллера – STM32F103 и LPC1768. Мне надо было как можно быстрее сделать прототип устройства на одном из них. Естественно, мой выбор пал на первый: французы выпустили библиотеку для периферии под названием Standard Peripherals Library и всё, что мне оставалось сделать – это запустить FreeRTOS, подключить необходимую периферию и на основе созданного скелета собирать проект уже на следующем уровне абстракции, не отвлекаясь больше на работу с регистрами. Скелет я использовал и в дальнейшем, часто перегибая и засовывая 32-х битный Cortex туда, где хватило бы и самой маленькой ATtiny, но чаще всего цена позволяла (а там, где не позволяла, либо нужно было пониженное энергопотребление, можно было использовать дешёвые MSP430 и STM8, но случалось это редко).

Конечно, я слукавлю, если скажу, что мне так и не пришлось выучить полностью архитектуру Cortex-M3 и скурить даташит F103 – конечно же, пришлось и тут моё увлечение библиотекой CMSIS и StdPeriph_Lib мне скорее помешало, чем помогло, но скорость вхождения в новое для меня семейство поразила и уже тогда я понял, что мир контроллеров меняется и становится одновременно и проще и сложнее.

И вот мы плавно подобрались к тому, о чём я и хотел вам рассказать. Дело в том, что популярность всяких Arduino сборок долго не давала покоя ребятам из Texas Instruments. Они выпускали лаунчпады на основе MSP430 и продавали их дешевле себестоимости и бесплатной доставкой, они запускали сообщество, в котором можно было выкладывать свои проекты, они создавали Energia – форк Arduino, они выпускали лаунчпады Stellaris, а затем переименовывали их в Tiva C (хотя тут речь идёт о более глобальном ребрендинге и добавлении некоторых новых функций, суть не поменялась). О последнем я и хочу поговорить.

Купить лаунчпад EK-TM4C123GXL можно за 12.99$ вместе с доставкой FedEx (то есть получите вы его достаточно скоро). Плата не изобилует различной электроникой, как, например, Discovery F4 (на борту которой находятся акселерометр, звуковой сенсор, ЦАП, куча светодиодов) – всё, что вы найдёте на Tiva C Launchpad – это RGB диод и 2 кнопки, но его сила заключается не в дополнительных устройствах на плате.

image

Сила EK-TM4C123GXL в библиотеках, доступных для скачивания с сайта TI под названием TivaWare. Дело в том, что библиотеки для своих контроллеров сейчас пишут все, но многие из них, к сожалению, качеством не особо отличаются и являются скорее традиционными примерами, чем полноценными библиотеками, которые не стыдно использовать в своих проектах (для упомянутого чуть выше LPC1768, NXP написали свою библиотеку почти одновременно с STM, но качеством она тогда не особо отличалась). Библиотека для Tiva C удивляет своей стандартизированностью, документированностью и многообразием.

Чуть позже я предложу вам скачать TivaWare и, если вам не будет лень, то после установки вы сможете наблюдать следующие каталоги:
  • Driverlib – тут находятся непосредственно драйверы для периферийных устройств, таких как adc, gpio и так далее (в том числе и заголовочный файл с макросами для вызова функций из rom – об этом далее)
  • Examples – ну тут, понятно, примеры. Делятся на boards, peripherals и project. В первой, естественно, проекты для конкретных отладочных плат, во второй примеры использования периферийных устройств и в третьей пример чистого проекта для различных сред разработки (IAR, Keil, CCS) – файлы доступны под лицензией BSD.
  • Inc – различные заголовочные файлы с макросами, в том числе и файл tm4c123gh6pm, который пригодится нам для создания простейшего проекта
  • Docs – вот это отличительная черта TI — простая и понятная документация. Внутри находятся несколько User Guide, относящиеся к описанным тут компонентам – DriverLib, Examples, Bootloader, IQmath и так далее, а так-же юзергайд непосредственно к используемому нами лаунчпаду.
  • Sensorlib – вот это то, что меня действительно удивило: тут находятся драйвера для различных сенсоров сторонних производителей, таких как sht21, lsm303d, MPU6050 и так далее. Я люблю использовать последний (это такая MEMS сборка из акселерометров и гироскопов на одном кристале) и раньше я всегда подключал выдранную из примеров Invensense либу, так что весьма аккуратно написанные исходники от TI меня прям порадовали (кроме того, тут же я нашёл сырцы для работы с квантерионами).
  • IQmath – библиотека алгоритмов, оптимизированных для работы с числами с плавающей запятой на Stellaris (Tiva C) устройствах.
  • Utils – часто используемые утилиты, для работы с командной строкой, последовательным портом, планировщик и многое другое.
  • Оставшиеся каталоги содержат bootloader, сырцы сторонних производителей (FreeRTOS, например), библиотеку для работы с USB, драйвера для Windows и так далее.

Для того, чтоб запустить любой пример на вашем лаунчпаде, достаточно открыть проект из папки examples/boards/ ek-tm4c123gxl в вашей любимой IDE – там всё уже готово (я использую IAR, по этому я открыл ek-tm4c123gxl.eww и он мне загрузил уже настроенный workspace ). Но, знаете, такие настроенные примеры есть сейчас почти у каждого микроконтроллера, а настоящие трудности начинаются, когда мы пытаемся создать что-то своё.

Ок, давайте откажемся не только от примеров но и от настроенного скелета проекта – запустим всё с нуля (естественно с использованием файл из библиотек). Сразу дисклеймер: работать с лаунчпадом я начал только сегодня, так что я пока не знаю почти ничего ни о нём, ни об исходниках с которыми я буду работать. Это и есть основной лейтмотив всей статьи – человек видит Tiva C первый раз и сразу пытается работать с ней.

Я хотел написать сразу какое-нибудь сложное и интересное приложение, но потом понял, что это займёт некоторое время, а публиковать статью надо срочно и, поэтому я решил сделать простенький пример, а потом, если будут желающие, мы сделаем что-нибудь поинтереснее.

Итак, первое, что нам нужно — это скачать и установить библиотеку (если вы не сделали этого до сих пор). Кроме этого, вам необходимо установить IDE и флэшер.

Где качать?
Скачать можно по этой ссылке.Если трафик позволяет — качайте DK-TM4C123G Kit Full Installer — он содержит библиотеку TivaWare, документацию и инсталяторы IDE (около 3.5Gb).
IDE и Flash Programmer находятся в папке Tools.
Если нет — можете скачать отдельно TivaWare for Tiva C Series, LM Flash Programmer и IDE.


В качестве IDE я буду использовать IAR (следовательно и примеры будут с ним), однако вы можете использовать любую из поддерживаемых.

Кто не знает, у IAR есть 2 варианта бесплатного использования — с ограничением по времени и с ограничением по размеру кода. И, естественно, есть другие варианты, если вам не подходят эти 2 (сами знаете какие). Описывать процедуру установки и регистрации IAR я не буду — там всё просто, но, если у вас возникнут трудности — не стесняйтесь задавать вопросы в комментариях.

Итак, первым делом создадим новый проект. В свойствах проекта изменим некоторые настройки.

Настройки проекта
Настроек, на самом деле, не так много. Откроем опции проекта и выберем правильный камень. На вкладе General Options -> Target.

image

В C/C++ Compiler, на вкладке Preprocessor укажем путь к папке TivaWare. На этой же вкладке чуть позже мы добавим некоторые константы.

image

В Debugger выберем TI Stellaris.

image

Более детальные настройки (если нужно), можно посомотреть в примерах (например там используется другой файл конфигурации линковщика, не тот, что предложен IAR'ом).


Теперь нам необходимо настроить структуру проекта. Я предлагаю придерживаться структуры, предложенной TI (как в примерах), но с некоторыми отличиями.

В папке (на самом деле «в группе», но папки — както привычнее) Src у нас располагаются наши исходники. В примерах туда добавляют и исходники библиотечных файлов, но я считаю, что это только запутает проект.

В папке Library хранятся файлы из DriverLib. TI добавляют туда уже скомпилированный файл (в случае с IAR это файл driverlib/ewarm/Exe/driverlib.a), вы можете сделать так же, но я бы предложил добавлять вместо этого исходники, причём только в случае необходимости — так проще запомнить где что находится, да и смотреть исходный код полезно. Если вы планируете добавлять в эту же папку файлы из других библиотек (Utils, например), то лучше создать ещё один уровень иерархии.

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

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

Итак, в папке Src создадим файл main.c

В папку Library добавим startup_ewarm.c — он нужен для правильной инициализации вектора прерываний. Взять можете его из project_0 (это в examples) проекта, например.

Начнём нашу программу с функции main. Так как к порту F нашего лаунчпада подключен RGB светодиод, то им мы и поморгаем.

void main(void)
{
    volatile uint32_t ui32Counter;
  
    //Инициализация периферии

    while(1)
    {

        //Тут код для переключения пинов

        for(ui32Counter = 0; ui32Counter < 1000000; ui32Counter++)
        {
        }

        //Тут код для переключения пинов

        for(ui32Counter = 0; ui32Counter < 1000000; ui32Counter++)
        {
        }
    }
}


Думаю всё понятно: использовать типы вроде uint32_t — хорошая привычка, это помогает решить неоднозначность с размерами переменных на различных контроллерах (кроме того, это соответствует стандартам MISRA-C); volatile — сообщает компилятору, что эту переменную не стоит оптимизировать (потому-что мы её будем использовать для, в общем-то, бесполезной операции). Дальше — беконечный цикл (как учат студентов — программа на микроконтроллерах не должна никогда кончаться) и 2 счётчика для задержек.
Чтоб этот код компилировался, добавим в начало файла.

#include <stdint.h>


Теперь мы приступим непосредственно к миганию светодиодами.

Скачиваем со стрницы лаунчпада файл Tiva C Series TM4C123G LaunchPad Evaluation Kit User's Manual и читаем в разделе User Switches and RGB User LED о том, что диод подключен к пинам PF1 (red), PF2 (blue) и PF3 (green).
Теперь открываем SW-TM4C-DRL-UG (в папке docs TivaWare) и просматриваем раздел GPIO. Из введения мы понимаем, что сперва пины должны быть сконфигурированны (конфигураций, естественно, множество) на выход. Тут же читаем, что одни из самых полезный функций — GPIOPinRead() и GPIOPinWrite(). Что они делают — понятно, осталось глянуть в их описание для уточнения списка параметров. Тут же находим, что для регистрации пинов на вывод используется функция GPIOPinTypeGPIOOutput(). Итак, меняем комментарии, в нашем коде на:

GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2);  //для инициализации 
//и
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);
//и
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF);


Для включения и выключения диодов.

Естественно, не забываем добавить файл driverlib/gpio.c в папку Library, а так же

#include "driverlib/gpio.h" 

в заголовки.

Кроме того, уже в процессе компиляци замечаем, что необходимо добавить ещё 2 заголовочных файла:
#include <stdbool.h> // Для поддержки типа bool, который используется в gpio
#include "inc/hw_memmap.h" //Для поддержки деклараций пинов.


Теперь наша программа выглядит вот так:
#include <stdint.h>
#include <stdbool.h>
#include "driverlib/gpio.h"
#include "inc/hw_memmap.h"


void main(void)
{
    volatile uint32_t ui32Counter;
  
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1);

    while(1)
    {

        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF);
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0);

        for(ui32Counter = 0; ui32Counter < 2000000; ui32Counter++)
        {
        }


        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0);
        GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, 0xFF);

        for(ui32Counter = 0; ui32Counter < 2000000; ui32Counter++)
        {
        }
    }
}


И, если вы её скомпилируете и запустите — сможете наблюдать поочерёдную смену цвета диода.

Но моргание светодиодом — слишком просто для нас. Давайте пойдём чуть дальше и добавим поддержку порта ввода-вывода.
Действия — все те же. Находим к каким портам подключен UART, читаем про конфигурацию модуля в UserGuide, конфигурируем, используем функции для записи в и чтения из uart.

Моя функция инициализации uart получилась похожа на функцию из примера, но с одним интересным отличием. Вот так выглядит инициализация из примера:

void ConfigureUART(void)
{
    //
    // Enable the GPIO Peripheral used by the UART.
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);

    //
    // Enable UART0
    //
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

    //
    // Configure GPIO Pins for UART mode.
    //
    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    //
    // Use the internal 16MHz oscillator as the UART clock source.
    //
    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

    //
    // Initialize the UART for console I/O.
    //
    UARTStdioConfig(0, 115200, 16000000);
}


Как видите, тут используются странные функции с префиксом ROM_ — это специальные функции, которые уже сохранены в ROM'е микроконтроллера лаунчпада. Прочитать о них можно в всё том же UserGuide для DRL. Созданны они для того, чтоб уменьшить размер кода в Flash памяти. Нужно оно вам или нет — решать вам, мне идея понравилась (раз уж я всё-равно использую Peripheral Driver Library). Кстати, если вы не знаете, будет код использвоаться на устройстве с кусками библиотеки в ROM или нет — вы можете использовать Mapped ROM Calls. Тогда будет использоваться код из ROM, если он есть и компилироваться, если его нет.

Для работы с ROM необходимо настроить несколько констант: в опциях проекта, в C/C++ Compiler, на вкладке Preprocessor добавить константу TARGET_IS_BLIZZARD_RB1 в поле Defined Symbols. Туда же сразу добавьте PART_TM4C123GH6PM и ewarm — они нужны для успешной компиляции фалов библиотеки.

Скрин
image


Кроме того, необходимо добавить в дерево проекта недостающие файлы:

image

Итак, всё, что нам осталось, это вывести что-то в порт (можете использовать для чтения любой эмулатор терминала. Например, для Windows я использовал Real Term). Затем, я предлагаю считать букву из порта, проверить, принадлежит ли она к одному из цветов (r, g, b) и поменять состояние соответствующего пина.

Функция для инициализации UART у вас уже есть. Изменяем инициализацию портов, чтоб добавить третий пин (раньше мы настроили только 2 на выход). Вывести строку в терминал можно с помощью функции UARTprintf(); из библиотеки utils/uartstdio.c (естественно, этот необходимо добавить к проекту и подключить заголовчный файл).

Считываем символ функцией UARTCharGet(). Она входит в цикл до тех пор, пока в уарт не придёт символ. После этого совершаем действия над пинами и возвращаемся в начало цикла.

#include <stdint.h>
#include <stdbool.h>
#include "inc/hw_memmap.h"
#include "inc/hw_types.h"
#include "driverlib/gpio.h"
#include "driverlib/rom.h"
#include "driverlib/sysctl.h"
#include "driverlib/uart.h"
#include "driverlib/pin_map.h"
#include "utils/uartstdio.h"

void ConfigureUART(void)
{
    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_GPIOA);


    ROM_SysCtlPeripheralEnable(SYSCTL_PERIPH_UART0);

    ROM_GPIOPinConfigure(GPIO_PA0_U0RX);
    ROM_GPIOPinConfigure(GPIO_PA1_U0TX);
    ROM_GPIOPinTypeUART(GPIO_PORTA_BASE, GPIO_PIN_0 | GPIO_PIN_1);

    UARTClockSourceSet(UART0_BASE, UART_CLOCK_PIOSC);

    UARTStdioConfig(0, 115200, 16000000);
}

void main(void)
{
    volatile uint32_t ui32Loop;
    uint32_t ui32Color;
    uint8_t ui8Red = 0xFF;
    uint8_t ui8Green = 0xFF;
    uint8_t ui8Blue = 0xFF;
    
    GPIOPinTypeGPIOOutput(GPIO_PORTF_BASE, GPIO_PIN_1|GPIO_PIN_2|GPIO_PIN_3);
    
    ConfigureUART();

    UARTprintf("Hello HabraHabr!\n");
    
    while (1) 
    {
    UARTprintf("Please, enter color(r,g,b) \n");
    
    ui32Color = UARTCharGet(UART0_BASE);
    switch (ui32Color)
        {
        case 'r': 
            GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, ui8Red);
            ui8Red = ~ui8Red;
            break;
        case 'b': 
            GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_2, ui8Blue);
            ui8Blue = ~ui8Blue;
            break;
        case 'g': 
            GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_3, ui8Green);
            ui8Green = ~ui8Green;
            break;
        default:
            UARTprintf("Incorrect color! \n");
            break;
        }
    }
}


В TivaWare я нашёл интересную либу – utils/cmdline. Она позволяет создавать и обрабатывать команды введённые из командной строки. Я хотел сделать интересный проект с использованием её и ещё нескольких интересных библиотек, но время поджимает, так что я могу написать об этом позже, если будет интерес (а так же о прерываниях, которые тут даже не упомянуты и о FreeRTOS).
Ну, а теперь о том, почему я несколько раз написал о том, что время поджимает и почему из всех благоприятных времён для начала изучений контроллеров сейчас самое благоприятное: 22 января на edX стартуют курсы Embedded Systems — Shape The World.



Регистрация бесплатная, но, если вы хотите получить сретификат, то необходимо заплатить взнос (минимум 50$). Лично я заплатил 50$ — не из-за сертификата, а просто из любви к подобным курсам и в их поддержку.

Для участия вам надо купить Tiva C лаунчпад и различную рассыпуху. Последнюю вы можете купить на любом радиорынке, а вот с лаунчпадом придётся поторопиться: TI обычно отправляют через FedEx, но это может занять до 10 дней, в то время, как до начала курса осталась неделя.

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

Итак, немного выводов. Использование подобных библиотек – палка о двух концах. С одной стороны она упрощает разработку, понижает порог входа, с другой стороны создаёт уровень абстракции, который усложняет понимание основ (во всей статье нет ни одной отсылки к даташиту, и это – неправильно: даташит надо смотреть всегда и это является обязательным условием певращения из любителя в профессионала). Но у подобных библиотек в отличии от ардуино (кстати, Energia поддерживает описанный лаунчпад), есть одно преимущество: они не создают у вас ложного понимания реальности. Если вы используете библиотеку, вы понимаете, что за абстракцией кроется вполне реальное устройство и параллели между функциями и реальными регистрами проследить совсем не сложно.

Я надеюсь, что данный материал подтолкнёт вас к покупке и изучению (пусть и столь поверхностному) этого замечательного устройства. Если у вас есть идеи проектов, которые вы могли бы реализовать на TM4C123G, но возникли сложности в реализации – не стесняйтесь писать об этом в комментариях: будем разбираться вместе.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 77

    +4
    Сколько получился размер скомпилированного бинарника для мигания светодиодом?
      0
      При использовании библиотек это как правило не показатель, тк первый драйвер подтягивает много кода, но второй уже почти ничего.

      В данном же случае библиотека занимает 0КБ памяти, тк находится а ROM(не флеш, а не стираемая память).
      +3
      За статью спасибо, осознанно почитаю позже, уже в избранном.
      А пока спешу поделиться ссылкой на обучаюший курс EDX. Eng, starts 22.01.2014
        +2
        Прошу простить, не дочитал до конца пост… эта ссылка там уже есть.
          0
          Спасибо. Статью просматривал бегло, ссылку заметил только в комментарии.
            0
            Да, я тоже подумал, что ссылку на курс EDX стоит вынести в первый абзац.
        0
        А как обстоят дела с доступностью микроконтроллеров TI в России? Те же STM достаточно легко купить и цена вполне демократична. У TI в радиомагазинах видел только LaunchPad'ы
          0
          А вам какие партии нужны? Если штучно — то чем вам лаунчпады не подходят (или бесплатные сэмплы TI — если обосновать зачем вам это нужно — присылают тоже FedEx'ом без проблем). Если же даже мелкосерийное производство, то о каких радиомагазинах может идти речь?
          UPD: например, описанный мною лаунчпад можно расковырять и получить 2 TM4C123GH6PMI по цене 6.5$ за штуку (или дешевле, ведь у вас остаётся плата с всякой мелочью). Вы по чём в магазине STM32 купите?
            +1
            ну, смотря какие STM32…
            кажется и по 40руб за штуку есть…
              0
              Даже по 8 бывают
              0
              бесплатные сэмплы TI — если обосновать зачем вам это нужно — присылают тоже FedEx'ом без проблем
              Частным лицам — не посылают, например.
                0
                6.5 долларов это весьма немало, за эти деньги можно купить уже ДСПшные СТМки (из F4xx серии, такой, например стоит 228р, 6.8 доллара).
                А мелкие СТМки из F10x серии продавались по 29 рублей.
                  0
                  Ссылка не прикрепилась.
                  Вот такой стоит 228 рублей.
              +1
              Интересная статья, спасибо. Было бы интересно почитать, как запускается и как работает freeRTOS.
              ПС Кажется у вас в последнем примере в суперцикле не хватает getchar из UART.
                0
                Простите мне мою невнимательность, исправил. Спасибо!
                0
                Давно хотел попробовать что-то кроме stm32, теперь после вашего поста с обещанием хорошей библиотеки, пожалуй, закажу себе и эту платку! У TI же есть еще целая серия каскадируемых плат для ланчпадов с разным функционалом, так что можно довесить если понадобится периферия, интерфейсы.
                  0
                  Да, для тех, кто не в курсе — вот ссылка. Но цена на них, в отличии от лаунчпадов, совсем не демократична, так что стоит выбирать аккуратно, чтоб не переплачивать только за совместимость с TI.
                  +5
                  К слову об AVR, да и других. Есть ли места, где хранятся проверенные качественные библиотеки на все случаи жизни?
                    +2
                    Первый раз услышал что кто-то помянул даташиты Ti добрым словом))) Вопрос автору, не заглядывали в исходники библиотек, драйверов? Работаю с процами постарше (Omap L138), так в примерах от Ti ошибок немерено, код индуский и не оптимизирован. Но сам проц неплох.
                      +1
                      Прошиваете по USB или программатором?
                        +1
                        Этот Launchpad прошивается по USB (т.к. программатор встроен в саму плату)
                      • UFO just landed and posted this here
                          +2
                          Поэтому и продаются «switcher shield» по 150р за штуку, когда аналогичное изделие можно собрать на коленке за вечер паяльника забесплатно из раздолбанных CD-приводов и прочей радости.
                            –2
                            бесплатно — вечер с паяльником и вы получаете шилд за 150р
                            или 150р и вечер воплощения и вы получаете готовый результат.
                            • UFO just landed and posted this here
                                0
                                Разумеется. От половины шилдов и я сам бы не отказался.
                                Я про примитивные шилды вроде переключателей, лампочек и прочей ереси.
                              +1
                              Эх, а вот мне наоборот…

                              Железная реализация проекта — это пару десятков стандартных паттернов работы с устройствами плюс пара книжек как защититься от помех. Ну и простейшее понимание физики, конечно. Современная электроника уже так далеко продвинулась, что можно смело предполагать, что для 95% ситуаций решение уже есть. Плюс, реализации допускают некую вариативность в зависимости от условий эксплуатации и граничных условий цепи. Например, при работе микроконтроллера от свинцового аккумулятора, можно избавиться от обвеса линейного стабилизатора, использовать его в одиночку. Но этот же девайс, питаемый от бортовой сети авто, потребует диод-конденсатор для защиты от провалов, супрессор для защиты от скачков, может даже дроссель, если будет какой мешающий шум, предохранитель и диод в обратном включении, если не уверены в квалификации того, кто будет подключать питание. А если есть осциллограф в хозяйстве — то проблемы почти полностью пропадают.

                              А вот переключить свой мозг, за 7 лет привыкший к линейной работе веб-приложений в новую область с таймерами, прерываниями, регистрами и ограниченными возможностями железа — мне оказалось сложновато. Дело идет, но с невероятным скрипом. Привычки ломаются тяжело, знаете ли.
                              • UFO just landed and posted this here
                                  0
                                  Как это не линейно? Запрос-действие-ответ-конец. Вы не сможете ждать действия пользователя во время загрузки страницы (вебсокитс не рассматриваем пока).

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

                                  Добавлю так же, что работа МК основана на жестких таймигах, с точностью до микросекунд, тогда как в веб приложении секунда туда-сюда — не существенна. Да и вобще в разумных пределах на время работы скрипта и отдельных его кусков никто не смотрит.

                                  В общем, для меня МК это совершенно другая планета =)
                                  • UFO just landed and posted this here
                                    • UFO just landed and posted this here
                                        +1
                                        Т. е. предыдущими двумя комментариями вы пытаетесь передергивая, додумывая за меня и развешивая ярлыки, рассказать, что на самом то деле, _мне_ легче программировать контроллеры, чем писать веб приложения, но я этого еще не осознал? Сравнивать разработку на МК с разработкой высоконагруженных сайтов… это где-то за гранью добра и зла.

                                        Простите, я не буду продолжать дискуссию в таком ключе. Советую вам попробовать поставить RTOS на Тини13, основной микроконтроллер, с которым я работаю. Думаю, многие ваши ответы поменяют вектор после этого.
                                        • UFO just landed and posted this here
                                            0
                                            Вы меня с автором статьи не путаете?
                                            • UFO just landed and posted this here
                                                +1
                                                21 век не причина, простите, тянуть .NET фреймверк для формы с 1 кнопочкой, или Spring для Hello Word на Java, или jQuery для изменения цвета текста в одном абзаце, и, продолжая, RTOS на Tiny для моргания светодиодом. Так сейчас модно, к сожалению.

                                                ...
                                                А потом мы покупаем смартфоны с пучком ядер по 2 ггц с 2 гб ОЗУ чтобы анимашки в менюшках не тормозили.
                                                • UFO just landed and posted this here
                                                  • UFO just landed and posted this here
                                –4
                                Заголовок статьи «Лучшее время для изучения микроконтроллеров...» почему-то захотелось продолжить словами "… уже лет 10 как прошло", да простят меня за пессимизм. С каждым годом программирование микроконтроллеров все больше вытесняется доступными, быстрами и миниатюрными компонентами с встроенными линуксоподобными операционками, оставляя микроконтроллерам все уменьшающуюся специализированную.нишу.
                                  +2
                                  Вы сильно заглядываете в будущее, или не видите ниши микроконтроллеров. У меня на мотоцикле реле поворотов работает на тиньке, плюс реализует некоторые дополнительные сервисные функции. Предлагаете туда ставить линукс-девайс?
                                    0
                                    А на Москвиче оно было электромеханическим и сервисных функций нужно не было :) Шутка.

                                    Если появится подобный контроллер за 2-3 бакса, будем писать моргание светодиодом на никсе, куда мы денемся.

                                    Я сам вполне охотно вожусь с контроллерами, я не против них ни в коем разе. Но что-то мне подсказывает, что в ближайшие пару-тройку лет как минимум 8-битные МК потихоньку уйдут, вытеснятся дешевыми 32-битными кристаллами, а там по закону Мура и ширпотребный SoC не за горами. Для массовых некритичных и не-real-time-зависимых приложений, с низким порогом вхождения.
                                      +1
                                      И все-таки поспорю.

                                      Даже если появятся линуксо-могущие устройства за 3 бакса, все равно, громадная часть проектов (я не говорю про самоделки) будет делаться на обычных, «стандартных» микроконтроллерах. Плюсы очевидны, надеюсь. Это и энергопотребление, и надежность, и цена (да да, если SoCи будут по 3 бакса, почем тогда будут восьминогие МК?).

                                      Другое дело, что архитектура может развиваться и не удивлюсь, если через пару лет Тини5 будут 32-х разрядными со 128 кб оперативки и всеми возможными протоколами сразу на борту, дабы запрограммировав 5 строчек, можно было моргать диодом по USB.
                                        0
                                        Подтянется поколение, взращенное на отсутствии экономии ресурсов — и будут линуксомигалки. Примерно как если сейчас говорить про мигалки и прелагать 555. Несмотря на цену в 2-3 цента за чип с обвязкой, народ предпочитает 90-центовую тиньку. Уже привычнее.

                                        Предлагаю встретиться тут через 5 лет и посмотреть, кто был ближе к реальности :)
                                          +3
                                          Надеюсь только, что поколение бизнесменов, взращенное на отсутствии экономии ресурсов не подтянется =) В партии 1000 устройств, разница между 90-центовой тинькой и 15-центовой 555-ткой вытекает в 750 баксов. Это уже деньги, которые можно заплатить разработчику за переделку с тиньки на 555-ку, и на второй тысячи устройств и поиметь профит 750 баксов сверху. Так что рано, рано хороните.

                                          Хотя тот факт, что тенденция присутствует, нужно признать =(
                                            0
                                            Тенденция присутствует в следствии колоссального удешевления программируемых решений, которые позволяют получить гибкость в отличии от жёсткой логики. Так что смайлик скорее должен быть =)
                                          0
                                          Согласен с вами, и дело даже не в стоимости, дело в обычной избыточности, для того что бы помигать светодиодом, покрутить затворку, и т.д. ОС не нужна совсем. Более того внесение большого количества слоёв абстракции тут не просто лишнее, а снижающее надёжность решение.
                                      +2
                                      Не надо, пожалуйста, начинать этот холивар. В любое теме про контроллеры находится человек, который просвятит ребят, скажет, что «микроконтроллерам хана» и т.д. Но этого (ханы) не происходит уже очень много времени (да примерно ваши 10 лет и прошло с тех пор как начались эти холивары), а микроконтроллеры всё ещё не умерли и, более того, их произвдители вкладывают новые ресурсы в их разработку, комании, занимающиеся встраиваемыми системами процветают и узкоспециализированных ибмеддеров всё больше.
                                        0
                                        Я обидел, прокоментировав название статьи? Прошу прощения.

                                        Но давайте будет честны хотя бы перед самими собой. Почему для изучения микроконтроллеров в этой статье мы взяли 32-битный Cortex с 80 мегагерцами и FPU на борту? Где были такие «микроконтроллеры» 10 лет назад? Они вообще все еще «микро-», эти ваши контроллеры?
                                        20 лет назад мой первый IBM PC был на порядок медленнее.

                                        Микроконтроллеры не умирают. Они растут.
                                          0
                                          Вам не за что извиняться, это ваша точка зрения.
                                            +3
                                            Что-б вы лучше поняли, о чём я говорю: один раз, в раннем студенчестве, я собрал устройство на микроконтроллере и написал для него программу на C. Моего товарища (у него тогда был огромный бэкграунд и он работал в НИИ) заинтересовала реализация алгоритма и я решил показать ему код. Его презрение, выраженное в виде разочарованного «не на asm'е?», я помню и сейчас. Сегодня на asm'е пишут либо энтузиасты, либо в достаточно уже редких случаях необходимости.
                                            Я легко отказался от asm'а (в отличии от моего товарища, для которого сравнение его машинного кода и кода из компилятора было сродни проигрышу компьютеру в шахматы), я смирился с тем, что готовые либы могут работать также продуктивно, как и написанные самостоятельно, я с удовольствием смотрю на всё новое и в будущее.
                                            Но я в корне не согласен со всеми, кто говорит, что будущее микроконтроллеров — это линукс, а мощные Allwinner'ы собранные китайцами в свистки — их убийцы. Пока всё будет так как есть, а куда это разовьётся в будущем — мы узнаем позже, но иксам с микроконтроллерами точно не по пути.
                                              0
                                              Да все просто. У микроконтроллеров есть своя ниша, у аллвинеровых свистков — своя. МК-шки останутся или для низкого уровня, или для мелочей. А вот развесистые тачскриновые менюхи с цветными экранами, которые раньше долго и нудно писались с помощью тонн специфических библиотек и ветвистых алгоритмов, могут быть запущены и на «свистках», где им самое место. Война не нужна.

                                              И да, полностью согласен с оратором ниже. Где нужна надежность, устойчивость, низкое потребление, работа с железом или протоколами — рулят МК. Если для себя, быстро, масштабируемо, на чем-то универсальном и хорошо изученном — то линукс-девайсы. Сейчас это — Ардуино, но на смену ей придут такие вот системы-на-чипе с линухом и пайтоном прямо на борту. Первые ласточки уже проскакивали.
                                                0
                                                Но я в корне не согласен со всеми, кто говорит, что будущее микроконтроллеров — это линукс, а мощные Allwinner'ы собранные китайцами в свистки — их убийцы.


                                                Именно так, а главное на контроллере сейчас можно собрать устройство, которое будет работать на ионисторе, и солнечной батарее, размером с монету, да при этом ещё какие нибудь данные по воздуху отправлять :) При этом оно будет очень-очень мелкое, стабильное, и работать в гораздо большем диапазоне температур.
                                                +1
                                                Но давайте будет честны хотя бы перед самими собой.

                                                Давайте лучше на секунду включим мозг.

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

                                                Поскольку ставить их — это лезть на чердак, в тесноте, темноте и пыли, то требование номер один — поставил и забыл на 10 лет.

                                                Вы бы и здесь применили «быстрый и миниатюрный компонент с встроенной линуксоподобной операционкой» т.е. «32-битный Cortex с 80 мегагерцами и FPU на борту»? А я бы обошелся самым низкопотребляемым MSP430, радиомодулем, включающимся на 10 мс раз в час, и батарейкой С2030.

                                                Примерно как если сейчас говорить про мигалки и прелагать 555. Несмотря на цену в 2-3 цента за чип с обвязкой, народ предпочитает 90-центовую тиньку. Уже привычнее.

                                                Этот «народ» лабает чисто для себя. Если делать на заказ партию из 10К штук, то такой «народ» посылается лесом.
                                            0
                                            А где вы там про 50$ вдруг? Месяц назад, там было все (и сертификат в том числе) — «free to all».
                                              0
                                              Вот ссылка. После регистрации minimum fee превращается в более конкретные 50$.
                                              +1
                                              Да, время бежит, микроконтроллерами уже считается что-то 32х битное :)
                                                0
                                                Поправьте меня, если я не прав, но в данном случае volatile ни к чему, пускай она попадет в кеш процессора, будет только быстрее, поток-то один.
                                                  0
                                                  Чтобы оптимизатор не убрал ее, значение-то не используется.
                                                    0
                                                    Ну как же, используется в цикле, ей присваивают значения.
                                                      0
                                                      Оптимизатор весь цикл выпилит, такое бывает.
                                                  +1
                                                  Заголовок, имхо, не совпадает с содержанием. Вы пишете о фазе развития контроллеров, как к ним подступиться. Но чем сегодняшний день лучше, чем 10 лет назад и чем 10 лет вперёд, так и осталось неясным.
                                                    0
                                                    Никого не хочу обидеть, просто интересно, почему именно IAR, лично у меня после работы с данной IDE остался один негатив (урезанность бесплатной версии, слабый функционал текстового редактора, отсутствие плюшек типа IntelliSence, не самые удобные средства навигации по проекту), хоть ихний компилятор считается одним из лучших.
                                                      0
                                                      Один ответ вы дали сами — компилятор. Второй — дебаггер. Мне он нравится. Единственное отвратительное место — редактор, но вместо редактора я по привычке использую Sublime Text.
                                                        0
                                                        Кстати, в курсе edX будет использоваться Keil.
                                                        0
                                                        Хотел было заплатить за курс на edX, но выяснил, что для автогрейдинга они используют библиотеку, подключаемую исключительно к Keil, а следовательно недоступную при разработке на линуксе (хотя arm-none-eabi-gcc отлично работает, и через OpenOCD можно без проблем отлаживаться).

                                                        Пока есть мысль попытаться помочь им с автогрейдером на линуксе, т.к. ведущий курса писал, что они сами-то не против, просто не смогли за разумное время реализовать подключение к контроллеру.
                                                          +1
                                                          GPIOPinWrite(GPIO_PORTF_BASE, GPIO_PIN_1, 0xFF);

                                                          а какой сермяжный смысл в выдаче 0xff на пин?

                                                          >Купить лаунчпад EK-TM4C123GXL можно за 12.99$ вместе с доставкой FedEx
                                                          это, я так понимаю, стёб такой над большинством читателей?

                                                          > for(ui32Counter = 0; ui32Counter < 1000000; ui32Counter++)
                                                          за такие задержки нужно пороть ремнём. Таймеров должно быть штуки 4 — вот ими и пользоваться нужно
                                                            +1
                                                            это, я так понимаю, стёб такой над большинством читателей?

                                                            нет, TI действительно оплачивает сама доставку FedEx — я как то считал сколько она реально стоит набралось около $120
                                                              0
                                                              просто видимо у них это PR стратения такая, такое бывает некоторые компании разрабатывают целые сервисы только для того, что бы основная продукция лучше продавалась
                                                                –1
                                                                Докуда оплачивает?
                                                                Вот, например, до города Урюпинска доставит? И как оно через нашу таможню переползёт?
                                                                  +1
                                                                  если в вашем городе есть курьерская компания которая занимается доставкой посылок FedEx (у нас например это просто какаято локальная компания не имеющая прямого отношения к ним) то доставит т.е до большинства среднего размера городов должна доехать.

                                                                  С таможней в данном случае вообще ни каких проблем не должно быть посылка стоит меньше $100, т.е она просто пройдет таможню в автоматическом режиме (да конечно с нашей таможней может быть все, что угодно, но это будет исключение из правил).

                                                                  Т.е обычно все выглядит примерно так — покупаешь и через 4-6 дней тебе приносит ее курьер предварительно позвонив (говорят что иногда бывает до 10 дней, но на моей практике было 4-5 дней, живу не в Москве и не в Питере (в Питере FedEx работатет полноценно там можно им получать посылки стоимостью до $50k, но конечно с таможней)).
                                                                    0
                                                                    хмм… Я отстал от жизни?
                                                                    Вот Статеркит www.starterkit.ru/html/index.php?name=services утверждает, что самая дешевая доставка по России из курьерских служб — Экспресс почта Курьер-Сервис-Экспресс (КСЭ), зашел на ее сайт, перешел на калькулятор — посчитал стоимость доставки 0.1 кг от Ижевска до Москвы или Московской области 650 рублей, а это уже 20$

                                                                    Да, а у FedEx-а такого калькулятора нет вроде
                                                                      +2
                                                                      FedEx гораздо дороже любой такой курьерской доставки, если хотите посмотрите на их официальном сайте www.fedex.com прайсы в pdf, но в данном случае это вас ни как не касается, по тому, что доставку на полную стоимость спонсирует TI, и доставка идет не из Москвы а напрямую из CША — вкрайне сжатые сроки ( ни с какой EMS эту скорость даже не сравнить).

                                                                      В таможенной декларации будет написанно Shipping =  $0.00 т.е будет фигурировать только стоимость товара.

                                                                      Если вы закажите в какомнибудь другом магазине с FedEx доставкой подобный товар то вы только за доставку выложите тыщи 4 рублей.
                                                                        0
                                                                        Спасибо за ответ,
                                                                        я честно говоря, не ожидал, что TI настолько готово вкладываться…
                                                                        Хотя нас это не касается, мы подсели на LPC/NPX
                                                              0
                                                              Валяется на полке MSP430 Launchpad. Поморгал диодиками и закинул, не знаю даже что с ним можно сделать. Сейчас начал AVR курить (конкретно ATTiny2313), начал немного понимать что к чему (регистры, прерывания, таймеры). Это не то, что в Energia готовые библиотеки юзать. Да еще в 2кб нужно уложиться, вот это я понимаю (пишу на Си кстати).
                                                                0
                                                                Почти та же ситуация. Купил Лончпад «шоб було», поморгал диодиками через Энергию, и как-то забросил по той простой причине, что MSP430 тяжеловато купить даже в таком продвинутом в плане радиоэлектроники городе, как Харьков. Есть пару вариантов, но в дип-корпусах — нет. Мелких — нет. Неинтересно. АВР-ок, СТМ-ок хватает, стоят копейки. По моему, Техасцам следует начать популяризацию своего контроллера с организации и наполнения диллерской сети. Чтобы как Атмел с их АВР-ом. Вышел за пивом, купил хлеба и две АТМеги на сдачу в том же ларьке. Тогда и проекты попрут. Сам по себе контроллер весьма интересный с грамотно разведенными ножками, что позволяет легко и красиво рисовать под них печатки даже односторонние.
                                                                  +1
                                                                  Если кому интересно — есть чудесная книга по MSP430, я даже думаю, что это лучшее введение в разработку MSP430: последовательное, логичное, глубокое и всестороннее одновременно. И совершенно без воды.
                                                                0
                                                                Мне вот интерестно, удалось ли кому настроить IDE для работы под Linux. Как-то пытался не удалось, уже не помню почему.
                                                                Через mspdebug все работало, но хочется все-таки все интегрировано в IDE.
                                                                Интересует msp430, tina c.

                                                                И да, как-то у меня никак не сложится с i2c — что на msp430, что на tina, что на arduino uno (правда сказать на последнем не отлаживал — собрал схему, набросал код, найденый в Интернетах, залил — ничего не заработало — отложил до лучших времен).

                                                                Only users with full accounts can post comments. Log in, please.