Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Ошибка сборки проекта в Sublime text2
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > ARM
allsettingsdone
Не получается собрать простенький проект на С++ в Sublime text2. Использую компилятор gcc(GNU Tools ARM Embedded), программу make с самописным простеньким makefile. Пути для gcc и make прописаны в PATH.
Вот что пытаюсь собрать:
Код
int main()
{
    
}


Вот настройки проекта sublime text2:
Код
{
    "folders":
    [
        {
            "path": "."
        }
    ],

    "build_systems":
    [
        {
            "name": "arm build",
            "cmd": ["make"],
            "working_dir": "${project_path}"
        }
    ],

    "settings":
    {
        "sublimeclang_options":
        [
            "-std=c++11",
            "-Wall",
            "-I${project_path}"
        ]
    }
}


Содержимое makefile:
Код
all:
    arm-none-eabi-gcc main.cpp


Вот что получаем на выходе:


Код
arm-none-eabi-gcc main.cpp
c:/program files (x86)/gnu tools arm embedded/4.8 2014q2/bin/../lib/gcc/arm-none-eabi/4.8.4/../../../../arm-none-eabi/lib\libc.a(lib_a-exit.o): In function `exit':
exit.c:(.text.exit+0x2c): undefined reference to `_exit'
collect2.exe: error: ld returned 1 exit status
make: *** [all] Error 1
[Finished in 0.4s with exit code 2]


Как вы думаете, в чем проблема?

проект прикрепляю:
Genadi Zawidowski
Ну так библиотек никаких не указано... Обычно в embedded проектах "стартап" включается в него разработчиком. Я, например, предпочитаю чтобы для основной программы неинициализированные переменные уже были "0", это всё (как и работала инициализация - переписывается из flash в ОЗУ) само собой не происходит.

Как-то так:

Код
void ResetException(void)
{
    arm_cpu_initialize();        // watchdog disable, clock initialize

     /* copy-init variables */
    memcpy(& __data_start__, & __etext, (& __data_end__ - & __data_start__) * sizeof __bss_end__);
    /* zero-init variables */
    memset(& __bss_start__, 0, (& __bss_end__ - & __bss_start__) * sizeof __bss_end__);
    /* Branch to main function */
    main();

    /* Infinite loop */
    for (;;)
;
}


Для Вашего случая лекарство вот:

Код
void _exit(int v)
{
        for (;;)
               ;
}

void exit(int v)
{
        for (;;)
               ;
}


Но зашивать в ПЗУ это не получится...
allsettingsdone
Цитата(Genadi Zawidowski @ Aug 3 2014, 18:43) *
...

Дело в том что не нужны костыли в проекте, для того что бы та или иная ошибка не выскакивала. Я бы хотел сделать "скелетный" проект для Sublime text2, и насколько я понимаю, эта ошибка появляется из-за того что я передаю в компилятор слишком мало параметров о самом микроконтроллере, и(или) не подключаю к проекту файл "startup_stm32f10x_md_vl.s". Тут кстати возникает вопрос - как правильно подключить этот файл к проекту? И какая разница компилятору подключен он или нет?
AHTOXA
Цитата(allsettingsdone @ Aug 3 2014, 23:21) *
Дело в том что не нужны костыли в проекте, для того что бы та или иная ошибка не выскакивала. Я бы хотел сделать "скелетный" проект для Sublime text2

При чём тут вообще Sublime text? Вам надо найти нормальный makefile. Именно из него компилятор и узнает, какие файлы у вас подключены и с какими ключами их компилировать.
Например, посмотрите пример от scmRTOS, там есть работающий makefile. (И стартап, про необходимость которого вам сказал Genadi Zawidowski, там тоже есть.)
psL
startup нужен для начальной инициализации процессора (прерываний, стека и т.п.), т.е. для создания окружения в котором уже м.б. запущена функция main. В этом файле обычно содержится нулевой вектор, откуда стартует программа при подаче питания или сбросе, а также вызов функции main.
Поскольку ОС отсутствует, программа обычно не возвращает никуда управления, а остается в вечном цикле for(;;){} или while(1) Поскольку он у вас отсутствует, линкер ищет функцию для передачи управления по завершению main
Насколько понимаю, Sublime это просто стучалка, у которой есть возможность вызова make для проекта. Самый простой способ разобраться со связкой компилятора и редактора - научиться сначала компилировать проект из командной строки. Например, можно взять референсный код мигания светодиодом или аналогичный для вашего или похожего процессора и научиться собирать его при помощи make. Далее подтянуть редактор. Далее уже заниматься программированием конкретной задачи под конкретный процессор.
Genadi Zawidowski
Вот Makefile проект под STM32F1xx - только запуск. Обратите внимание на размер ПЗУ и ОЗУ в файле *.ld
jcxz
Цитата(psL @ Aug 4 2014, 01:40) *
startup нужен для начальной инициализации процессора (прерываний, стека и т.п.), т.е. для создания окружения в котором уже м.б. запущена функция main. В этом файле обычно содержится нулевой вектор, откуда стартует программа при подаче питания или сбросе, а также вызов функции main.

Стартап не выполняет никакой инициализации аппаратуры (типа прерываний и т.п.), а только готовит программное окружение для выполнения си-кода
(инит статитческих/глобальных переменных, памяти, стеков, режимов CPU и т.п.).
Аппаратуру можно начинать инитить уже в main().
allsettingsdone
Так.. В первую очередь мне надо разобраться с синтаксисом makefile и *.ld , понять что за что отвечает и дальше уже пытаться собрать проект.
kolobok0
Цитата(allsettingsdone @ Aug 5 2014, 00:17) *
...надо разобраться с синтаксисом makefile...


ничего сложного в этой бодяге нет. с годами что то добавляется, что то уходит. разные языки(среды), разные обработчики мэйк файлов.
но суть одна и та-же. очень поможет какой-либо пример. в инете их как грязи. Вам нужно готовый, с мэйк файлом. потом по образу и
подобию пытаетесь запустить своё(как хочется, или как вы кумекаете). нарываетесь на конкретные проблемы. решаете конкретные проблемы.
не забываем про встроенные хэлпы, форумы с кучей избытыми вопросами-ответами. как правило, если это не квантовый генератор, для полёта
к марсу в единственном полусекретном варианте - то всё уже тысячу раз пройдено другими людьми. надо просто найти ключевые фразы,
которые Вас выведут точно на самые полные ответы(для вас)... ну и по кругу, пока сами с усами не станете. Так же не забываем про другие
источники инфы - книги, редко научные институтские статьи, иногда для практических рукамидвижений выручает и всевозможные видио - которые
сейчас делают все кому не лень, в том числе и народу от техники/электроники/прграммирования...

ну где то так...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.