Forum: Mikrocontroller und Digitale Elektronik Kerne von Prozessor ansteuern


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von TM F. (p_richner)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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 ;)

: Verschoben durch Moderator
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Bewertung
0 lesenswert
nicht lesenswert
Philipp Richner schrieb:
> PS. Ich hoffe ihr versteht mein Problem ;)
Das FPGA-Forum ist nicht das Richtige für dich...
Ich verschiebe den Thrad zu uC&Elektronik. Das passt besser.

von Peter II (Gast)


Bewertung
0 lesenswert
nicht 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.

von TM F. (p_richner)


Bewertung
0 lesenswert
nicht 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

von GB (Gast)


Bewertung
0 lesenswert
nicht 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;
        }
}

von GB (Gast)


Bewertung
0 lesenswert
nicht 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.

von GB (Gast)


Bewertung
0 lesenswert
nicht lesenswert
Sorry, immer noch ein Fehler, genaues steht auf S. 30 im Programing 
Guide.

von TM F. (p_richner)


Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.