Пара заметок в закладки. Среда разработки MPIDE представляет собой не слишком сложный графический интерфейс к набору инструментов gcc для кросс-компиляции кода на Си для контроллера и утилите avrdude для прошивки платы через виртуальный ком-порт через шнур USB без специального аппаратного программатора.
Компилятор gcc и сопутствующие инструменты внутри архива с mpide (в редакции для плат ChipKIT с контроллером pic32) лежат в каталоге mpide-0023-windows-20130715/hardware/pic32/compiler/pic32-tools\bin (pic32-gcc, pic32-g++, pic32-ar, pic32-ld и т.п).
Avrdude.exe лежит в каталоге mpide-0023-windows-20130715/hardware/tools/avr/bin, конфиг-файл avrdude.conf - рядом в каталоге mpide-0023-windows-20130715/hardware/tools/etc.
По умолчанию среда разработки при компиляции программы и загрузке прошивки на плату не слишком многословна и посмотреть, каким именно образом запускаются pic32-gcc, avrdude и прочие инструменты в цепочке, не получится:
ДОБАВЛЕНО: получится, если зажать на клавиатуре shift и нажать кнопку Verify ("компилировать"), но так, как ниже, тоже можно.
Но если очень хочется (например, если нужно выйти за пределы mpide и организовать собственную систему сборки проекта), то это можно сделать, немного поправив файл настроек mpide preferences.txt вручную в текстовом редакторе.
В Windows файл preferences.txt находится по адресу C:\Users\user1\AppData\Roaming\mpide\preferences.txt, в Linux - в $HOME/.mpide/preferences.txt. Точное положение можно уточнить в диалоге настроек:
Закрываем все окна mpide, открываем prerefences.txt в текстовом редакторе и добавляем строки:
Для того, чтобы видеть команды запуска gcc и других инструментов сборки:
build.verbose=true
для загрузки прошивки с avrdude:
upload.verbose=true
После этого чёрный экран консоли в mpide будет показывать гораздо больше информации во время сборки и загрузки прошивки:
Также в preferences.txt можно поправить одну строку, чтобы в консоли умещалось больше строк вывода:
console.length=50000
Чтобы догадаться о существовании этих параметров в природе нужно было заглянуть в исходники mpide.
Пример для сборки -
https://github.com/chipKIT32/chipKIT32-MAX/blob/master/app/src/processing/app/debug/Compiler.java:
if (verbose || Preferences.getBoolean("build.verbose")){
System.out.print(command.replace(":"," "));
System.out.println();
/*if(logger.isDebugEnabled()) {
for (int i = 0; i < commandArray.length; i++) {
logger.debug("commandArray[" + i + "]: " + commandArray[i]);
}
logger.debug("Command: " + command.replace(":"," "));
}*/
}
Для прошивки -
https://github.com/chipKIT32/chipKIT32-MAX/blob/master/app/src/processing/app/debug/Uploader.java if (verbose || Preferences.getBoolean("upload.verbose")) {
for(int i = 0; i < commandArray.length; i++) {
System.out.print("[" + commandArray[i] + "] ");
}
System.out.println();
}
Для платы Uno32 сборка стандартного примера Blink с мигающей лампочкой будет выглядеть примерно так:
C:\soft\mpide-0023-windows-20120903/hardware/pic32/compiler/pic32-tools/bin/pic32-g++ -O2 -c -mno-smart-io -w -fno-exceptions -ffunction-sections -fdata-sections -G1024 -g -mdebugger -Wcast-align -mprocessor=32MX320F128H -DF_CPU=80000000L -DARDUINO=23 -D_BOARD_UNO_ -DMPIDEVER=0x01000202 -DMPIDE=23 -IC \soft\mpide-0023-windows-20120903\examples\1.Basics\Blink -IC \soft\mpide-0023-windows-20120903\hardware\pic32\cores\pic32 -IC \soft\mpide-0023-windows-20120903\hardware\pic32\variants\Uno32 C \Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\Blink.cpp -o C \Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\Blink.cpp.o
...
Прошивка платы в Windows:
C:\soft\mpide-0023-windows-20120903/hardware/pic32/compiler/pic32-tools/bin/pic32-bin2hex -a C:\Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\Blink.cpp.elf
Binary sketch size: 6440 bytes (of a 126976 byte maximum)
C:\soft\mpide-0023-windows-20120903\hardware/tools/avr/bin/avrdude -CC:\soft\mpide-0023-windows-20120903\hardware/tools/avr/etc/avrdude.conf -v -v -v -v -p32MX320F128H -cstk500v2 -P\\.\COM47 -b115200 -D -Uflash:w:C:\Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\Blink.cpp.hex:i
avrdude: Version 5.10, compiled on Jan 19 2010 at 10:45:23
Copyright (c) 2000-2005 Brian Dean,
http://www.bdmicro.com/Copyright (c) 2007-2009 Joerg Wunsch
System wide configuration file is "C:\soft\mpide-0023-windows-20120903\hardware/tools/avr/etc/avrdude.conf"
Using Port : \\.\COM47
Using Programmer : stk500v2
Overriding Baud Rate : 115200
...
При ручном запуске avrdude количество параметров "-v" рекомендую уменьшить до одного - тогда процесс прошивки будет демонстрироваться динамическими прогресс-барами из псевдографики. С вариантом "-v -v -v -v" выводится максимальное количество подробностей - как плата меняется каждым байтом с компьютером - это интересно, но быстро занимает много экранного места.
Сборка примера с поддержкой Wifi:
C \soft\mpide-0023-windows-20120903/hardware/pic32/compiler/pic32-tools/bin/pic32-g++ -O2 -c -mno-smart-io -w -fno-exceptions -ffunction-sections -fdata-sections -G1024 -g -mdebugger -Wcast-align -mprocessor=32MX320F128H -DF_CPU=80000000L -DARDUINO=23 -D_BOARD_UNO_ -DMPIDEVER=0x01000202 -DMPIDE=23 -IC \Users\benderamp\1i7\robot-fizkulturnik\robot_fizkult -IC \soft\mpide-0023-windows-20120903\hardware\pic32\cores\pic32 -IC \Users\benderamp\Documents\mpide\libraries\WiFiShieldOrPmodWiFi_G -IC \Users\benderamp\Documents\mpide\libraries\DNETcK -IC \Users\benderamp\Documents\mpide\libraries\DWIFIcK -IC \soft\mpide-0023-windows-20120903\.\hardware\pic32\libraries\Servo -IC \soft\mpide-0023-windows-20120903\hardware\pic32\variants\Uno32 -IC \Users\benderamp\Documents\mpide\libraries\WiFiShieldOrPmodWiFi_G -IC \Users\benderamp\Documents\mpide\libraries\DNETcK -IC \Users\benderamp\Documents\mpide\libraries\DWIFIcK -IC \soft\mpide-0023-windows-20120903\.\hardware\pic32\libraries\Servo C \Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\robot_fizkult.cpp -o C \Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\robot_fizkult.cpp.o
...
Здесь же любопытно заметить, что исходный код собираемой программы лежит в каталоге Temp, а не там, где он создан:
C:\Users\BENDER~1\AppData\Local\Temp\build4629055154717520768.tmp\Blink.cpp
Если успеть открыть его в процессе соборки до того, как он будет снова удален,
#include "WProgram.h"
void setup();
void loop();
void setup() {
// initialize the digital pin as an output.
// Pin PIN_LED1 has an LED connected on most Arduino and compatible boards:
pinMode(PIN_LED1, OUTPUT);
}
void loop() {
digitalWrite(PIN_LED1, HIGH); // set the LED on
delay(1000); // wait for a second
digitalWrite(PIN_LED1, LOW); // set the LED off
delay(1000); // wait for a second
}
можно заметить, что он отличается от оригинального исходного файла подключением заголовочного файла WProgram.h, из которого появляются digitalRead, digitalWrite и все остальные вызовы, доступные в среде с самого начала. Ну и объявлением методов void setup() и void loop().
И напоследок снимем покровы таинственности с волшебных методов setup и loop, которые используются в каждом проекте arduino - на самом деле они вызываются из обычной главной функции main, которая определена в отдельном файле и подключается к прошивке в момент линковки.
https://github.com/chipKIT32/chipKIT32-MAX/blob/master/hardware/arduino/cores/arduino/main.cpp #include
int main(void)
{
init();
setup();
for (;;)
loop();
return 0;
}