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

 
 
85 страниц V  « < 28 29 30 31 32 > »   
Reply to this topicStart new topic
> свежак KGP win32/arm/avr/mips/m68k, GNU tools chain
klen
сообщение Oct 6 2010, 09:36
Сообщение #436


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

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



свежак для арм
для 32 битной винды:
http://klen.org/Files/DevTools/kgp_arm_eab..._32_20101006.7z

для 64 битной:
http://klen.org/Files/DevTools/kgp_arm_eab..._64_20101006.7z

в принципе они ничем не должны отличатся ..., первая будет работать на обоих платформах.
как обычтно dyenhb имеется openocd

смешно но факт - вчерашнее состояние исходников binutils не разрешает кортексу-M3 использовать инструкцию SWI smile.gif - но я это поправил, это народ прикручивает M0 м M1. есть просьба к тем кто их может проверить - проверить компиллер и сообщить об успешности или наоборот.
Go to the top of the page
 
+Quote Post
spasbyspas
сообщение Oct 6 2010, 18:18
Сообщение #437


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 31-08-08
Пользователь №: 39 908



Уважаемые Клен. Ваши архивы повреждены!
Пожалуйста, исправьте их!
Спасибо!
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 6 2010, 19:42
Сообщение #438


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

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



Цитата(spasbyspas @ Oct 6 2010, 22:18) *
Уважаемые Клен. Ваши архивы повреждены!
Пожалуйста, исправьте их!
Спасибо!

как Вы определили что архивы битые. я сейчас скачал и проверил, архивы целые. оба. мож компилятор не работает - это тогда не архивы виноваты а я чтото недоложил. укажите симптомы. и еще, если вы будите пытатся запустить бинарники для 64 битной винды из под 32 битной - то она скажет что файлы повреждены или не являются исполняймыми.
Go to the top of the page
 
+Quote Post
spasbyspas
сообщение Oct 6 2010, 20:58
Сообщение #439


Участник
*

Группа: Участник
Сообщений: 29
Регистрация: 31-08-08
Пользователь №: 39 908




Пожалуйста, простите меня. После замены версии с нового вер. архиватора - все извлечено!

Сообщение отредактировал spasbyspas - Oct 6 2010, 20:59
Go to the top of the page
 
+Quote Post
dimay192
сообщение Oct 8 2010, 09:45
Сообщение #440


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 20-08-08
Пользователь №: 39 711



Клен, а ты делаешь сборки тулчейной для linux? или быть может выложишь исходники (исходники или патчи) с краткой инструкцией по самостоятельной сборке (опции сборки, ...) smile.gif Меня интересует тулчейн для армов

Сообщение отредактировал dimay192 - Oct 8 2010, 09:46
Go to the top of the page
 
+Quote Post
dimay192
сообщение Oct 11 2010, 08:38
Сообщение #441


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 20-08-08
Пользователь №: 39 711



Проблема у меня таже, что у AlexeyVoroshen (несколько постов тому назад) - накидал мне компилятор/линковщик всякого барахла под 50КБ во флеху.
До определенного момента все было ок (размер кода вроде соответствовал тому, что я писал)....
А потом - шаг влево, шаг вправо (даже при добавлении вызова ПУСТОЙ ф-ции) - захламляет флеха не пойми чем.
А перед этим говорит, "undefined reference to `_exit' ", "undefined reference to `_sbrk' " "undefined reference to `_sbrk' ", и т.д...
Ну на тебе заглушку syscalls.c.... Компилит... Вроде все нормуль... Но размер кода махом увеличивается на 50КБ! А проект- то пока еще пустой...
Операторы типа new,... и др. не использовал подавно.
.... Собрал тулчейн собственными силами вот из этого {gcc-4.5.1 | binutils-2.20 | newlib-1.18 | gdb-7.2 | openocd-0.5.0}
Причем, newlib собирал с опцией --disable-newlib-supplied-syscalls (сказать по правде, немного не понимаю - то ли при этом вообще должны запрещаться системные вызовы, то ли компилятор начинает искать их реализацию в других исходниках)....
Ну ладно, в любом случае проблема остается - непомерно великий код. хотя размер целевого кода не должен вылезти за пределы 32К флеши
(решил перейти с MSP430 на STM32, а заодно и перенести (переписать) существующий проект, который на первом занял менее 10КБ).
Брать STM32 со 128КБ флешой ради 50КБ ховнятены (прошу прощения за мой французский) - стремно.
Как же мне вразумить компилятор не тащить то, че он не должен тащить (не нужны мне системные вызовы, обработчики исключений, ... - без них как то работал на MSP-шнике)?!!!!!!!!!!!!!!!
С какими ключами можно собрать компилятор, чтобы тот размещал в памяти исключительно целевой код и самый минимум из необходимого, не относящегося к целевому коду?!!!!!!!!!!!!!!!

