воскресенье, 1 декабря 2013 г.

Программирование PIC-контроллеров в Linux. Отвязка компилятора от MPLAB

Далее будет рассказано как организовать рабочую среду для написания программ на С для микроконтроллеров (МК) PIC18 компании Microchip.
Традиционно для программирования данных МК используется среда MPLAB и ОС Windows. С выходом MPLAB X появилась возможность разрабатывать для этих МК и под Linux. Далее будет рассказано как улучшить и ускорить процесс разработки.
Как известно, MPLAB X основан на NetBeans, которое работает на Java. Поэтому теперь MPLAB стал кроссплатформенным. Но те, кто работал со старым MPLAB'ом ощутили существенные недостатки. Мало кому новый MPLAB пришёлся по вкусу. К недостаткам MPLAB X относится прежде всего сильнейшая тормознутость. На слабых машинах новым MPLAB'ом вообще невозможно пользоваться. Нормально работающего автодополнения в MPLAB X нет. MPLAB X для Linux частенько теряет русские буквы в исходниках, хотя кодировка выставлена. Люди, работающие с PIC-контролерами предпочитают пользоваться старым 8-м MPLAB'ом. Но он есть только по Windows, а мы хотим вести разработку для PIC под Linux.
Далее предлагается способ как можно организовать разработку для PIC-контроллеров на языке С под Linux. Мы будем рассматривать серию PIC18, так как для серии PIC16 нормально работающего компилятора С не существует.





Итак, при работе в MPLAB X для Linux можно отвязать компилятор от MPLAB'а и использовать вместо создания проектов в MPLAB X Make-файлы (Makefile). Для этого нужно сначала скачать с сайта www.microchip.com компилятор mplabc18. Сам MPLAB нам не потребуется. Для работы программатора PICKit2 нужно скачать утилиту pk2cmd тоже с официального сайта. И, конечно, должна быть установлена утилита make. Как правило, в Linux она уже есть.
Далее устанавливаем компилятор C18. Предположим компилятор у нас установился в каталог /opt/microchip/mplabc18/v3.40/bin. По этому пути будут находиться собственно компилятор, который называется mcc18 и компоновщик mplink. Этот путь можно добавить к переменной PATH.
Чтобы работал программатор pk2cmd нужно к переменной пути добавить путь /usr/share/pk2. Для этого в файл ~/.profile нужно дописать следующую строку:
export PATH=$PATH:/usr/share/pk2
Проверить, что программатор работает, можно подключив его к компьютеру и к вашей отладочной плате с PIC-контроллером и написав в терминале комаду:
pk2cmd -P
В ответ программатор должен сообщить тип PIC-контроллера. Теперь содаём каталог, который назовём, например, PIC-first. В нём при помощи Вашего любимого текстового редактора создаём файл main.c, в котором и будет содержаться программа для нашего МК. Для примера будем использовать программу, которая мигает светодиодом, подключенным к ножке RB0. Содержимое этого файла следующее.
#include "p18f452 .h" // Заменить на свой PIC.
#include "stdlib .h"
#include "stdio .h"
#include "delays.h"


#pragma config OSC = HS, OSCS = OFF // конфигурация
#pragma config PWRT = ON
#pragma config BOR = OFF
#pragma config WDT = OFF
#pragma config LVP = OFF

void main(void) {

    INTCONbits.GIE = 0;
    PORTA = 0; // инициализация PIC
    PORTB = 0; // линии в/в
    PORTC = 0;
    LATA = 0;
    LATB = 0;
    LATC = 0;
    TRISA = 0x00;
    TRISB = 0x00; 
    TRISC = 0x00;
    ADCON1 = 0x07;

    for (;;) { // главный цикл
        
            PORTBbits.RB0=1;  // мигаем светодиодом
            Delay10KTCYx(10); // на ножке RB0
            PORTBbits.RB0=0;
            Delay10KTCYx(10);
        }
    
}
 
