реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Ошибка сборки проекта в Sublime text2, Sublime text2, GNU Tools ARM Embedded, makefile
allsettingsdone
сообщение Aug 3 2014, 16:01
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Не получается собрать простенький проект на С++ в 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]


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

проект прикрепляю:

Сообщение отредактировал allsettingsdone - Aug 3 2014, 16:03
Прикрепленные файлы
Прикрепленный файл  sm20.zip ( 3.46 килобайт ) Кол-во скачиваний: 10
 
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 3 2014, 16:43
Сообщение #2


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Ну так библиотек никаких не указано... Обычно в 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 (;;)
               ;
}


Но зашивать в ПЗУ это не получится...

Сообщение отредактировал Genadi Zawidowski - Aug 3 2014, 16:50
Go to the top of the page
 
+Quote Post
allsettingsdone
сообщение Aug 3 2014, 17:21
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Цитата(Genadi Zawidowski @ Aug 3 2014, 18:43) *
...

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

Сообщение отредактировал IgorKossak - Aug 4 2014, 08:44
Причина редактирования: бездумное цитирование
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Aug 3 2014, 19:31
Сообщение #4


фанат дивана
******

Группа: Свой
Сообщений: 3 387
Регистрация: 9-08-07
Из: Уфа
Пользователь №: 29 684



Цитата(allsettingsdone @ Aug 3 2014, 23:21) *
Дело в том что не нужны костыли в проекте, для того что бы та или иная ошибка не выскакивала. Я бы хотел сделать "скелетный" проект для Sublime text2

При чём тут вообще Sublime text? Вам надо найти нормальный makefile. Именно из него компилятор и узнает, какие файлы у вас подключены и с какими ключами их компилировать.
Например, посмотрите пример от scmRTOS, там есть работающий makefile. (И стартап, про необходимость которого вам сказал Genadi Zawidowski, там тоже есть.)


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
psL
сообщение Aug 3 2014, 19:40
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 526
Регистрация: 5-08-05
Пользователь №: 7 390



startup нужен для начальной инициализации процессора (прерываний, стека и т.п.), т.е. для создания окружения в котором уже м.б. запущена функция main. В этом файле обычно содержится нулевой вектор, откуда стартует программа при подаче питания или сбросе, а также вызов функции main.
Поскольку ОС отсутствует, программа обычно не возвращает никуда управления, а остается в вечном цикле for(;;){} или while(1) Поскольку он у вас отсутствует, линкер ищет функцию для передачи управления по завершению main
Насколько понимаю, Sublime это просто стучалка, у которой есть возможность вызова make для проекта. Самый простой способ разобраться со связкой компилятора и редактора - научиться сначала компилировать проект из командной строки. Например, можно взять референсный код мигания светодиодом или аналогичный для вашего или похожего процессора и научиться собирать его при помощи make. Далее подтянуть редактор. Далее уже заниматься программированием конкретной задачи под конкретный процессор.
Go to the top of the page
 
+Quote Post
Genadi Zawidowsk...
сообщение Aug 3 2014, 21:42
Сообщение #6


Профессионал
*****

Группа: Участник
Сообщений: 1 620
Регистрация: 22-06-07
Из: Санкт-Петербург, Россия
Пользователь №: 28 634



Вот Makefile проект под STM32F1xx - только запуск. Обратите внимание на размер ПЗУ и ОЗУ в файле *.ld

Сообщение отредактировал Genadi Zawidowski - Aug 3 2014, 21:44
Go to the top of the page
 
+Quote Post
jcxz
сообщение Aug 4 2014, 02:09
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 5 228
Регистрация: 3-07-08
Из: Омск
Пользователь №: 38 713



Цитата(psL @ Aug 4 2014, 01:40) *
startup нужен для начальной инициализации процессора (прерываний, стека и т.п.), т.е. для создания окружения в котором уже м.б. запущена функция main. В этом файле обычно содержится нулевой вектор, откуда стартует программа при подаче питания или сбросе, а также вызов функции main.

Стартап не выполняет никакой инициализации аппаратуры (типа прерываний и т.п.), а только готовит программное окружение для выполнения си-кода
(инит статитческих/глобальных переменных, памяти, стеков, режимов CPU и т.п.).
Аппаратуру можно начинать инитить уже в main().
Go to the top of the page
 
+Quote Post
allsettingsdone
сообщение Aug 4 2014, 20:17
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 32
Регистрация: 22-01-13
Пользователь №: 75 284



Так.. В первую очередь мне надо разобраться с синтаксисом makefile и *.ld , понять что за что отвечает и дальше уже пытаться собрать проект.
Go to the top of the page
 
+Quote Post
kolobok0
сообщение Aug 4 2014, 20:57
Сообщение #9


практикующий тех. волшебник
*****

Группа: Участник
Сообщений: 1 190
Регистрация: 9-09-05
Пользователь №: 8 417



Цитата(allsettingsdone @ Aug 5 2014, 00:17) *
...надо разобраться с синтаксисом makefile...


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

ну где то так...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 00:01
Рейтинг@Mail.ru


Страница сгенерированна за 0.01449 секунд с 7
ELECTRONIX ©2004-2016