Forum: Mikrocontroller und Digitale Elektronik Propeller Chip wird "erwachsen"


von R. M. (exp)


Lesenswert?

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

von Olaf (Gast)


Lesenswert?

> 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

von R. M. (exp)


Lesenswert?

@ 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 !

von Yalu X. (yalu) (Moderator)


Lesenswert?

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.

von Olaf (Gast)


Lesenswert?

> 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

von (prx) A. K. (prx)


Lesenswert?

Allerdings scheint mit der Ansatz von XMOS etwas umgänglicher als der 
Propeller-Chip - ausser was den Chip bzw. dessen Gehäuse angeht.

von R. M. (exp)


Lesenswert?

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 ;-)

von W.S. (Gast)


Lesenswert?

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.

von Max (Gast)


Lesenswert?

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?

von Lästermaul (Gast)


Lesenswert?

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.

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

>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...

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Goto gehört zum Sprachumfang von C/C++.
Warum solle das ein α-Tester nicht testen dürfen?

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

Was ist eigentlich "cog memory"?

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

Jeder der einzelnen Cores (COGs) hat seinen eigenen kleinen Speicher, 
afaik 2k.

von asd (Gast)


Lesenswert?

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.

von R. M. (exp)


Lesenswert?

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

von Nils S. (kruemeltee) Benutzerseite


Lesenswert?

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
Noch kein Account? Hier anmelden.