Теперь нам надо из С-кода получить файл HEX для прошивки в МК. Сохраняем этот файл под именем main.c, и в том же каталоге создаём файл под именем Makefile. Те, кто знаком с утилитой make, знают синтаксис таких файлов. Те кто не знаком, могут ознакомиться с его синтаксисом например здесь . Содержимое нашего Makefile'а следующее:
CC = /opt/microchip/mplabc18/v3.40/bin/mcc18
PIC = -p18F452 
INCLUDE = -I. -I/opt/microchip/mplabc18/v3.40/h
CFLAGS = -ms -oa-
LDFLAGS = -w -u_CRUNTIME
LINK = /opt/microchip/mplabc18/v3.40/bin/mplink
LIBS = -l/opt/microchip/mplabc18/v3.40/lib
HEX = blink.hex

all : $(HEX)

$(HEX) : main.o
  $(LINK) $(PIC) $(LDFLAGS) $(LIBS) -o $(HEX) main.o


main.o : main.c
  $(CC) $(PIC) $(INCLUDE) $(CFLAGS) -fo main.o main.c

install: all
  pk2cmd -P -F $(HEX) -M

clean:
  rm -f *.o *.hex *.err
В начале Makefile определены несколько переменных.
Переменная СС указывает на исполняемый файл компилятора.
В переменную PIC нужно вписать свой микроконтроллер PIC.
Переменная INCLUDE содержит пути к заголовочным файлам. Синтаксис здесь такой же как и у компилятора gcc, но сбда нужно включать и пути к библиотечным заголовкам.
CFLAGS -- это опции компилятора. Компилятор C18 достаточно плохо документирован. Поэтому эти опции я вытаскивал, рассматривая вывод в консоль при компиляции проекта в MPLAB.
LDFLAGS -- опции линковщика. Их пришлось добывать таким же способом.
LINK -- указывает на исполняемый файл линковщика mplink.
LIBS -- это пути к стандартным библиотекам для линковщика.
HEX -- это файл HEX, которрый должен у нас получиться в итоге.
Сначала идут цели для компиляции и линковки. Здесь всё как обычно, кроме ключей командной строки компилятора и линковщика.
Следует обратить внимание на цель install. Здесь производится непосредственно программирование МК. Вызывается консольный прошивальщик pk2cmd ему передаётся через ключ -F файл HEX И если МК подключен правильно производится прошивка. Если мы хотим запитать PIC от программатора, то нужно добавить ключ -T (Power Target).
Если Ваш проект состоит из нескольких файлов, то их можно добавлять в Makefile так же как обычно. Определяем для каждого файла свою цель и добавляем их в строку 12, где происходит компоновка.
Теперь открываем терминал, переходим в каталог, где находится наш проект. И в терминале выдаём команду make. Если всё правильно, то мы должны получить вот такой вывод в консоль:
vvk@linux-bmx0:~/PIC-first> make
/opt/microchip/mplabc18/v3.40/bin/mcc18 -p18F452  -I. -I/opt/microchip/mplabc18/v3.40/h -ms -oa- -fo main.o main.c
/opt/microchip/mplabc18/v3.40/bin/mplink -p18F452  -w -u_CRUNTIME -l/opt/microchip/mplabc18/v3.40/lib -o blink.hex main.o
MPLINK 4.40, Linker
Device Database Version 1.3
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0

MP2HEX 4.40, COFF to HEX File Converter
Copyright (c) 1998-2011 Microchip Technology Inc.
Errors    : 0
И в данном каталоге создаётся файл blink.hex, который можно записывать в микроконтроллер. Если у Вас программатор PICKit2, то можно в консоли написать make install, и произойдёт прошивка.
На этом всё. Используя данное руководство можно производить разработку для PIC18 под Linux, не используя тормозной MPLAB X.

Комментариев нет:

Отправить комментарий