1i7

mpide: показать то, что скрыто

Feb 15, 2014 17:08

Пара заметок в закладки. Среда разработки 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;
}

mpide, полезные советы, chipkit, arduino, microchip, pic32, mips

Previous post Next post
Up