воскресенье, 28 декабря 2014 г.

Простой код на С. Компилятор XC8

<< Назад к оглавлению

Я плавно переделываю уроки на использование пакета MPLABX и компилятора XC8. Так как старые уже не поддерживается. Тем не менее, вы можете найти старую статью здесь. Так же точно можете скачать компилятор C18 и использовать его. XC8 несколько отличается

Итак, нам понадобится компилятор XC8. Его можно скачать с официального сайта. ссылка, либо же с зеркала зеркало

Итак, создаем проект в MPLABX
Это делается примерно так же как во втором уроке, только выбираем компилятор XC8

 Это аналог программе, написанной в уроке 2.
#include <p18f2550.h>
#include <stdio.h>
#include <stdlib.h>
#include <p18f2550.h>
#include "config.h"


void delay(void)
{
long i;
for (i=0;i<100000;i++);
}

int main(int argc, char** argv) {
  TRISA = 0;
  PORTA = 0;
  while (1)
  {
  PORTAbits.RA2 = 1;
  delay();
  PORTAbits.RA2 = 0;
  delay();
};
    return (EXIT_SUCCESS);
}
Сначала запускается функция main(). Идет настройка вывода сигнала через порт А (TRISA=0;) а потом обнуляется этот выход с порта А (PORTA=0); Далее идет бесконечный цикл, в котором мы мигаем лампочкой на порту RA2 и вызываем функцию задержки.
Пока что у вас не скомпилируется этот проект. Потому что в include стоит файл config.h, а мы пока его еще не создали. Там будут конфигурационные биты.
Необходимо их настроить. Для этого идем в Window->PIC memory views->configuration bits

откроется окно, и выставляем там FOSC=INTOSCIO, WDT=OFF, MCLRE=OFF
Щелкаем правой клавишей и Generate Source Code to Output. Эта опция создаст код, необходимый для задачи конфигурационных битов. 
Копируем код, создаем файл заголовков config.h и вставляем сгенерированный код в конец файла.

Все обозначений навроде портов и встроенных устройств можно найти в файле p18f2550.h или p18f4550.h, так же всегда вы можете обратиться к ТО на контроллер.
директива #include <p18f2550.h> подключает заголовки для контроллера
#pragma config - Это опять же выбор конфигурационных битов для контроллера. См урок №2.
Эти настройки у нас хранятся теперь в файле config.h 

Если вы будете использовать этот код с бутлоадером. А это намного удобнее, нам необходимо сдвинуть его в памяти программы на 0x1000. Если в C18 компиляторе для этого была специальная директива, то теперь для этого служит настройка компилятора. Грубо говоря, теперь когда мы пишем код в XС8, компилятор сам знает где должны быть прерывания, как размечена память, и.т.д. Все, что мы можем сделать - это сделать сдвиг. 
Итак, чтобы программа корректно работала с бутлоадером, нужно сделать следующее:
File->Project properties
Потом XC8 global options (не XC8 compiler options, специально на это обращаю внимание), и пишем в поле additional options

--CODEOFFSET=1000

Это означает, что весь код компилируется со сдвигом в 0x1000



Если вы захотите вставить код ассемблера в файл Си, то вам нужно будет его заключить между директивами

#asm

#endasm

Файлы проекта: ссылка

4 комментария:

  1. В моем MPLABX в настройках XC8 global options пустое поле. От чего такое может быть?

    ОтветитьУдалить
    Ответы
    1. Добрый вечер, в этой статье написано:"Итак, чтобы программа корректно работала с бутлоадером, нужно сделать следующее:
      File->Project properties

      Потом XC8 global options (не XC8 compiler options, специально на это обращаю внимание), и пишем в поле additional options

      --CODEOFFSET=1000"

      Могу предположить, что она она пуста, потому что вы не написали туда ничего.

      Удалить
    2. Похоже вы меня не поняли. Мне некуда писать.
      https://yadi.sk/i/7XFj0HjHzorNV

      Удалить
    3. Да, не понял. Странно. Не помню такого. Я к сожалению, не подскажу сейчас. Программирую STMы на работе и у меня даже MPLAB не стоит.

      Удалить