Easyelectronics.ru

Электроника для всех
Текущее время: 11 июл 2020, 07:37

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 318 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13  След.
Автор Сообщение
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 12:56 
Старожил

Зарегистрирован: 20 апр 2017, 09:13
Сообщения: 214
Откуда: Копейск
ну вот и первый отрицательный опыт с с++
CooCox Version: 1.7.8

main.cpp
Код:
#include "periphery.h"

int main(void)
{
   some_class test;

    while(1)
    {
    }
}


periphery.h
Код:
#include <stm32f10x.h>
#include <stm32f10x_conf.h>
#include <stm32f10x_rcc.h>
#include <stm32f10x_gpio.h>
#include <stm32f10x_tim.h>

#include <stdint.h>

class some_class{
public:
   some_class();
   some_class(int var);
   int get_var();
private:
   int my_var;
};


periphery.cpp
Код:
#include "periphery.h"

some_class::some_class(){
   my_var = 10;
}

some_class::some_class(int var){
   my_var=var;
}

int some_class::get_var(){
   return my_var;
}



Код:
       [cc] d:/coocox/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7-m\libg.a(lib_a-abort.o): In function `abort':
       [cc] abort.c:(.text.abort+0xa): undefined reference to `_exit'
       [cc] d:/coocox/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7-m\libg.a(lib_a-signalr.o): In function `_kill_r':
       [cc] signalr.c:(.text._kill_r+0x10): undefined reference to `_kill'
       [cc] d:/coocox/5.4 2016q3/bin/../lib/gcc/arm-none-eabi/5.4.1/../../../../arm-none-eabi/lib/armv7-m\libg.a(lib_a-signalr.o): In function `_getpid_r':
       [cc] signalr.c:(.text._getpid_r+0x0): undefined reference to `_getpid
       [cc] '
       [cc] collect2.exe: error: ld returned 1 exit status


и хз куда копать :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 12:59 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
У вас походу отрабатывает arm-none-eabi-gcc, а должен arm-none-eabi-g++
Первый не умеет автоматом подключать с++ ные либы.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 13:12 
Старожил

Зарегистрирован: 20 апр 2017, 09:13
Сообщения: 214
Откуда: Копейск
я вообще ставил галку Support C++ в опциях линкера

там сейчас такая строка
Код:
-mcpu=cortex-m3; -mthumb; -Wall; -ffunction-sections; -g; -O0; -fno-exceptions;-fno-rtti;-DSTM32F103C8; -DSTM32F10X_MD; -DUSE_STDPERIPH_DRIVER; -D__ASSEMBLY__; -DSUPPORT_CPLUSPLUS; -I.;


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 14:06 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Тогда убедитесь, что это действительно в С++ дело.
Эти функции в рантаймовой либе обычно сидят, которая вам нужна?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 15:17 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4824
Откуда: Кемеровская область, Киселевск
Не маяться хуйней, а программировать микроконтроллер, заняться изучением Си и CMSIS
Установить KEIL.

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 15:59 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
bodigard писал(а):
я вообще ставил галку Support C++ в опциях линкера

там сейчас такая строка
Код:
-mcpu=cortex-m3; -mthumb; -Wall; -ffunction-sections; -g; -O0; -fno-exceptions;-fno-rtti;-DSTM32F103C8; -DSTM32F10X_MD; -DUSE_STDPERIPH_DRIVER; -D__ASSEMBLY__; -DSUPPORT_CPLUSPLUS; -I.;


Короче, удалось повторить проблему в линуксе на чисто сишном проекте, С++ тут ни при чем.

Если как обычно одной командой компилить и линковать исходники, то все работает, если по отдельности компилить исходники в объектные файлы, а потом линковать в екзешник, то может оказаться, что линкер не получает все нужные ключи
При следующих ключах Сишный компайле собирает проект
LDFLAGS = -L$(STD_PERIPH_LIB) -lstm32f0 -L$(LDSCRIPT_INC) -Tstm32f0.ld
LDFLAGS += -Wall -g -std=c99 -Os
LDFLAGS += -mlittle-endian -mcpu=cortex-m0 -march=armv6-m -mthumb
LDFLAGS += -ffunction-sections -fdata-sections
LDFLAGS += -Wl,--gc-sections -Wl,-Map=$(BUILD_DIR)/$(PROJ_NAME).map


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 16:00 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Oxford писал(а):
Не маяться хуйней, а программировать микроконтроллер, заняться изучением Си и CMSIS
Установить KEIL.


Читать ежедневно молебен святому кайлу


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 16:33 
Старожил

Зарегистрирован: 20 апр 2017, 09:13
Сообщения: 214
Откуда: Копейск
кстати keil такую конструкцию прожевал и не поперхнулся, видимо gcc
fr0ster спасибо попробую эти ключи


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 16:59 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
bodigard писал(а):
кстати keil такую конструкцию прожевал и не поперхнулся, видимо gcc
fr0ster спасибо попробую эти ключи


Кстати для интереса, посмотрите с какими ключами генерит код кайло, там правда шланг, но все равно интересно


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 18:27 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Добавил в сишный проект с++ный исходник функции, вызываю его из main.c линкую gcc компилю с и асм gcc, а с++ - g++
CFLAGS = $(addprefix -I,$(INC))(в этой строчке я перечисляю все папки с инклюдами)

