C/C++

Makefile konvertálás

Fórumok

Üdv,
lehet, hogy nagyon lámer kérdés,
adott egy forrás, van hozzá configure, makefile.in, és makefile.am ,stb,
de nekem sima makefile-ra lenne szükségem
(Watcom-ra kéne hurcolnom a forrást, és ott dmake-kel fordítani...)
van erre megoldás?
A reményteli válaszokat előre is köszönöm!

C++: non-heap custom allocator for std::string

Fórumok

Sziasztok!

C++-hoz keresek olyan allocatort, ami előre lefoglalt memóriaterületen dolgozik, a "munkaterület" kezdeti lefoglalása után nem indít újabb foglalásokat a heap-en, hanem a munkaterületet osztja ki. Az allocator-nak std:string -re és std::vector-ra kell működnie, vagyis std::allocator -t szeretném kiváltani egy heap-et nem használó változatra. Ismertek erre már létező megoldásokat vagy érdemes magamnak megírni? Ha esetleg tudtok küldeni erre kód példákat, ne kíméljetek :)

Üdv:
Dandor

Oszcilloszkóp program fordítása

Fórumok

Sziasztok!

A sourceforge.net-en találtam egy számomra szimpatikus oszcilloszkóp progit, ami a hangkártya bemenő jelét tudja megjeleníteni.

http://sourceforge.net/project/showfiles.php?group_id=200880

A program rövid tájékoztatója azt ígéri, hogy multi-platformos. Letöltöttem a forráskódot, és elkezdtem nézegetni. Első meglepetés akkor ért, amikor az összes forráskódot végignéztem, de nem találtam a main() függvényt.

1. Hogyan lehet egy ilyen forráskódot lefordítani, ha nem szerepel benne egyébként a main() függvény. Ismereteim szerint ez kötelező tartozéka minden C++ programnak.

Ennek ellenére megkíséreltem UBUNTU Linux alatt lefordítani a programot a make paranccsal. A makefile.gcc fájlt átneveztem makefile-ra, és elindítottam a make parancsot. Természetesen csőd lett belőle, mivel a g++.exe fájl segítségével próbálta volna lefordítani a programot, és természetesen nekem nincs ilyenem UBUNTU Linux alatt.

2. Elképzelhető, hogy ez a program mégsem multi-platformos?

4. Sejti valaki, hogy hogyan lehet egyébként ezt a programot Windows alatt lefordítani? (Le lehet tölteni az EXE programot is, de engem nem az érdekel, hogy az meglegyen, hanem a fordítás módszere.)

5. Tudtok olyan oszcilloszkóp programot ajánlani, ami Linux alatt (és esetleg Windows alatt is) fordítható és futtatható?

Előre is köszönöm a segítő hozzászólásokat!

[Megoldva] Protected függvény hívása

Fórumok

Sziasztok.

A következő a gondom:
Adott két osztály, az ős, annak egy protected, tisztán virtuális függvénye, illetve a leszármazott, amely implementálja ezt a függvényt, és ugyanebben az osztályban egy másik függvényben kapott ős típusú paraméterre meg akarja hívni a protected függvényt.

A fordító közölte velem, hogy ez így nem fog menni:
class.cc: In member function ‘void B::g(const A&)’:
class.cc:7: error: ‘virtual void A::f() const’ is protected
class.cc:13: error: within this context

Azt szeretném megkérdezni, hogy hogyan tudom megoldani a problémát.

A kód nagyon leegyszerűsítve valami ilyesmi:


#include < iostream >

class A
{
protected:
virtual void f() const = 0;
};

class B: public A
{
public:
void g( const A& a ) { a.f(); }
protected:
virtual void f() const { std::cout << "Ok" << std::endl; }
};

int main()
{
B a, b;

b.g( a );

return 0;
}

(Hogy a .......)Grafikus memória direkt címzése. (Szóval overlay)

Fórumok

Sziasztok.

A címben megadott témában kellene valami jó kis doksi. (A Google a barátom tudom, de jelenleg cserbenhagyott) Az igazi az lenne ha C alapok lennének de jó asm és c++ is. Írtam egy képelemző programot, és az vele a gáz, hogy a proci akkor is 40-50%-on megy ha csak dobja a video-t. Szóval igen komoly sebességnövekedést érnék el egy direkt memória címzéssel.
Ja és linux alá természetesen.
Előre is köszönöm.

Szerk:
A fene gondolt erre vacak a kamera kernelmodulja. Na mindegy a lényeg, hogy megoldódni látszik a probléma, ugyanis akármivel nézem ezt a kamera képet azzal is 40-50%-on eszi a gépet. Rászurtam egy másik (típusú) kamerát a gépre és azzal gyönyörűen kb 3-6%-on eszi a gépet. Szóval megszivattam saját magam.Azért köszönöm a segítséget.

[Megoldva] C: incompatible implicit declaration

Fórumok

Sziasztok!

Egy figyelmeztetést kapok a gcc-től, amit nem értek. A kód ez lenne:


	char str[] = "xyz";
	size_t len;

	len = strlen(str);

Az utolsó sorra ezt az üzenetet kapom:

warning: incompatible implicit declaration of built-in function 'strlen'

Szerintetek, miért van?
A dokumentációm alapján az strlen() függvény size_t típust ad vissza. A program működik, de miért ír ilyen figyelmeztetést?

gcc version 4.2.4 (Ubuntu 4.2.4-1ubuntu3)

structura pointer

Fórumok

Kicsit belekeveredtem és már nem tudom hogy címezzek meg egy structura pointert.Lenne ez:


typedef char * char_pointer;

struct data_struct
{
   char_pointer data1;
   char_pointer data2;
   char_pointer data3;
};

