Propeller Chip wird "erwachsen"

OP #2454873
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
Gast #2454983
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
Gast #2455565
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
OP #2455614
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 ;-)
Gast #2456269
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.
Gast #2456393
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?
Gast #2456417
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.
Persönliche Seite #2456428
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...
Gast #2456921
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.
OP #2456985
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren