Go Down

Topic: [Projekt] Schnelle Digital Eingabe/Ausgabe (Read 3899 times) previous topic - next topic

michael_x

#30
Jan 18, 2018, 03:50 pm Last Edit: Jan 18, 2018, 04:11 pm by michael_x Reason: Danke
134 -> 140 = 6 Byte für OutputPin::init() und OutputPin::toggle() und den c'tor ?

Und das OutputPin-Objekt selber braucht keinen RAM ?

Wahnsinn !

Quote
(-: Ich finde das geht :-)
Ich hätte gewettet, das geht nicht.  ;) Und verloren !! Danke !

combie

#31
Jan 18, 2018, 04:34 pm Last Edit: Jan 18, 2018, 05:36 pm by combie
Das sieht echt nach einem Sieg über die "Formel" aus. Gratuliere.
Nunja...
Ich halse dem Compiler die meiste Arbeit auf, die sonst der Arduino erledigt.
Der "Klumpen" ist also nicht wirklich weg, aber er bleibt da hängen, wo es einem/mir nicht weh tut.



134 -> 140 = 6 Byte für OutputPin::init() und OutputPin::toggle() und den c'tor ?
Gibt man dem Compiler die Chance, es zu optimieren, dann macht er das auch ;-)



Und das OutputPin-Objekt selber braucht keinen RAM ?
Musste ich etwas dran rum knapsen...
Der Trick ist, verwendet man keine Objektvariablen, dann brauchts auch kein this, bzw. keine Instanz, oder besser, keine Referenz auf das Objekt.
Der Compiler optimiert den überflüssigen Kram weg.



Wahnsinn !
Ich hätte gewettet, das geht nicht.  ;) Und verloren !! Danke !
Danke für die Blumen.

Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

Doc_Arduino

Hallo,

ich wollte nochmal deine PinDefs verwenden, bekomme es jedoch nicht hin. Ich benötige 8 Pins die ich später ein- und ausschalten kann. Als Vorlage diente das Relais Bsp. Abgeändert kompiliert es leider nicht. Was mache ich falsch? Irgendwie will er die Namensdeklaration nicht annehmen.

Es hagelt für jeden Pin zum Bsp.
'P22' does not name a type                         P22<22> Servo0;
Servo0' was not declared in this scope        Servo0.init();


Code: [Select]

#include <CombiePinDefinition.h>

using namespace Combie::PinDefinition;

P22<22> Servo0;
P23<23> Servo1;
P24<24> Servo2;
P25<25> Servo3;
P26<26> Servo4;
P27<27> Servo5;
P28<28> Servo6;
P29<29> Servo7;

void setup()  {
  
  Servo0.init();
  Servo1.init();
  Servo2.init();
  Servo3.init();
  Servo4.init();
  Servo5.init();
  Servo6.init();
  Servo7.init();      
}


void loop() {

      Servo3.ein();
      Servo3.aus();    
}
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

combie

#33
Jan 24, 2018, 07:45 pm Last Edit: Jan 24, 2018, 07:56 pm by combie
Quote
'P22' does not name a type
Da wird der Compiler recht haben, denn einen Solchen Type habe ich nicht definiert.

Du möchtest dieses:
Code: [Select]
OutputPin<22> Servo0;
OutputPin<23> Servo1;

Nehme ich mal an....

Und dann eben so:
Code: [Select]
void loop() {

      Servo3.setHigh();// schnelle Version
      Servo3.setLow(); // schnelle Version  
}


Code: [Select]
void loop() {

      Servo3.toggle(); // schnellste Version
      Servo3.toggle(); // schnellste Version  
}



Langsamere Komfort Varianten
Oder:
Code: [Select]
void loop() {

      Servo3(1);
      Servo3(0);    
}


Oder:
Code: [Select]
void loop() {

      Servo3(true);
      Servo3(false);    
}


Oder:
Code: [Select]
void loop() {

      Servo3 = 1;
      Servo3 = 0;    
}


Oder:
Code: [Select]
void loop() {

      Servo3.set(1);
      Servo3.set(0);    
}


Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

Doc_Arduino

#34
Jan 24, 2018, 08:33 pm Last Edit: Jan 24, 2018, 08:33 pm by Doc_Arduino
Hallo,

aha, ich dachte man kann sich irgendeinen Namen ausdenken der dann nur zur internen Verwaltung verwendet wird.
Ich werde es ausprobieren. Danke.
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

michael_x

Quote
ich dachte man kann sich irgendeinen Namen ausdenken
Du meinst sicher
OutputPin<22> P22;
Den Namen P22 kannst du frei wählen, auch P22, wenn dir kein besserer einfällt.
Dass es sowas wie den Typ OutputPin gibt, hat combie erfunden.

Doc_Arduino

Hallo,

ich hatte Definitionsschema nicht durchschaut. Ich wusste nicht das das ein vordefinerter Template Name ist.  

Leider wird es diesmal nicht zum Zuge kommen. Habe zwar mit meinen vielen defines mit sbi und cbi mehr sichtbaren Code stehen, am Ende ist das Programm jedoch 1418 Byte statt 1512 Bytes groß. Hätte ich jetzt so auch nicht gedacht. Ein Versuch ist es jedoch immer Wert.  :)
Tschau
Doc Arduino '\0'

Messschieber auslesen: http://forum.arduino.cc/index.php?topic=273445
EA-DOGM Display - Demos: http://forum.arduino.cc/index.php?topic=378279

combie

#37
Jan 24, 2018, 09:12 pm Last Edit: Jan 24, 2018, 09:18 pm by combie
Quote
aha, ich dachte man kann sich irgendeinen Namen ausdenken der dann nur zur internen Verwaltung verwendet wird.
Klar, ausdenken kann man Viel.
Verwenden auch...

Aber wenn man einen Type verwenden möchte, muss man ihn vorher deklarieren/definieren.

Also wenn dann so:
Code: [Select]



#include <CombiePinDefinition.h>

using P22 = Combie::PinDefinition::OutputPin;

P22<22> Servo0;


void setup()  {
 
  Servo0.init();
       
}


void loop() {

      Servo0 = 1;
      Servo0 = 0;   
}


Oder so:
Code: [Select]



#include <CombiePinDefinition.h>

using P22 = Combie::PinDefinition::OutputPin<22>;

P22 Servo0;


void setup()  {
 
  Servo0.init();
       
}


void loop() {

      Servo0 = 1;
      Servo0 = 0;   
}


Ich sehe gerade, das ist noch eine alte Version..... (PinDefinition gibts so nicht mehr)
Die aktuelle findet sich hier #28
Wer seine Meinung nie zurückzieht, liebt sich selbst mehr als die Wahrheit.

Quelle: Joseph Joubert

Go Up