Ниже добавляю параметры сборки
CFLAGS += -Wall -g -Os
CFLAGS += -mlittle-endian -mcpu=cortex-m0 -march=armv6-m -mthumb
CFLAGS += -ffunction-sections -fdata-sections
LDFLAGS = -L$(STD_PERIPH_LIB) -lstm32f0 -L$(LDSCRIPT_INC) -Tstm32f0.ld
LDFLAGS += -Wl,--gc-sections -Wl,-Map=$(BUILD_DIR)/$(PROJ_NAME).map

Но косяк при вызове с++ной функции fff из сишного кода, ругается "section .ARM.exidx.text.fff LMA [000000000800042c,0000000008000433] overlaps section .data LMA [000000000800042c,000000000800042f]"

Вечером подумаю


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 18:32 
Старожил
Аватара пользователя

Зарегистрирован: 18 май 2013, 20:43
Сообщения: 4824
Откуда: Кемеровская область, Киселевск
Что за любовь заниматься геммороем? Когда начнете программировать?

_________________
RADIOWOLF.RU


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 19:13 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
Oxford писал(а):
Что за любовь заниматься геммороем?

Кому как не вам знать ответ на этот вопрос.
Oxford писал(а):
Когда начнете программировать?

А вы?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 19:55 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
1 Линкеру передавать параметр --specs=nano.specs --specs=nosys.specs, с++ код собирается.
2 смешать с++ и с не вышло пока, в смысле с из с++ все ок, а с++ из с ломает линковку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 21:10 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Скрипт сборки в студию.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 21:11 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
сишные и плюсовые объектники отлично уживаются в месте. проблем быть не должно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 22:38 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Mirmik писал(а):
сишные и плюсовые объектники отлично уживаются в месте. проблем быть не должно.


Show


Если вызов С++ обернуть в extern "C", то выдает section .ARM.exidx.text.fff LMA [00000000080003dc,00000000080003e3] overlaps section .data LMA [00000000080003dc,00000000080003df], если вызов идет из С++ кода то все ок. И скрипт тот же самый


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 22:43 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Да, таки дело в кривом скрипте.
Взял рабочий из проекта STM32F0Snippet все работает.

Шаблон проекта на гитхабе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 23:29 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Я честно говоря, мало понимаю в тонкостях работы линкёра, но кажется мне, что проблема была с разметкой символа _sidata. А конкретно с тем, что он определён внутри секции, а не снаружи...

Но... Я тут ни разу не эксперт.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 14 сен 2018, 23:40 
Старожил

Зарегистрирован: 17 сен 2013, 13:53
Сообщения: 3313
Я тож не великий специалист по скриптам линкера.
Раскуриваю книгу по gcc, но там эта тема раскрыта слабо


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 15 сен 2018, 01:45 
Старожил
Аватара пользователя

Зарегистрирован: 24 июл 2012, 13:54
Сообщения: 856
Да. Информации по скриптам линковки мало. Особенно на русском языке. Но и на инглише тоже не густо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 16 сен 2018, 00:53 
Старожил
Аватара пользователя

Зарегистрирован: 28 янв 2010, 20:18
Сообщения: 581
Mirmik писал(а):
Да. Информации по скриптам линковки мало. Особенно на русском языке. Но и на инглише тоже не густо.


https://sourceware.org/binutils/docs/ld/

С учетом того, что работающий пример уже есть, достаточно. Мне было достаточно.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 27 сен 2018, 10:44 
Старожил

Зарегистрирован: 02 июл 2010, 23:41
Сообщения: 460
fr0ster писал(а):
iev91 писал(а):
Вред не в самих плюсах, а в том, что их противопоставляют пошаговому программированию.

"Разруха в головах"(С)Ф.Ф. Преображенский.
Вот так привыкнут к "пошаговому программированию", а потом рвут шаблоны, когда выясняют, что оказываеться прерывание может произойти внезапно и сломать стройную пошаговую схему. И что? Вред в С?

Думаю, ежели при "пошаговом программировании" писать нормально, то внезапное прерывание не сломает стройную пошаговую схему.
Ну а стройность – это хорошо, что в программировании, что в жизни.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 09 ноя 2018, 16:58 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2570
Вопрос по динамическому выделению памяти...
New вызывает функцию malloc() которая сидит в недрах какой то библиотеки и похоже - только в бинарном виде.
Но она знает что то про размер кучи?
Или нужно подключать nelwib и определять (переопределять) функцию _sbrk самостоятельно?
Если переписывать - то где в segger найти файл со скриптами линковщика?

Или в segger все автоматом делается "из коробки"?
Размер кучи можно указать в настройках.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 09 ноя 2018, 17:25 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2778
Я конечно тот же знаток плюсов, но new не вызывает никаких malloc(). Там свой обработчик operator new(), который std::bad_alloc генерит, если не удалось выделить памяти афаик.
Ред., а ну вот, нагуглил ссыль: https://habr.com/post/185662/


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Си++: быть или не быть
СообщениеДобавлено: 09 ноя 2018, 18:40 
Старожил
Аватара пользователя

Зарегистрирован: 26 окт 2013, 07:58
Сообщения: 2570
NStorm писал(а):
Я конечно тот же знаток плюсов, но new не вызывает никаких malloc(). Там свой обработчик operator new(), который std::bad_alloc генерит, если не удалось выделить памяти афаик.
Ред., а ну вот, нагуглил ссыль: https://habr.com/post/185662/


У меня оператор new переопределён

Show


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 318 ]  На страницу Пред.  1 ... 7, 8, 9, 10, 11, 12, 13  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB