Как откомпилировать файл программы

Сначала создадим на диске папку, где будут находиться файлы вашего проекта.

Запустим редактор программиста Programmers Notepad [WinAVR]. В меню редактора выберем File -> New -> C/C++ и напишем программу на языке Си.

/************************************************ ПРИМЕР МИГАНИЯ СВЕТОДИОДАМИ :: MYROBOT.RU *************************************************/ #define F_CPU 1000000UL // 1 MHz #include #include int main(void) // начало основой программы < DDRD = 0xff; // все выводы порта D сконфигурировать как выходы while (1) < // Бесконечный цикл PORTD = 0xff; // установить «1» на всех линиях порта D _delay_ms(250); // Ждем 0.25 сек. PORTD = 0x00; // установить «0» на всех линиях порта D _delay_ms(250); // Ждем 0.25 сек. > // закрывающая скобка бесконечного цикла > // закрывающая скобка основной программы

Сохраним листинг программы в предварительно созданной нами папке в файле с именем «my_test.c» (каждый проект лучше сохранять в отдельной папке). Имя файла может быть любым без пробелов и иметь расширение «.c» .

Как скомпилировать код c++ в exe

Создание файла Makefile

В WinAVR исходный текст программы компилируется при помощи утилиты make.exe, которая находится в папке WinAVRutilsbin. Make.exe контролирует генерацию исполняемых файлов из исходного кода программы. Для управления работой этой утилиты используют make-файлы. Make-файл сообщает компилятору, какие команды запускать, какие файлы компилировать и линковать, какой выходной код генерировать и т. д.

После установки WinAVR в папке WinAVRsample можно найти шаблон с именем Makefile, который нужно скопировать в папку с проектом и уже там редактировать.

Внимание: Makefile и компилируемый файл (в нашем случае my_test.c ) должны находиться в одной папке.

Откроем Makefile в редакторе Programmers Notepad и отредактируем несколько важных для компилятора инструкций.

Во-первых, обязательно нужно указать, для какого типа микроконтроллера мы хотим получить выходной код. Найдем следующие строки:

# MCU name
MCU = atmega128

Первая строка — комментарий, а во второй вместо atmega128 пишем тот микроконтроллер, который нас интересует (например, atmega8, attiny2313, attiny26).

Частота тактирования микроконтроллера в герцах определяется в строках:

# Processor frequency.
F_CPU = 8000000

Вместо 8000000 напишем 1000000, что будет составлять 1 мегагерц (1 МГц).
Должно получиться так:

# Processor frequency.
F_CPU = 1000000

Имя проекта, а соответственно и имя исходного файла с функцией main и выходные файлы с расширениями hex и cof, определяется в следующих строках:

# Target file name (without extension).
TARGET = testpp

Здесь вместо testpp пишем нужное имя проекта (в нашем случае my_test ).

# List C source files here. (C dependencies are automatically generated.)

✅КАК СКОМПИЛИРОВАТЬ ИЗ JAVA В EXE?/(How To Make A Executable File From Java Code)☕


SRC =

После знака «равно» пишем $(TARGET).c, чтобы получилось

# List C source files here. (C dependencies are automatically generated.)
SRC = $(TARGET).c

# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC = main.cpp

Стираем запись после знака «равно». Должно получиться:

# List C++ source files here. (C dependencies are automatically generated.)
CPPSRC =

В разделе Optimization level проверяем уровень оптимизации. Можно оставить все как есть (s — оптимизирует выходной файл по размеру).

# Optimization level, can be [0, 1, 2, 3, s].
# 0 = turn off optimization. s = optimize for size.
# (Note: 3 is not always the best optimization level. See avr-libc FAQ.)
OPT = s

После этого, немного ниже, ищем раздел:

В дальнейшем в статьях раздела «Шаг за шагом» мы будем опираться на вариант программатора USBASP.

AVRDUDE_PORT = com1 # programmer connected to serial device

Программатор USBASP использует USB-порт.

Вы можете использовать более удобный шаблон Makefile, в котором часто изменяемые опции вынесены в начало файла. В простейшем случае для использования этого Makefile’а достаточно скопировать его в папку с проектом и изменить, если потребуется, строки в разделе «ОСНОВНЫЕ ИНСТРУКЦИИ».