......

struct data_struct *data_pointer;
char_pointer data_array[sizeof(struct data_struct)];

......

data_pointer=(struct data_pointer *)data_array[0];
printf("%s\n",data_pointer->data2);

...

Tehát egy a tömb elemei pont úgy követik egymást, mint a struktúra elemei szerintem.
De a kiiratásnál "Segmentation fault"-et kapok.

Mit is ronthatok el?

template template paraméterek gcc 4.3 & 4.1

Fórumok

Sziasztok!


#include < vector >
using std::vector;

template < class T, template < typename > class C >
class P
{
  C < T > data;
};

int main()
{
  P < float,std::vector > p;
}

fordítása :


$ g++-4.1 -Wall -pedantic -o p proba2.cxx
$ g++-4.3 -Wall -pedantic -o p proba2.cxx
proba2.cxx: In function ‘int main()’:
proba2.cxx:26: error: type/value mismatch at argument 2 in template parameter list for ‘template < class T, template < class > class C > class P’
proba2.cxx:26: error:   expected a template of type ‘template < class > class C’, got ‘template < class _Tp, class _Alloc > class std::vector’
proba2.cxx:26: error: invalid type in declaration before ‘;’ token
proba2.cxx:26: warning: unused variable ‘p’

Azaz 4.1 -essel lefordul, 4.3-al nem. Kitaláltam azonban rá egy megoldást, de ez nem platformfüggetlen hiszen az STL-es konténerek 2+ tpl paramétert várnak :


#include < vector >
using std::vector;

template < class T, template < typename T,typename A = std::allocator < T > > class C >
class P
{
  C < T > data;
};

int main()
{
  P < float,std::vector > p;
}

$ g++-4.3 -Wall -pedantic -o p proba2.cxx
$ g++-4.1 -Wall -pedantic -o p proba2.cxx
[code]

És a kérdés: Miért? Az első megoldás eddig olyan szépen működött.

értékadás string-ből

Fórumok

Lenne egy C vagy C++ kód ami fogad infót, ez lehet tcp-ről, file-ből, stb...
Ott beolvas egy string-et, amiben különböző értékadások vannak, pl.: alma=piros;korte=sarga;szilva=lila; ....
hogy tudnám e értékadásokat legegyszerűbben változóknak adni, tehát a char korte[50] változó felvenné a sarga értéket. Azaz hogy tudnam a stinget azonosítani a változóval. Olyan egysezrű megoldás triviális, mint végigkeresni az összes lehetőséget, és egyezés esetén kiválasztani, de gondolom van komplexebb megoldás is.

3c905C ethernet card driverének pár sora

Fórumok

Sziasztok!

Nem vagyok a naponta kernelt forgató típus, de gondoltam, hogy az amúgy jól működő 2.6.22.2-es kernelem frissítem. Mivel jó mga driver csak a 2.6.27-es kernelsorozathoz van és a 2.6.28-as még túl ropogós, ezért az új kernelem a vanilla 2.6.27.10 lesz.

Nem volt semmi gondom, amíg nem szerettem volna egyik nap a gépet wake on lan ébreszteni. Nem ébredt, holott a 2.6.22.2-tal még szépen működött :(
Itt jegyezném meg, hogy a kernelen kívül semmi más nem változott a rendszerben.

A két kernel bootolása között az alábbi dmesg külömbség fogadott:
régi kernelem:

Linux blackdragon 2.6.22.2 #1 SMP Sat Aug 11 21:17:50 CEST 2007 i686 GNU/Linux

ACPI: PCI Interrupt 0000:02:06.0[A] -> GSI 22 (level, low) -> IRQ 22
3c59x: Donald Becker and others.
0000:02:06.0: 3Com PCI 3c905C Tornado at f8810000.

új kernelem:

Linux blackdragon 2.6.27.10 #1 SMP Fri Jan 2 23:25:49 CET 2009 i686 GNU/Linux

3c59x 0000:02:06.0: PCI INT A -> GSI 22 (level, low) -> IRQ 22
3c59x: Donald Becker and others.
0000:02:06.0: 3Com PCI 3c905C Tornado at f8878000.
0000:02:06.0: WOL not supported.

Mivel a régi kernelben működött, gondoltam átveszem azt a kódrészletet a régi driverből, ami a wol-t érintheti.

Ezt tettem és a wol most szépen működik:

--- /usr/local/src/kernel-2.6.27.10-orig/linux-2.6.27.10/drivers/net/3c59x.c
+++ /usr/local/src/kernel-2.6.27.10/linux-2.6.27.10/drivers/net/3c59x.c
@@ -3120,13 +3120,7 @@
iowrite16(SetRxFilter|RxStation|RxMulticast|RxBroadcast, ioaddr + EL3_CMD);
iowrite16(RxEnable, ioaddr + EL3_CMD);

- if (pci_enable_wake(VORTEX_PCI(vp), PCI_D3hot, 1)) {
- printk(KERN_INFO "%s: WOL not supported.\n",
- pci_name(VORTEX_PCI(vp)));
-
- vp->enable_wol = 0;
- return;
- }
+ pci_enable_wake(VORTEX_PCI(vp), 0, 1);

/* Change the power state to D3; RxEnable doesn't take effect. */
pci_set_power_state(VORTEX_PCI(vp), PCI_D3hot);

Mivel programozói tudásom konvergál a nullához a C tudásom meg még annál is kevesebb, elmesélné nekem valaki, hogy milyen feltételvizsgálatot irtottam ki és ennek lehet-e káros hatása a hálókártyám működésére?

Előre is köszönöm a segítséget!

Bye, Fifi