Сообщение отредактировал dimay192 - Oct 11 2010, 08:47
Go to the top of the page
 
+Quote Post
alx2
сообщение Oct 12 2010, 07:12
Сообщение #442


Местный
***

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



Цитата(dimay192 @ Oct 11 2010, 13:38) *
А потом - шаг влево, шаг вправо (даже при добавлении вызова ПУСТОЙ ф-ции) - захламляет флеха не пойми чем.
О каждом модуле, загруженном линкером, линкер отчитывается в map-файле - из-за какого символа модуль был загружен, и кто (какой модуль) на этот символ ссылался. Там же указаны все размеры всех загруженных в выходной файл секций. Как может быть "не пойми чем", если линкер отчитывается за каждый байт?

Цитата(dimay192 @ Oct 11 2010, 13:38) *
Как же мне вразумить компилятор не тащить то, че он не должен тащить (не нужны мне системные вызовы, обработчики исключений, ... - без них как то работал на MSP-шнике)?!!!!!!!!!!!!!!!
Во-первых, компилятор скорее всего ни при чем. Ссылки на системные вызовы, как правило, берутся из стандартных библиотек (в данном случае newlib). Вероятно, Вы используете библиотечные функции, требующие наличия системных вызовов, вот линкер их и подгружает.
Во-вторых, давайте разговаривать более предметно. Покажите ваш map-файл и перечислите модули, которые по вашему мнению не должны были загружаться линкером. Попробуем совместными усилиями разобраться, почему он это сделал. Без знания конкретных подробностей вряд ли можно сказать что-либо для Вас полезное.

Цитата(dimay192 @ Oct 11 2010, 13:38) *
С какими ключами можно собрать компилятор, чтобы тот размещал в памяти исключительно целевой код и самый минимум из необходимого, не относящегося к целевому коду?!!!!!!!!!!!!!!!
У меня компилятор всегда генерил только целевой код. Собираю как описано в документации.
На каком языке пишете?


--------------------
Всего наилучшего,
Alex Mogilnikov
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 12 2010, 07:34
Сообщение #443


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

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



проект в студию, будем искать виноватых.... и мы их обязателно выберем в итоге smile.gif



0. добавить в проект опции -fno-exceptions -fno-rtti, если их небыло
1. проверить результат и доложить.
2. обновить мою сборку, я наковырял небольшой породокс которым научился управлять но немогу пока объяснить - в новых сборках это учтено.
для 32 битной винды:
http://klen.org/Files/DevTools/kgp_arm_eab..._20101006_v2.7z
для 64 битной:
http://klen.org/Files/DevTools/kgp_arm_eab..._20101006_v2.7z

3. опять проверить и сравнить, результаты доложить.
4. будем детально разбиратся - 50кб на пустом месте это просто треш, это так оставлять нельзя - искать причину и жеч каленым железом.

некоторые размышления: если проект на С++ то еще както я могу разумно предположить куда копать(парадокс которыый я нашел), если С - то ваще абзац.... ниченипанятна

