Программируем на С/С++ в Visual Studio под ArduinoИсточник: habrahabr
Этот пост поможет начинающим сэкономить несколько часов(дней) для настройки среды Visual Studio для разработки под Arduino на языке С/C++. Преамбула Пару месяцев назад увидел у преподавателя некую платку, подключенную к компьютеру. На платке были видны семисегментные индикаторы и несколько светодиодов. Преподаватель разбирался в каком-то коде, платка тем временем живо сигнализировала ему что-то. Меня сразу заинтересовало, чем это он там занимается… Однако, всё, что я смогу узнать у него - это то, что платку зовут отладочной. Путём недолгого гугления выхожу на игрушку под названием "Arduino". Заказываю себе Arduino mega, та что с Atmega1280 (всего $29.99) и через две недели бегу на почту получать заветную игрушку. Фабула Т.к. я являюсь заядлым Windows-разработчиком, привыкшим к среде VS, то я решил сразу отвлечься от родной среды Arduino IDE. Итак, нам понадобится: Всё гуглится на раз. Итак, приступим. Устанавливаем WinAVR, avr-libc, скачивам Avrdude. Подключаем Arduino к компьтеру и устанавливаем драйвера. Создаём "makefile project" в Visual Studio. Заполняем поля так, как на рисунке ниже. В месте, куда установился WinAVR в поддиректории sample находится Makefile, который можно использовать для сборки проекта. Копируем себе, в папку созданного makefile project, и изменяем некоторые строки: MCU = atmega1280 F_CPU = 16000000 FORMAT = ihex TARGET = ATMEGA-1280-DEV-BOARD SRC = $(TARGET).C Первая строчка обозначает тип микроконтроллера. Для Arduino mega это atmega1280; PROGRAMMER_FLAGS = -p m1280 -c arduino -b 57600 -P COM3 -U flash:w:$(TARGET).hex Эта строка будет передаваться в качестве параметров для Avrdude. Изменяем секцию all примерно так: В принципе, всё готово. Пробуем написать минимальную программу (моргалку светодиодом L). Смотрим в файлик arduino-mega-schematic.pdf и видим, что 13 порт Arduino есть ни что иное, как PB7. Пишем примерно следующую программу: #include <avr/io.h> #include <util/delay.h>
int main() { DDRB = 0xFF; while(true) { PORTB /= (1 << 7); _delay_ms(500); PORTB &= ~(1 << 7); _delay_ms(500); } return 0; }
* This source code was highlighted with Source Code Highlighter. Минимальный интерфейс для работы с портами ввода-вывода: #include "utils.h"
class Port { public: Port(PORT& p) : _p(p) {}; Port& operator! (); Port& operator+= (uint8 b); Port& operator-= (uint8 b); Port& operator= (Port& p); void SetLow(); void SetHigh(); PORT& GetValue(); bool ClearBit(uint8 b); bool SetBit(uint8 b); void Pulse(uint8 t); void PulseBit(uint8 b, uint8 t); private: PORT& _p; }; |