Kerne von Prozessor ansteuern

OP #3491580
Lesenswert?
• ▲
▼
Hallo Zusammen

Ich habe ein XK-1A Development Kit. Ich will mit xTIMEcomposer studio 
ein einfaches Programm schreiben, in dem ich mehrere Kerne(Prozessor hat 
8 Kerne) benutze. Hier ist mein Programm:
1
#include <xs1.h>
2
#include <stdio.h>
3
#include <platform.h>
4

5
out port led1 = XS1_PORT_4F;
6

7
on stdcore[0] : in port button1 = XS1_PORT_1K;
8
on stdcore[1] : in port button2 = XS1_PORT_1L;
9

10

11
int main(void)
12
{
13
        while(1)
14
        {
15
            button1 when pinseq(0) :> void;
16
                led1 <: 0b1100;
17

18
            button1 when pinseq(1) :> void;
19
                led1 <: 0;
20

21
            button2 when pinseq(0) :> void;
22
                led1 <: 0b0011;
23

24
            button2 when pinseq(1) :> void;
25
                led1 <: 0;
26
        }
27
}

Mit dem Befehl pinseq(0) warte ich, bis der Taster "button1" gedrückt 
wurde(Taster sind low-active). Danach leuchten "LED1" und "LED2". Bei 
pinseq(1) warte ich, bis der Taster "button1" losgelassen wurde und 
danach werden alle LEDs ausgeschalten. Dasselbe mache ich mit Taster 
"button2", schalte jedoch "LED3" und "LED4" ein und aus. Mit den zwei 
Kernen möchte ich bezwecken, dass ich die Taster unabhängig voneinander 
drücken kann und nicht die Reihenfolge abarbeiten muss(pinseq() 
blockiert Programm, bis Bedingung erfüllt ist).

Mein Problem ist: wenn ich alles mit Kern0 (stdcore[0]) mache, 
funktioniert es, muss aber die Reihenfolge abarbeiten. Möchte ich aber 
Kern1(stdcore[1]) für "button2" benützen, gibt er einen Fehler aus(siehe 
Anhang).

Weiter Infos zum Kerne-Programmieren sind hier ab Seite 30:
1
https://www.xmos.com/download/public/XC-Programming-Guide(X1009B).pdf

Danke Für eure Hilfe
Gruss prichner

PS. Ich hoffe ihr versteht mein Problem ;)
Angehängte Dateien:
Gast #3491602
Lesenswert?
• ▲
▼
Philipp Richner schrieb:
> PS. Ich hoffe ihr versteht mein Problem ;)

nein vermutlich nicht.

Vorweg: Ich kenne die CPU nicht.

Aber mit einen Kern kann man (fast) beliebige Anzahl von Taster 
abfragen, man muss nur Funktionen Verwenden die nicht blockieren. Und 
ein C Programm läuft erst mal nur ein einen Thread - also auf einen Kern 
(die Verteilung von Threads auf Kerne übernimmt das BS).

Wenn die wirklich mehre dinge gleichzeitig machen willst, dann muss das 
mit Threads machen - aber damit handelt man sich auch neue Probleme ein.

Suche also lieber, eine Möglichkeit die Taster sinnvoller abzufragen. 
Was willst du sonst machen wenn du mal einen Tastatur mit 104 Tasten 
abfragen willst - 104 Kerne gibt es noch nicht.
OP #3491609
Lesenswert?
• ▲
▼
Es geht mehr darum, WIE man die Kerne ansteuert. Das mit den Tastern ist 
nur zum ausprobieren, ob es geht. Ich möchte wissen, wie die 
Konfiguration ist, um die Kerne einzeln zuzuteilen, damit später das 
Wissen vorhanden ist.
Weiter Infos zu Hardware, etc. sind hier :
1
https://www.xmos.com/products/xkits/starter#xk-1a-development-kit
Gast #3491635
Lesenswert?
• ▲
▼
[c]
/...
int main(void)
{
        while(1)
        par {                                //par fehlt!
            button1 when pinseq(0) :> void;
                led1 <: 0b1100;

            button1 when pinseq(1) :> void;
                led1 <: 0;

            button2 when pinseq(0) :> void;
                led1 <: 0b0011;

            button2 when pinseq(1) :> void;
                led1 <: 0;
        }
}
Gast #3491638
Lesenswert?
• ▲
▼
1
/...
2
int main(void)
3
{
4
        while(1)
5
        {
6
        par {                                //par fehlt!
7
            button1 when pinseq(0) :> void;
8
                led1 <: 0b1100;
9

10
            button1 when pinseq(1) :> void;
11
                led1 <: 0;
12

13
            button2 when pinseq(0) :> void;
14
                led1 <: 0b0011;
15

16
            button2 when pinseq(1) :> void;
17
                led1 <: 0;
18
            }
19
        }
20
}

Muss natürlich so sein, Klammerebene vergessen.
OP #3492133
Lesenswert?
• ▲
▼
Mittlerweile habe ich eine Lösung gefunden:
1
#include <xs1.h>
2
#include <stdio.h>
3
#include <platform.h>
4

5
on stdcore[0] : out port led1 = XS1_PORT_4A;
6
on stdcore[0] : out port led2 = XS1_PORT_1D;
7

8
on stdcore[0] : in port button1 = XS1_PORT_1K;
9
on stdcore[0] : in port button2 = XS1_PORT_1L;
10

11
void fooA();
12
void fooB();
13

14
int main(void)
15
{
16
    par{
17
        fooA();
18
        fooB();
19
    }
20
    return 0;
21
}
22
void fooA()
23
{
24
    while(1)
25
    {
26

27
        button1 when pinseq(0) :> void;
28
            led1 <: 0b1111;
29

30
        button1 when pinseq(1) :> void;
31
            led1 <: 0;
32
    }
33
}
34

35
void fooB()
36
{
37
    while(1)
38
    {
39
        button2 when pinseq(0) :> void;
40
            led2 <: 1;
41

42
        button2 when pinseq(1) :> void;
43
            led2 <: 0;
44

45
    }
46
}

Man kann die Ports vom Ausgang manuell noch verändern, wenn man dies 
will.

Danke für die Hilfe
prichner

Antwort schreiben

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.