сейсас у меня демо проект в двух вариантах - один на С++ другой на С, содержит код FreeRTOS + несколько задач ( светодиод, USB, UART, тестовые сложные вычисления ) - в обои варантах получаю 10к++, С++ дает несколько процентов больше (есть виртуальные функции в обертках FreeRTOS вызовов) - такая ситуация то к чему я стремлю компиллер, у коллеги получилось 50к на пустом месте.... нестыковачка гдето...
Go to the top of the page
 
+Quote Post
dimay192
сообщение Oct 12 2010, 11:23
Сообщение #444


Участник
*

Группа: Участник
Сообщений: 28
Регистрация: 20-08-08
Пользователь №: 39 711



Значит такс:
1.проект на С++
В общем, структура кода приблизительно такова:
Главная ф-ция:
Код
ResourceManager RM;

int main(void)
{
  /*!< At this stage the microcontroller clock setting is already configured,
       this is done through SystemInit() function which is called from startup
       file (startup_stm32f10x_xx.s) before to branch to application main.
       To reconfigure the default setting of SystemInit() function, refer to
       system_stm32f10x.c file
     */
    RM.start();
}


Содержит два класса
Первый, базовый
Код
class PlatformAbstractionLayer
{
public:
    PlatformAbstractionLayer();
    virtual ~PlatformAbstractionLayer();
    inline void confGPIO(void);
    inline void confConnection(void);
    inline bool confSystemTimer(void);
protected:
    ...
};

inline void PlatformAbstractionLayer::confGPIO(void)
{

    //Единственное место, где я задействовал библиотеку STM32F10x_StdPeriph_Lib_V3.3.0
    ...
    GPIO_InitTypeDef GPIO_InitStructure;
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_All;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(GPIOA, &GPIO_InitStructure);
    GPIO_Init(GPIOB, &GPIO_InitStructure);
    GPIO_Init(GPIOC, &GPIO_InitStructure);
    GPIO_Init(GPIOD, &GPIO_InitStructure);
    ...

}

inline bool PlatformAbstractionLayer::confSystemTimer(void)
{
    return !SysTick_Config(SystemCoreClock / 1000);

}

!!!Остальные методы класса пусты!!!


второй, наследник
Код
class ResourceManager: public PlatformAbstractionLayer
{
public:
    ResourceManager();
    virtual ~ResourceManager();
    inline void start(void);
    inline void softTimersDecrement(void);
private:
    uint32 SoftTimerTicks[SOFT_TIMER_CNT];
    uint32 SoftTimerPeriod[SOFT_TIMER_CNT];
    uint32 SoftTimerFlags;
    inline void confHardware(void);
    inline void confSoftware(void);
};

inline void ResourceManager::start(void)
{
    this->confHardware();
    this->confSoftware();
    while(1)
    {}
}

inline void ResourceManager::softTimersDecrement(void)
{
    uint16 idx;
    for(idx = 0; idx < SOFT_TIMER_CNT; idx++)
    {
        if((this->SoftTimerTicks[idx] != 0) && (--(this->SoftTimerTicks[idx]) == 0))
        {
            this->SoftTimerTicks[idx] = this->SoftTimerPeriod[idx];
            this->SoftTimerFlags |= BV32(idx);
        }
    }
}

inline void ResourceManager::confHardware(void)
{
    this->confGPIO();
    this->confConnection();
    this->confSystemTimer();
}

inline void ResourceManager::confSoftware(void)
{

}

2.опции -fno-exceptions -fno-rtti использовал!
3.Компилил проект четырьмя сборками компилятора
а. CodeSourcery
б. kgp_arm_eabi_x86_32_20101006
в. Собственная сборка
г. Собственная сборка (newlib собирал с опцией (среди прочих, оптимизирующих размер кода) --disable-newlib-supplied-syscalls, с использованием файла-заглушки syscalls.c)
Результаты получились такие (размер секции .text в байтах):
CodeSourcery - 57936
kgp_arm_eabi_x86_32_20101006 - 5008
Собственная сборка (в) - 10636
Собственная сборка (г) - 7784

