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

 
 
85 страниц V  « < 11 12 13 14 15 > »   
Reply to this topicStart new topic
> свежак KGP win32/arm/avr/mips/m68k, GNU tools chain
Сергей Борщ
сообщение Jun 20 2009, 14:21
Сообщение #181


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(klen @ Jun 19 2009, 21:23) *
а где патч лежит, посмотрю, добавлю
Где в нете - не скажу. Есть в комплекте WinAVR в директории source.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 21 2009, 19:07
Сообщение #182


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

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



Обнаружил непорядок с arm-kgp-elf (c++).
При использовании pure virtual функций
Код
class foo
{
        virtual void bar() =0;

видимо подключается обработка exceptions, несмотря на флаг -fno-exceptions. В результате тянется malloc, который ругается на неопределённый символ end в _sbrk при линковке.

Хотелось бы этого избежатьsmile.gif

Пока вышел из положения, объявив функции пустыми:
Код
class foo
{
        virtual void bar() {}


Но, может, я что-то упустил из виду?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 22 2009, 03:58
Сообщение #183


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(AHTOXA @ Jul 21 2009, 23:07) *
Обнаружил непорядок с arm-kgp-elf (c++).
При использовании pure virtual функций
Код
class foo
{
        virtual void bar() =0;

видимо подключается обработка exceptions, несмотря на флаг -fno-exceptions. В результате тянется malloc, который ругается на неопределённый символ end в _sbrk при линковке.

Хотелось бы этого избежатьsmile.gif

Пока вышел из положения, объявив функции пустыми:
Код
class foo
{
        virtual void bar() {}


Но, может, я что-то упустил из виду?



а что стандарт говорит по этому поводу?

нада смотреть. скорее всего можно закомпилять libstdc++ так чтобы вообще исключений не использовались.

у меня в проектке есть virtual void bar() =0, и все линкуется. new и delete переопределены с использованием собственых malloc и free (свой менеждер кучи)

в любом случае спасибо. -fno-exception уменьшило размер .text в 2! раза lol.gif век учись - дураком помреш,
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 22 2009, 06:57
Сообщение #184


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

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



Цитата(klen @ Jul 22 2009, 09:58) *
а что стандарт говорит по этому поводу?


Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции? Видимо в arm-gcc решили это через какой-то специальный эксепшн. Наверное это не считается обычным exception-ом, и поэтому не регулируется флагом -fno-exceptions. Само по себе это неважно, мне не нравится что тянется malloc. Кто его знает, сколько оно там отожрёт хипаsmile.gif

В msp-gcc использование pure virtual не тянет за собой malloc. Надо проверить на avr-gcc...

Цитата
нада смотреть. скорее всего можно закомпилять libstdc++ так чтобы вообще исключений не использовались.

Даже не знаю, надо ли это... Думаю, что правильнее сделать, чтобы флаг -fno-exceptions действовал более чёткоsmile.gif
Цитата
в любом случае спасибо. -fno-exception уменьшило размер .text в 2! раза lol.gif


biggrin.gif


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 22 2009, 10:40
Сообщение #185


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(AHTOXA @ Jul 22 2009, 10:57) *
Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции? Видимо в arm-gcc решили это через какой-то специальный эксепшн. Наверное это не считается обычным exception-ом, и поэтому не регулируется флагом -fno-exceptions. Само по себе это неважно, мне не нравится что тянется malloc. Кто его знает, сколько оно там отожрёт хипаsmile.gif

В msp-gcc использование pure virtual не тянет за собой malloc. Надо проверить на avr-gcc...


Даже не знаю, надо ли это... Думаю, что правильнее сделать, чтобы флаг -fno-exceptions действовал более чёткоsmile.gif


biggrin.gif


что то я вообще сомневаюсь что для arm-elf вообще механизм эксепшенов реализован, так .. хвосты..
нада изучать вопрос и ковырятся...
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 22 2009, 11:01
Сообщение #186


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(AHTOXA @ Jul 22 2009, 09:57) *
Сомневаюсь, что там это есть. Как должна реагировать программа при вызове чисто виртуальной функции?
Должна вызвать переопределенную версию этой функции. Функция переопределяется в классе-потомке. Если в классе-потомке функция не переопределена, то попытка создания объекта такого класса должна вызывать ошибку на этапе компиляции.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 22 2009, 11:20
Сообщение #187


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

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



Цитата(Сергей Борщ @ Jul 22 2009, 17:01) *
Должна вызвать переопределенную версию этой функции. Функция переопределяется в классе-потомке. Если в классе-потомке функция не переопределена, то попытка создания объекта такого класса должна вызывать ошибку на этапе компиляции.


Точно, не компилится. Я почему-то был уверен, что там будет только warning. С дельфями перепуталsmile.gif
Тогда вообще непонятно, зачем цепляются исключения...


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
alx2
сообщение Jul 22 2009, 14:17
Сообщение #188


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(klen @ Jul 22 2009, 15:40) *
что то я вообще сомневаюсь что для arm-elf вообще механизм эксепшенов реализован, так .. хвосты..
Оп-па... А что такое там с исключениями? А то я ими довольно широко пользуюсь, до сих пор на неприятности не нарывался... Считаете, на них нельзя так смело полагаться?


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 23 2009, 07:55
Сообщение #189


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(alx2 @ Jul 22 2009, 18:17) *
Оп-па... А что такое там с исключениями? А то я ими довольно широко пользуюсь, до сих пор на неприятности не нарывался... Считаете, на них нельзя так смело полагаться?


а у Вас все работает? smile.gif
поделитесь опытом, как это происходит.

я довольно смутно представляю как работает С++ в плане исключений применительно к мелким контролерам. поэтому и написал что "неуверен...", нада было написать "незнаю"


2_AHTOXA
и должна вроде..
виртуальные функции работают, тут все ок. я имел ввиду только исключения! VMT как и положено в классах кладется по нулевому смещению, в классе потомке выбирается адресс из нее и все работает, у меня так обертка к задачам FreeRTOS сделана., функцияя кода задачи чисто виртуальная в базовом классе. А вот исключения дело темное!

например происходит обращение к NULL или вообще за диапазоном адресации какойнить шины - ядро генерит чтото типа bus abort а дальше то че? Вот тут видимо в обработчике и нада руками приуручивать механизм обработки исключений(библиотечные вызовы ) к конкретному механизму их генерации (аппаратные прервыания по косякам с памятью например).

для "не сильно мелких процов" типа ARM720... далее, хде есть MMU, Linux, и тд как я думаю эта прикрутка уже сделано в ядре линуха так как ядро и реализация libc конфигуртся под конкретный проц! я хрюнделем хорошо перерыд ядро линуха и uLibc когда делал девас на Тионе c EP9312, там видать в исходниках все это, и как системные вызовы прикручены к железке и тд.

для armv4 armv7 такого нет, может есть? и все работает как у alx2??? мне очень иньтересно smile.gif

короче говоря я так это понимаю, если не прав то поправте.

в студию приглашаются специалисты по внутренней реализации C++ и отдельно к микрофону alx2, расказать как у него работают С++ исключения и собсно на чем?
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Jul 23 2009, 08:13
Сообщение #190


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(klen @ Jul 23 2009, 10:55) *
например происходит обращение к NULL или вообще за диапазоном адресации какойнить шины
Тут вы смешали в кучу исключения ядра ARM и плюсОвые исключения, которые генерятся программистом посредством ключевого слова throw.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Jul 23 2009, 09:18
Сообщение #191


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

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



Цитата(klen @ Jul 23 2009, 13:55) *
виртуальные функции работают, тут все ок. я имел ввиду только исключения! VMT как и положено в классах кладется по нулевому смещению, в классе потомке выбирается адресс из нее и все работает, у меня так обертка к задачам FreeRTOS сделана., функцияя кода задачи чисто виртуальная в базовом классе. А вот исключения дело темное!


Непонятно только, почему при упоминании чисто виртуальных функций подтягивается malloc? Вот что меня волнует более всегоsmile.gif

Про исключения - Сергей Борщ уже сказал, это не те исключения.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
alx2
сообщение Jul 23 2009, 11:35
Сообщение #192


Местный
***

Группа: Участник
Сообщений: 340
Регистрация: 25-10-05
Из: Пермь, Россия
Пользователь №: 10 091



Цитата(klen @ Jul 23 2009, 12:55) *
а у Вас все работает? smile.gif
поделитесь опытом, как это происходит.
Да, работает. throw исключение кидает, catch его ловит. Все в соответствии с правилами языка...


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
klen
сообщение Jul 25 2009, 10:43
Сообщение #193


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



свежак для ARM
все кроме openocd 20090724
в OOCD чето сломали, падает при записи в флеш, поэтому положил предыдущую сборку.


www.klen.org/Files/DevTools/kgp_arm_cortex-m3_20090724.7z - обрезанна, для кортекса.
www.klen.org/Files/DevTools/kgp_arm_full_20090724.7z - полня


свежак для win32
также 20090724
www.klen.org/Files/DevTools/kgp_mingw32_20090724.7z
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Sep 1 2009, 18:04
Сообщение #194


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

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



Цитата(AHTOXA @ Jul 23 2009, 15:18) *
Непонятно только, почему при упоминании чисто виртуальных функций подтягивается malloc?


Посмотрел более предметно. Подтягивается не только malloc, подтягиваются-таки и исключения, как я и предполагал.
От банальной замены
Код
    virtual void putch(char ch) { (void)ch; }

на
Код
    virtual void putch(char ch) = 0;

мой 14-килобайтный проект подрос до 66К sad.gif

Подтягивается некая __cxa_pure_virtual, за ней write и std::terminate().
А уж из std::terminate() - кранты, _Unwind_SjLj_Register, __cxa_begin_catch, __cxa_end_catch и вся остальная кампания, вплоть до RTTI smile.gif

Сдаётся мне, что это всё-таки баг, ибо флаг -fno-exceptions запрещает исключения.

ЗЫ. Получается, всё же есть возможность создать экземпляр класса с чисто виртуальной функцией?


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Sep 2 2009, 11:40
Сообщение #195


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Цитата(AHTOXA @ Sep 1 2009, 22:04) *
Посмотрел более предметно. Подтягивается не только malloc, подтягиваются-таки и исключения, как я и предполагал.
От банальной замены
Код
    virtual void putch(char ch) { (void)ch; }

на
Код
    virtual void putch(char ch) = 0;

мой 14-килобайтный проект подрос до 66К sad.gif

Подтягивается некая __cxa_pure_virtual, за ней write и std::terminate().
А уж из std::terminate() - кранты, _Unwind_SjLj_Register, __cxa_begin_catch, __cxa_end_catch и вся остальная кампания, вплоть до RTTI smile.gif

Сдаётся мне, что это всё-таки баг, ибо флаг -fno-exceptions запрещает исключения.

ЗЫ. Получается, всё же есть возможность создать экземпляр класса с чисто виртуальной функцией?


laughing.gif
зато работают исключения (которые нам нах ненужны на контроллерах)

будет время залезу внутрь и посмотрю че происходит по fno-exceptions, во всяком случае после прересборки мои проекы на 600% ужались.


про malloc в эксепшенах мне уже просветили.
как минимум исключение пытаеся дернуть память чтоб сообщение(или контекст исключения) создать которое передается обработчику.

нахер все это нада вырубать.

ктонить объяснит? есть ситуации когда без исключений не написать кода?
Go to the top of the page
 
+Quote Post

85 страниц V  « < 11 12 13 14 15 > » 
Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th June 2025 - 10:25
Рейтинг@Mail.ru


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