2006 habe ich mir ein Propeller Demo Board zugelegt. Ich habe damit ein bischen rumgespielt und dann ist es in der Bastelkiste verschwunden. Der Grund war, diese SPIN Programmiersprache war mir doch etwas zu exotisch und nur ASM wollte ich mir nicht antun. Zwischendurch habe ich immer wieder mal C-Compiler gefunden, doch die kosten entweder richtig Geld (ICCprop) oder sind doch zu sehr mit SPIN belastet (Catalina C). Vor einigen Monaten habe ich mehr durch Zufall diese Seite gefunden: http://code.google.com/p/propgcc/ Dieser GCC Port befindet sich noch im ALPHA RELEASE Stadium ( GDB und eine IDE fehlen noch) Trotzdem konnte ich damit schon einige nette Applikationen programmieren und bin auch als "AlphaTester" unterwegs. Ich finde immer noch einige Bugs, aber die Leute vom Build Team sind dafür sehr dankbar und der bugfix wird sehr schnell durchgeführt. Mittlerweile "freunde" ich mich immer mehr mit diesem Chip an und die 8 parallelen CPUs zwingen ein wenig zum Umdenken gegenüber normalen interrupt gesteuerten Anwendungen. Meine eigenen Projekte sind hier: http://home.mnet-online.de/reimay/Projects/ mit freundlichen Grüssen Reinhard
> Der Grund war, diese SPIN Programmiersprache war mir doch etwas zu > exotisch und nur ASM wollte ich mir nicht antun. Und dann hast du dich entschlossen BASIC zu verwenden? Oder wieso hast du in Radiometer.c gleich vier goto auf einer Bildschirmseite? Olaf
@ Olaf Volltreffer: Da hast Du auf Anhieb die Stellen entdeckt, die ich immer schon ändern wollte, aber dann doch wieder vergessen habe. Danke für die Erinnerung !
Olaf schrieb: > Oder wieso hast du in Radiometer.c gleich vier goto auf > einer Bildschirmseite? Vier? Ich zähle sieben! Ok, vielleicht habe ich einen größeren Bildschirm als du ;-) Aber gut, lassen wir das. Die anderen Programmteile scheinen ja goto-frei zu sein.
> Da hast Du auf Anhieb die Stellen entdeckt, die ich immer schon > ändern wollte, aber dann doch wieder vergessen habe. Jaja, ist immer unangenehm wenn fremde Leute in den eigenen Source schauen. :-) Ich fand das Konzept mehrere Controller in einem Baustein zu haben auch schon immer ganz nett, allerdings fand ich die Vorstellung einen Controller mit etwas anderem als C zu programmieren auch absurd. Von daher Teile ich deine Einstellung das so ein gcc ganz nett sein koennte und man vielleicht auch mal einen Blick auf die Propeller werfen sollte sobald der gcc vernuenftig laeuft. Ich hab dazu aber mal eine Frage. (hab deinen Source nur ganz kurz ueberflogen) Mir ist nicht ganz klar mit welchen Strategien die einzelen C Funktionen auf die jeweiligen Prozessoren verteilt werden. Braucht es dafuer nicht eine Spracherweiterung? Und wie ist die Interprocesskomunikation gedacht? > Vier? Ich zähle sieben! Ok, vielleicht habe ich einen größeren > Bildschirm als du ;-) Ich glaub ich hab die Labels gezaehlt. :) Olaf
Allerdings scheint mit der Ansatz von XMOS etwas umgänglicher als der Propeller-Chip - ausser was den Chip bzw. dessen Gehäuse angeht.
1 | ///////////////////////////// propeller.h /////////////////////////////////
|
2 | |
3 | /**
|
4 | * start a cog with a parameter
|
5 | * the fields in parameter are:
|
6 | * 31:18 = 14-bit Long address for PAR Register
|
7 | * 17:4 = 14-bit Long address of code to load
|
8 | * 3 = New bit
|
9 | * 2:0 = Cog ID if New bit is 0
|
10 | * @param a - parameter value
|
11 | */
|
12 | #define coginit(id, code, param) __builtin_propeller_coginit( \
|
13 | (((uint32_t)(param) << 16) & 0xfffc0000) \
|
14 | |(((uint32_t)(code) << 2) & 0x0003fff0) \
|
15 | |(((id) ) & 0x0000000f) )
|
16 | |
17 | /**
|
18 | * start a new propeller cog
|
19 | * @param code - address of PASM to load
|
20 | * @param par - value of par parameter usually an address
|
21 | * @returns COG ID provided by the builtin function.
|
22 | */
|
23 | #define cognew(code, param) coginit(0x8, (code), (param))
|
24 | |
25 | ///////////////////////////////////////////////////////////////////////////
|
26 | |
27 | //////// Anwendungsbeispiel ///////////////////////////////////////////////
|
28 | |
29 | #define STACKSIZE 20
|
30 | |
31 | |
32 | void start_lmm(void *func, int *stack_top) |
33 | {
|
34 | extern unsigned int _load_start_kernel[]; |
35 | |
36 | /* push the code address onto the stack */
|
37 | --stack_top; |
38 | *stack_top = (int)func; |
39 | |
40 | /* now start the kernel */
|
41 | cognew(_load_start_kernel, stack_top); |
42 | }
|
43 | |
44 | |
45 | |
46 | // startet die Task_PWM_Pin7() auf dem nächsten freien cog
|
47 | start_lmm(Task_PWM_Pin7, cog_stack + STACKSIZE); |
48 | |
49 | /////////////////////////////////////////////////////////////////////////////////
|
zur Interprozesskommunikation verwende ich z.Zt. globale struct siehe zB. myrOBOT\lib\kernel.c hoffentlich ist dort kein GOTO mehr zu finden ;-)
R. M. schrieb: > hoffentlich ist dort kein GOTO mehr zu finden ;-) Hä? Das Wörtchen "goto" gehört zum Kernvokabular von C und man sollte es auch benutzen dürfen, ohne rote Ohren zu bekommen. Basta. Wer ist eigentlich so kühn, Konstrukte wie while(1) {...} besser zu finden als Marke: .... goto Marke; ? (Vorsicht! Wer while(1) {.... if(..) break; .. } wegen des break benutzt, ist m.E. bloß zu doof, die eigentliche (richtige) Abbruchbedingung zu formulieren. W.S.
W.S. schrieb: > Wer ist eigentlich so kühn, Konstrukte wie > while(1) {...} > besser zu finden als > Marke: .... goto Marke; > ? Dijkstra. "The unbridled use of the go to statement has as an immediate consequence that it becomes terribly hard to find a meaningful set of coordinates in which to describe the process progress. ... The go to statement as it stands is just too primitive, it is too much an invitation to make a mess of one's program." --- > The identifier in a goto statement shall name a label located > somewhere in the current function. > A continue statement shall appear only in or as a loop body. > A break statement shall appear only in or as a switch body or loop > body. Goto ist also eine fette Keule gegenüber break/continue in seinen möglichen Verwendungen. Zudem existiert keine Verwendung die über bedingte (inklusive der Trivialbedingungen true und false) Schleifen nicht gelöst werden kann. Goto erhöht daher die Komplexität (somit die Fehlerdichte) und liefert nur sehr geringen Mehrwert. Für den größten Teil der Goto Nutzer halte ich diesen Stil als Sackgasse. Es sind seltenst diejenigen, die Erklären könnten, warum in ihrem Code goto's Vorteile die Nachteile überwiegen. Kannst du einen solchen Fall konstruieren?
Hay R. M. Für den Propeller Compiler den Alpha-Test machen und dann mit diesen Warmduschern über goto diskutieren? Wie passt das zusammen :-) Ein echter Programmierer kümmert sich doch nicht um so eine Anfängerregel.
>Dieser GCC Port befindet sich noch im ALPHA RELEASE Stadium >( GDB und eine IDE fehlen noch) Ich frage mich immer wieder, warum so viele Leute meinen, eine IDE gehört zum Compiler oder umgekehrt herum und denken, dass das nicht komplett ist, wenn man einen einzelnen Compiler bekommt. Ja, ich verwende vim und screen, fühl mich aber deswegen nicht elitär und hab auch nichts gegen IDEs und grafische Editoren, nur denke ich, sollten viele dieses "IDE+Compiler-Denken" ablegen ;) Ich hab auch schon einiges mit dem Propeller gemacht, nur war ja bisher das Problem, dass es keinen guten, freien C Compiler gab. SPIN ist toll, aber schnarchlahm und sich in einen neuen Assembler für einen einzigen Chip einarbeiten wollte ich dann auch nicht... Vielleicht wirds ja noch was, bevor er Großvater wird ;) Gibt den Propeller ja auch schon gut 5 Jahre...
Goto gehört zum Sprachumfang von C/C++. Warum solle das ein α-Tester nicht testen dürfen?
Jeder der einzelnen Cores (COGs) hat seinen eigenen kleinen Speicher, afaik 2k.
Max schrieb: > Für den größten Teil der Goto Nutzer halte ich diesen Stil als > Sackgasse. Ja. > Es sind seltenst diejenigen, die Erklären könnten, warum in > ihrem Code goto's Vorteile die Nachteile überwiegen. > Kannst du einen solchen Fall konstruieren? Gotos sind durchaus üblich und IMHO sinnvoll bei Funktionen die viele Fehlerbehandlungsfälle durchlaufen müssen, da wird mittels entspr. "goto error_out" der Code doch um einiges vereinfacht. In den meisten anderen Fällen sollte man goto aber in der Tat vermeiden.
Nils S. schrieb: >>Dieser GCC Port befindet sich noch im ALPHA RELEASE Stadium > >>( GDB und eine IDE fehlen noch) > > Ich frage mich immer wieder, warum so viele Leute meinen, eine IDE > > gehört zum Compiler oder umgekehrt herum und denken, dass das nicht > > komplett ist, wenn man einen einzelnen Compiler bekommt. ich hab das erwähnt, wegen der Antwort vom Build Team auf die Frage, was sie davon halten auf den propgcc in einem Forum namens < Mikrokontroller.net> aufmerksam zu machen. " I think that sounds like a good idea. It's certainly good to get more exposure for propgcc and more testers to help us improve it. The only thing I ask is that you please make it clear that this is an alpha release. It is missing some important features (like an IDE and debugger), and people using it can expect to find bugs! Thanks, " meine eigene Meinung: a GUI is nice, but not essential
War ja kein Vorwurf direkt an dich, ich sehe das genauso wie du.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.