При определении класса PlatformAbstractionLayer как абстрактный:
Код
class PlatformAbstractionLayer
{
public:
    PlatformAbstractionLayer();
    virtual ~PlatformAbstractionLayer();
    inline void confGPIO(void);
    inline void confConnection(void);
    inline bool confSystemTimer(void);
protected:
    virtual inline void softTimersDecrement(void)=0;
    ...
};

ситуация меняется так (размер секции .text в байтах):
CodeSourcery - 57936
kgp_arm_eabi_x86_32_20101006 - 41716
Собственная сборка (в) - 65664
Собственная сборка (г) - 64728


Сообщение отредактировал dimay192 - Oct 12 2010, 11:32
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 12 2010, 14:05
Сообщение #445


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

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



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

нужно смотреть *.map и листинги - посмотреть что за код прилазит.

есть вариант что зачемто (нам это предстоит выяснить зачем) прилинковывается new delete которые могут использоватся внутренним кодом stdlibc++.

предоагаю еже один тесть - переопределите операторы new и delete - хотябы заглушки сделайте. Насколько я помню в stdlibc++ по умолчанию через new тянет свой стандартный аллокатор памяти - это жопа для микроконтроллеров, он страшный.... а вот если свой подсунуть в определении new то может эти 50кб и отвалятся... попробуйте.

а ведь интересные грабли имеем, не так ли коллеги?
Go to the top of the page
 
+Quote Post
GetSmart
сообщение Oct 12 2010, 15:04
Сообщение #446


.
******

Группа: Участник
Сообщений: 4 005
Регистрация: 3-05-06
Из: Россия
Пользователь №: 16 753



Цитата(klen @ Oct 12 2010, 19:05) *
а ведь интересные грабли имеем, не так ли коллеги?

Как скажете, маэстро.

(не смог сдержатьсяsmile.gif)


--------------------
Заблуждаться - Ваше законное право :-)
Go to the top of the page
 
+Quote Post
AHTOXA
сообщение Oct 12 2010, 18:39
Сообщение #447


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

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



Цитата(dimay192 @ Oct 12 2010, 17:23) *
Значит такс:
...
Код
    virtual inline void softTimersDecrement(void)=0;

Кхм! Не устаю повторять rolleyes.gif
Ну и от деструкторов, тем более виртуальных, в эмбеддед-приложениях, имхо, надо избавляться.


--------------------
Если бы я знал, что такое электричество...
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 12 2010, 18:57
Сообщение #448


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

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



Цитата(AHTOXA @ Oct 12 2010, 22:39) *
Кхм! Не устаю повторять rolleyes.gif
Ну и от деструкторов, тем более виртуальных, в эмбеддед-приложениях, имхо, надо избавляться.

а как от них избавишся если уничтожаеш экземпляр приведенный к базовому? тогда не вызовется деструктор потомка..

вопрос в дркгом - откуда стоько кода? пройтись по табличке VMT нужны такты и не так много как думают, а кода тут не нада - он тотже как при вызове виртуальныйх функций - механизм един.
Go to the top of the page
 
+Quote Post
ReAl
сообщение Oct 12 2010, 20:15
Сообщение #449


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Цитата(klen @ Oct 12 2010, 21:57) *
вопрос в дркгом - откуда стоько кода? пройтись по табличке VMT нужны такты и не так много как думают, а кода тут не нада - он тотже как при вызове виртуальныйх функций - механизм един.
Может я ошибаюсь, но на pure virtual функции, ставятся заглушки, которые могут потянуть за собой какой-то код exeptions, который за собой найдёт что потянуть. Не глядя на то, что ключ no-exceptions стоит — он на генерацию кода влияет, а не на то, что из библиотеки тянется.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post
klen
сообщение Oct 12 2010, 20:40
Сообщение #450


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

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



логичное объяснение. можно предложить так - генерить вызов какого либо пользовательского обработчика. это будет не по стандарту но для контроллеров пойдет.
Go to the top of the page
 
+Quote Post

85 страниц V  « < 28 29 30 31 32 > » 
Reply to this topicStart new topic
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0

 


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


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