Читайте также:
Команда для выключения программы

Кроме того, в состав пакета WinAVR входит утилита MFile , которая помогает правильно составить или отредактировать Makefile. Запустить утилиту можно через меню «Пуск -> Программы -> WinAVR -> MFile [WinAVR]»

Компиляция программы

Откройте в редакторе Programmers Notepad исходный текст программы my_test.c, в меню выберете Tools -> [WinAVR] Make All. Команда Make All выполняет компиляцию исходного кода программы и в случае отсутствия ошибок генерирует файл, который можно прошивать в микроконтроллер AVR.

Внизу, в окне «Output», должно появиться сообщение об успешной компиляции:

А в папке вашего проекта должны появиться следующие файлы:

Самым главным из этих файлов для нас будет файл my_test.hex. В нем хранится шестнадцатиричный код для загрузки в память программ (Flash ROM) микроконтроллера.

:1000000012C02BC02AC029C028C027C026C025C0C6 :1000100024C023C022C021C020C01FC01EC01DC0DC :100020001CC01BC01AC011241FBECFE5D4E0DEBF28 :10003000CDBF10E0A0E6B0E0E0E8F0E002C005903F :100040000D92A036B107D9F710E0A0E6B0E001C0EC :100050001D92A036B107E1F701C0D2CFCFE5D4E0C1 :10006000DEBFCDBF8FEF81BB282FE0E0F0E022BBE9 :10007000CF010197F1F712BACF010197F1F7F7CF4E :00000001FF

В файле my_test.eep хранится шестнадцатиричный код для загрузки в энергонезависимую память данных (EEPROM).

Следует помнить, что после каждого изменения кода программа должна быть перекомпилирована, т.е. в редакторе Programmers Notepad выполнено Tools -> [WinAVR] Make All.

Если проект будет состоять из нескольких файлов и в одном из них что-то изменили, то при повторной компиляции будет компилироваться только измененный файл. Для полной перекомпиляции необходимо вначале выполнить команду Tools -> [WinAVR] Make Clean, а затем команду [WinAVR] Make All. Команда Make Clean удаляет все файлы, сгенерированные предыдущей командой Make All.

Это оригинальная статья myROBOT.ru
Постоянный адрес статьи: http://myrobot.ru/stepbystep/mc_makefile.php

Файлы:

Исходный текст программы «ПРИМЕР МИГАНИЯ СВЕТОДИОДАМИ»
my_test.c

Шаблон Makefile от myROBOT
Makefile

Статьи раздела
МИКРОКОНТРОЛЛЕРЫ

Источник: myrobot.ru

Компиляция файлов C с помощью gcc, шаг за шагом

Чтобы объяснить все этапы компиляции, нам нужно заранее прояснить несколько концепций программирования. В этой статье мы расскажем, что такое язык C, как его скомпилировать с помощью такого инструмента, как gcc, и что происходит, когда мы его компилируем.

Язык программирования C

Все программное обеспечение, программы, веб-сайты и приложения написаны на определенном языке программирования. По сути, все, что мы видим на экранах наших компьютеров или смартфонов, — это просто набор кода, написанный на разных языках и собранный определенным образом. Каждый язык программирования используется по-своему, и сегодня мы сосредоточимся на C.

C — это язык программирования, изобретенный Деннисом Ричи и впервые появившийся в 1972 году. Это то, что мы называем языком низкого уровня, то есть между C и машинным языком существует лишь небольшая абстракция, поэтому его можно рассматривать как более близкий к аппаратному обеспечению компьютера. C также является скомпилированным языком, в отличие от интерпретируемого, что означает, что исходные файлы, написанные на C, должны быть скомпилированы, чтобы они были исполняемыми.

Инструменты

Прежде всего, давайте поговорим об инструментах, которые мы будем использовать в нашем примере. Мы будем работать над Unix-подобной операционной системой, поэтому примеры могут отличаться от Windows. Нам нужен доступ к оболочке, которая, согласно http://linuxcommand.org, является программой, которая принимает команды с клавиатуры и передает их операционной системе для выполнения.

