1i7 (1i7) wrote,
1i7
1i7

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

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



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

  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments