[elektro] OT: Lazarus
Móczik Gábor
pm_levlista at progzmaster.hu
Fri Dec 20 22:48:03 CET 2013
2013.12.20. 20:57 keltezéssel, Lajos Rancz írta:
> Már hogy ne tesztelnek! Nálunk van egy Cortex A8-on (meg ARM926EJ-S-en)
> futó eléggé széjjel templatezett C++ kód (Linux alatt, gcc 4.6, most
> tervezünk áttérni gcc 4.8.1-re, C++11 feature-ök miatt) plusz Cortex M3-on
> futó viszonylag kevés template kódot tartalmazó app (TI compiler). Egyedül
> a TI DSP compiler nem szereti (annyira) a C++-ot, de inkább a saját
> template kódokkal van probléma, nem az STL-el vagy a sima osztályokkal.
> Szóval bátran lehet C++-t használni akár kis órajelű kevés RAM-ot
> tartalmazó kütyüknél is, de tisztában kell lenni a szabályokkal (amik
> sokkal számosabbak a sima C-nél)
Egyelőre engem a sima osztályok érdekeltek volna a C++ -ban lévő egyéb
komoly cucc nélkül, de legutóbb nekem nem sikerült.
Na jó, tettem egy kicsit komolyabb erőfeszítést.
CooCox CoIDE legújabb verzió, STM32F407ZGT6 chip
Egy eszméletlen bonyolult CPP fájl hozzáadásával máris indult a művelet:
../../gcc-4.2.2/gcc/config/arm/unwind-arm.c:464: undefined reference to
`__exidx_start'
../../gcc-4.2.2/gcc/config/arm/unwind-arm.c:464: undefined reference to
`__exidx_end'
Nem nagy kunszt, 10-15 perc guglizás után kiderült, hogy nem jó a linker
script amit az IDE generál, és itt egy minta:
http://www.brc-electronics.nl/component/kunena/5-Programming-and-software/615-Coocox-and-C-cpp?Itemid=0
Onnan a sample linker scriptet kimásolva majdnem jó is, csak a memória
címeket kell átírni az eredeti scriptben lévő címekre. Ja, meg persze a
neveket, mert nem egyezik, tehát a copy-paste után is van munka.
Build sucessful. Zsír. :-)
Eddig marhára user-friendly, pont erről szól a másik téma, hogy ha már
IDE-t használunk, hogy kényelmes legyen és generáljon egy linker
scriptet, akkor hadd ne kézzel szerkesszem már...
Akkor talán hozzunk létre egy példányt.
CTest1 ts;
ts.set_a(22);
[cc]
D:\projects\demo\stm32-e407\STM32-E407_blink_FLASH/main.cpp:112:
undefined reference to `__cxa_end_cleanup'
[cc] ..\obj\main.o: In function `main':
[cc] ..\obj\main.o:(.ARM.extab.text.main+0x0): undefined
reference to `__gxx_personality_v0'
Újabb pár perc guglizás után kiderült, hogy vélhetően az a hiba, hogy
gcc-vel fordítja g++ helyett a kódot. Azonban hogy ezt hogy kéne elérni,
az rejtély, általában a CPP fájl kiterjesztés elég szokott lenni. Itt
kissé megállt a tudomány.
Bizonyára megoldom ha még tökörészek vele, de azért példának azt hiszem
ez így elég jó, hogy mennyire is nem működik ez még out-of-the-box. Maga
a compiler bizonyára hibátlan, de a körítés még nem tökéletes. Kevés
érdeklődő van, ezért nincs szénné tesztelve ez a terület. Tele van a net
hasonló problémákkal.
More information about the Elektro
mailing list