Для этого нам понадобится терминал или эмулятор терминала, который представляет собой просто окно, позволяющее нам взаимодействовать с оболочкой. Внутри терминала мы должны увидеть приглашение оболочки, которое содержит ваше имя пользователя и имя компьютера, за которым следует переменная среды PS1, которая часто является символом $. Мы можем вводить команды после этого символа в том, что мы называем командной строкой. Нам также нужен текстовый редактор, например vi или emacs, для создания исходного файла.

Компиляция

Компиляция — это перевод исходного кода (кода, который мы пишем) в объектный код (последовательность операторов на машинном языке) с помощью компилятора.

Читайте также:
Как пользоваться программой zero

Процесс компиляции состоит из четырех этапов:

  • Предварительная обработка
  • Компиляция
  • Сборка
  • Связь

В качестве примера мы будем использовать компилятор gcc, что означает Коллекция компиляторов GNU. Проект GNU — это бесплатное программное обеспечение и проект массового сотрудничества, запущенный Ричардом Столлманом в 1983 году, позволяющий разработчикам получить бесплатный доступ к мощным инструментам.

Gcc поддерживает различные языки программирования, включая C, полностью бесплатен и является компилятором для большинства Unix-подобных операционных систем. Чтобы использовать его, мы должны убедиться, что мы установили его на свой компьютер, если его еще нет.

Исходный код

В нашем примере давайте посмотрим на исходный код внутри файла с именем «main.c», где «.c» — это расширение файла, которое обычно означает, что файл написан на C. Это изображение находится внутри текстового редактора vi:

Розовым цветом выделена директива препроцессора #include, которая сообщает компилятору включить заголовочный файл stdio.h, но мы вернемся к нему позже.

Синим цветом выделены комментарии к коду, они полезны для запоминания того, что на самом деле делает ваш код через несколько месяцев после его создания. Нам они не нужны в такой маленькой программе, но ставить их — это хорошая практика.

Далее у нас есть точка входа, функция main (). Это означает, что программа начнется с выполнения операторов, которые находятся внутри блока этой функции, то есть между фигурными скобками. Здесь всего два оператора: один выводит на терминал предложение «Hello, World», а другой говорит программе «вернуть» 0, если она завершилась или завершилась правильно. Итак, после того, как мы скомпилировали его, если мы запустим эту программу, мы увидим только фразу «Hello, World».

Чтобы наш код main.c был исполняемым, нам нужно ввести команду «gcc main.c», и процесс компиляции пройдет через все четыре содержащихся в нем шага. Конечно, у gcc есть опции, которые позволяют останавливать процесс компиляции после каждого шага. Давайте посмотрим на них.

Шаги

1. Препроцессор

Препроцессор выполняет несколько ролей:

  • он избавляется от всех комментариев в исходном файле (ах)
  • он включает код файла (ов) заголовка, который представляет собой файл с расширением .h, который содержит объявления функций C и определения макросов.
  • он заменяет все макросы (фрагменты кода, которым присвоено имя) их значениями

Результат этого шага будет сохранен в файле с расширением «.i», поэтому здесь он будет в main.i.

Чтобы остановить компиляцию сразу после этого шага, мы можем использовать опцию «-E» с командой gcc в исходном файле и нажать Enter.

Вот как должен выглядеть конец файла main.i:

2. Компилятор

Компилятор возьмет предварительно обработанный файл и сгенерирует IR-код (промежуточное представление), так что это создаст файл «.s». При этом другие компиляторы могут создавать ассемблерный код на этом этапе компиляции.

F. Компиляция файлов MATLAB

MATLAB — язык, ориентированный на работу с матрицами. Вычисления, которые удается записать в матричном виде, выполняются достаточно быстро.

Однако векторизовать программу удается не всегда, а в этом случае MATLAB будет проигрывать в скорости языкам более низкого уровня, например С. Существует несколько способов ускорить вычисления: • перевести текстовые m-файлы в p-файлы, содержащие внутренний код MATLAB ( pcode ) • откомпилировать m-файлы в dll-библиотеки ( mcc ) • написать наиболее медленные части программы в виде функций на С или Фортране, откомпилировать их в dll-библиотеки и вызывать из MATLAB . F.1. Использование команды pcode Этот способ дает выигрыш в скорости, если программа очень длинная или имеется много вызовов различных функций в m-файлах.

