|
|
  |
свежак KGP win32/arm/avr/mips/m68k, GNU tools chain |
|
|
|
Apr 14 2009, 19:05
|

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

|
свежак для Coretex-M3 довольно много свежего : ветка gcc 4.5.0 новый релиз newlib 1.17.0 от себя добавил мультилиб специально оптимизированый под Cortex-M3, в нем немного поэксперементировал с оптимизацией Недельку потестил на stm32f103rbt, крутим подтюненый FreeRTOS 5.2.0 c 6 задачками USB,UART, софтварный ARINC, debug trace facility... все работает без глюков. пробуйте http://www.klen.org/Files/DevTools/kgp_cor...1.0.20090413.7zпоскольку сборка только для кодогенерации под Cortex-M3 был проделан эксперемент : максимально компактный дистрибутив, для этого удалено все лишнее. В итоге сборка весит всего 7.07 мегабайт.
|
|
|
|
|
Jun 3 2009, 16:12
|

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

|
Продолжаю ковыряния:-) Дошёл до C++. Не работает  Код >arm-kgp-elf-g++ -v -c main.cpp Using built-in specs. Target: arm-kgp-elf Configured with: ../../src/gcc/configure ../../src/gcc/configure --prefix=/kgp_arm --target=arm-kgp-elf --host=i686-pc-mingw32 --build=i686-pc-mingw32 --disable-nls --disable-shared --disable-threads --disable-libssp --disable-libmudflap --disable-libgomp --enable-interwork --enable-multilib --with-newlib --with-headers=../../src/newlib/newlib/libc/include --with-float=soft --enable-languages=c,c++,fortran -v CC='distcc gcc -pipe' Thread model: single gcc version 4.4.0 20090207 (experimental) (GCC) Klen's GCC package (KGP) for ARM/elf platform see latest build in www.klen.orgCOLLECT_GCC_OPTIONS='-v' '-c' '-mfloat-abi=soft'
cc1plus -quiet -v -iprefix d:\kgp\bin\../lib/gcc/arm-kgp-elf/4.4.0/ -D__USES_INITFINI__ main.cpp -quiet -dumpbase main.cpp -mfloat-abi=soft -auxbas e main -version -o C:/Temp/cci3DU9c.s arm-kgp-elf-g++.exe: CreateProcess: No such file or directory cc1plus-а нет в наборе. И почему 4.4.0 ? Очень бы хотелось чтоб это заработало, потому что с Вашей сборкой у меня складываются отношения гораздо более удачно, чем со сборкой от CodeSourcery:) ------------ Ага, вот оно что. Вернул из заначки папки \lib\gcc\arm-kgp-elf\4.4.0\ и \libexec\gcc\arm-kgp-elf\4.4.0\ и файлы \arm-kgp-elf\lib\libc.a \arm-kgp-elf\lib\libm.a \arm-kgp-elf\lib\libstdc++.a - заработало. Даже ножкой дрыгает Но меня немного смущает вся эта мешанина.
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
Jun 4 2009, 03:23
|

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

|
Цитата(AHTOXA @ Jun 4 2009, 00:59)  Объекты глобальные. Стартап свой, вернее, из примера 4-BlinkLeds порта scmRTOS под STM32 под gcc. (который c http://mercurial.intuxication.org/hg/scmrtos-cm3-gcc). Конструкторы вызываются. При компиляции тулчейном от CodeSourcery (arm-none-eabi-) пример даже работает, правда только с оптимизацией -O0. Меня это смущает  А arm-kgp-elf- здесь оплошал. ( Или я  ) не удивительно я C++ ниразу не тестировал - тока C/fortran в реальных текущих разработках. МЫСЛЬ испоьзовать С++ в микроконтроллерах просто ниразу НЕ ВЛЕЗЛА В МОЙ МОСК - РАЗМЕР ПРЕВЫШАЕТ ... куда катится мир? итак. невызываются конструкторы? конструкторы каких объектов, как размещаете - cтатически или new? посмотрим щас.. ------------------------------------------------- посмотрел: #include "cplus_test.h"
#include "stm32f10x_gpio.h"
extern uint32_t _bss_end_ ; uint32_t end = _bss_end_ ;
class blinker { private: uint32_t ftimeout ; uint32_t ftick_count ;
public: blinker(uint32_t timeaut) { ftimeout = timeaut ; }
~blinker() { };
void count_loop(uint32_t count) { ftick_count = xTaskGetTickCount(); for ( uint32_t acount = 0 ; acount < count ; acount ++ ) { GPIOC->BRR = 0x0001000; vTaskDelayUntil( &ftick_count , ftimeout); GPIOC->BSRR = 0x0001000; vTaskDelayUntil( &ftick_count , ftimeout); } }
void permanent_loop() { ftick_count = xTaskGetTickCount(); while(1) { GPIOC->BRR = 0x0001000; vTaskDelayUntil( &ftick_count , ftimeout); GPIOC->BSRR = 0x0001000; vTaskDelayUntil( &ftick_count , ftimeout); } } };
void test_constr_destr() { NOP(); blinker bl(50) ; bl.count_loop(100) ; NOP(); }
volatile portTickType tick_count ; xTaskHandle cplus_debug_led_task_handle ; void cplus_debug_led_task_code (void* param) { (void)param ; blinker bl(250) ; NOP(); test_constr_destr() ; NOP(); bl.permanent_loop() ;
}вот этот код работает объекты статически создаются (в таком случае явно вызывается конструктор) и даже работают деструкторы не вызываются при выходе из функции в стеке которых они создались (причины на то есть) тоесть глобальные оъекты можно использовать. тока зачем это нада? если все доелать(деструкторы) то в флеш еще потянется куча кода из libstdc++ и libsupc++ который обеспечивает например вызов деструкторов оъектов созданых в стеке функций... с этого места начнется полный завал.
|
|
|
|
|
Jun 4 2009, 06:48
|

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

|
Цитата(klen @ Jun 4 2009, 09:23)  не удивительно я C++ ниразу не тестировал - тока C/fortran в реальных текущих разработках. МЫСЛЬ испоьзовать С++ в микроконтроллерах просто ниразу НЕ ВЛЕЗЛА В МОЙ МОСК - РАЗМЕР ПРЕВЫШАЕТ ... куда катится мир? Ненене:-) Если аккуратно, то ничего не превышает, даже наоборот! Минимальный пример scmRTOS сильно меньше минимального примера FreeRtos:) Объекты -- статические, глобальные. В смысле - совсем глобальные, когда объект объвлен вне функции. То есть должен создаваться при инициализации. Плюс маленькие объектики на стеке, типа TCritSect. Они, конечно, должны разрушаться при выходе из функции. По-моему, стандартные библиотеки тут не при делах. Цитата вот этот код работает объекты статически создаются (в таком случае явно вызывается конструктор) и даже работают деструкторы не вызываются при выходе из функции в стеке которых они создались (причины на то есть) Как компилировали? Голым свежаком 4.5.0? Или с либами от 4.4.0? То, что не вызываются деструкторы - это грустно. Если уж для MSP или даже для AVR это не является слишком тяжёлым бременем, то уж для АРМов-то это вообще семечки Цитата тоесть глобальные оъекты можно использовать. тока зачем это нада? если все доелать(деструкторы) то в флеш еще потянется куча кода из libstdc++ и libsupc++ который обеспечивает например вызов деструкторов оъектов созданых в стеке функций... с этого места начнется полный завал. Почему "доделывать"? Я не очень понимаю всю кухню, но разве в gcc этого нет?
--------------------
Если бы я знал, что такое электричество...
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|
|