C++ async und futures auf µC verwenden

#6096909
Wenn du eh schon ein zu den C++-Standardlibs kompatibles 
Multithreading-OS drauf laufen hast (da setzt die C++-Standardlib drauf 
auf), wird der overhead gegenüber einer „zu Fuß“ programmierten Lösung 
nahezu Null (und gegenüber dem Rest eh vernachlässigbar) sein.

Oliver
Gast #6096957
ich finde da die asynchrone Programmierung mit EventQueues interessant, 
also eher um viele threads zu vermeiden. Das geht auch ohne die Libs, 
aber mit Unterstützung der Sprache sollte das übersichtlicher werden.
In Javascript war async vielleicht nicht Vorreiter, ist damit aber sehr 
populär geworden. Threads brauchen viel Speicher durch eigene Stacks je 
Tasks, da sehe ich auf µC bei EventQueues Vorteile. Zumindest wenn in 
einem Thread Aufgaben kooperativ abgearbeitet werden. µC haben ja auch 
nur einen Kern um Aufgaben zu erledigen, von Konstrukten wie M7+M0 oder 
ähnlichen mal abgesehen.
Gast #6097170
Vincent H. schrieb:
> Das is ein x86 Test...
>
> /edit
> Blöd formuliert. Was ich mein is das is ein Host-Test. Der läuft nicht
> am Target.

nope, das ist ein Test für das Target mit Cortex-M irgendwas.

Und der Code im Anhang läuft, warum sollte er auch nicht? Die Newlib und 
std sind für Cortex-M implementiert. Sogar ein cout<< "hello"; 
funktioniert, ist dann aber mit +200 kB doch etwas viel des Guten.
1
Hello from BLACKPILL_F411CE
2
Mbed OS version: 99.99.99
3
test Future
4
start doSomethingElse
5
doSomethingElse done
6
diff: 4.000000

Was noch nicht geklappt hat ist der async call, da haut mir der Compiler 
Fehlermeldungen um die Ohren die ich noch nie gesehen habe. Die Zeilen 
hatte ich von Stackoverflow zusammengekratzt. Was ist da an dem 
std::async(std::launch::async, doSomething); faul? Irgendwas von 
incomplete type bemängelt der Compiler.
1
[Error] d:\Projects\Sn\LocalGit\test\Mbed5-Projects\apps\testFuture\source\main.cpp:36:58: invalid use of incomplete type 'class std::future<void>'
2
[ERROR] d:\Projects\Sn\LocalGit\test\Mbed5-Projects\apps\testFuture\source\main.cpp: In function 'int main()':
3
d:\Projects\Sn\LocalGit\test\Mbed5-Projects\apps\testFuture\source\main.cpp:36:58: error: invalid use of incomplete type 'class std::future<void>' 
4
   36 |     auto fut = std::async(std::launch::async, doSomething);
5
      |                                                          ^
6
In file included from d:\Projects\Sn\LocalGit\test\Mbed5-Projects\apps\testFuture\source\main.cpp:3:
7
c:\program files (x86)\gnu tools arm embedded\9 2019-q4-major\arm-none-eabi\include\c++\9.2.1\future:125:11: note: declaration of 'class std::future<void>'      
8
  125 |     class future;
9
      |           ^~~~~~
Angehängte Dateien:
#6097189
Johannes S. schrieb:
> invalid use of incomplete type 'class std::future<void>'

Sagt genau das aus, was es aussagt: An der relevanten Stelle braucht der 
Compiler die vollständige Klasse, kennt die aber nicht, sondern 
(vermutlich) nur eine Vorwärtsdeklaration davon.

Üblicherweise fehlt da ein include, in dem Fall wäre das <future>, warum 
auch immer.


Johannes S. schrieb:
> nope, das ist ein Test für das Target mit Cortex-M irgendwas.

Laut Beachreibung laufen die Unittests nicht auf dem Target, sondern 
nativ auf dem Host (Windows, Linux, Apple).

Oliver
Gast #6097199
Oliver S. schrieb:
> Laut Beachreibung laufen die Unittests nicht auf dem Target, sondern
> nativ auf dem Host (Windows, Linux, Apple).

da hst du Recht, ich habe das mit den greentea tests verwechselt, die 
laufen auf dem Target.

Das kann dann erklären warum futue nicht komplett ist, der header ist ja 
eingebunden.
Schade, ist die Zukunft doch nicht auf dem µC angekommen?
Gast #6097316
der g++ meldet mit -v unter anderem 'Thread model: single' und 
'configured with: --disable-threads'. Hat also definitiv keine 
Unterstützung dafür. Ok, das ist OS abhängig aber ein printf kann man ja 
auch umleiten.

Der ARMC6 redet etwas mehr Klartext:
1
[Error] thread@114,2: <thread> is not supported on this single threaded system
2
[Error] future@378,2: <future> is not supported on this single threaded system

Mal sehen wieviele Jahre es dauert bis <future> auf dem µC möglich ist 
:)

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 6 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.