Если в программе многократно вызывается одна и та же функция, то она переводится в p-файл при первом вызове и хранится в этом виде для будущих вызовов. В этом случае выигрыш в скорости будет мал. Возможные форматы вызова: • pcode file1 (file2 . ) переводит file1.m в file1.p и т.д., file1.m может находиться в любой директории, путь на которую указан в pathdef.m, file1.p создается в текущей директории • pcode *.m переводит все m-файлы в текущей директории в p-файлы • pcode file1 (file2 . ) -inplace создает p-файл в той же директории, где был m-файл. F.2. Использование команды mcc Второй способ позволяет перевести функции MATLAB в исполняемый код, что позволяет ускорить программу на 20-40%. Кроме того, полученную dll-библиотеку можно использовать в любом языке: например, вызывать графические функции

Читайте также:
Список программ по электронике

MATLAB из программы на С или Фортране. Для компиляции m-файлов необходимы: • компилятор С, поддерживающий создание dll-библиотек (Borland C/C++ 5.x, Microsoft Visual C++ 4.2 или 5.0, Watcom C/C++ 10.6 или 11) • MATLAB Compiler (необходимо указать при установке MATLAB) Команда mcc с различными ключами также позволяет перевести m-файл в С- файл, откомпилировать программу MATLAB в исполняемый файл (который можно будет выполнять на компьютерах, где MATLAB не установлен), и др.

F.3. Использование команды mex Третий способ не имеет прямого отношения к MATLAB. Можно написать любую функцию на С (или Фортране), включить ее в dll-библиотеку, а затем вызывать из MATLAB. Для создания dll-библиотеки необходимо кроме самой функции на С написать еще одну функцию, передающую входные аргументы вызывающей программы в функцию и возвращающую выходные аргументы вызывающей программе. При этом файл с программой на С (timestwo.c) имеет следующий формат: %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% #include «mex.h» /* * timestwo.c — пример взят из API-guide * Функция умножает скаляр на 2. * * Это MEX-file для MATLAB. * Copyright (c) 1984-1998 The MathWorks, Inc. */ /* $Revision: 1.5 $ */ void timestwo(double y[], double x[]) < y[0] = 2.0*x[0]; >void mexFunction( int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[] )

double *x,*y; int mrows,ncols; /* Check for proper number of arguments. */ if(nrhs!=1) < mexErrMsgTxt(«One input required.»); >else if(nlhs>1) < mexErrMsgTxt(«Too many output arguments»); >/* The input must be a noncomplex scalar double.*/ mrows = mxGetM(prhs[0]); ncols = mxGetN(prhs[0]); if( !mxIsDouble(prhs[0]) || mxIsComplex(prhs[0]) || !(mrows==1 ncols==1) ) < mexErrMsgTxt(«Input must be a noncomplex scalar double.»); >/* Create matrix for the return argument. */ plhs[0] = mxCreateDoubleMatrix(mrows,ncols, mxREAL); /* Assign pointers to each input and output. */ x = mxGetPr(prhs[0]); y = mxGetPr(plhs[0]); /* Call the timestwo subroutine. */ timestwo(y,x); > Здесь описана функция timestwo , умножающая число на два, и функция mexFunction , которая принимает входной аргумент x и возвращает выходной y . Аргументами последней являются: nlhs — число выходных аргументов dll-функции nrhs — число входных аргументов *plhs[ ] — массив указателей на первые элементы выходных аргументов *prhs[ ] — массив указателей на первые элементы входных аргументов.

Имеется множество функций для передачи переменных разнообразных типов и вывода сообщений (например mxGetPr и mxGetPi — для получения указателей на реальную и мнимую часть входного массива, mxGetString — для получения указателя на строку, mxGetN и mxGetM для получения размеров массива, mxCreateNumericArray , mxCreateDoubleMatrix , mxCreateString — для задания указателей на массивы, матрицы и строки, и т.д. Полный список можно посмотреть в файле matlab 5 . 2 helptechdocAP IREF AP IREF T OC.HT ML Если откомпилировать этот файл, то функцию timestwo можно будет вызывать из MATLAB . Формат вызова mex: mex -setup необходимо запускать после установки нового компилятора С (или фортрана), а также один раз после установки MATLAB . mex file компилирует file.c и создает file.dll . Различные дополнительные ключи можно узнать, набрав help mex в окне MATLAB .

Источник: studfile.net

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru