lehrkraefte:blc:informatik:ffprg2-2020:esp32-io-and-vars

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
lehrkraefte:blc:informatik:ffprg2-2020:esp32-io-and-vars [2020/08/12 10:23]
Ivo Blöchliger [Ganzzahl-Typen]
lehrkraefte:blc:informatik:ffprg2-2020:esp32-io-and-vars [2020/08/12 15:48] (current)
Ivo Blöchliger [Ausgabe mit Serial.printf]
Line 1: Line 1:
 ====== Typen ====== ====== Typen ======
 Alles in C++ muss einen Typ haben. Der Typ einer Variablen kann nicht geändert werden.  Alles in C++ muss einen Typ haben. Der Typ einer Variablen kann nicht geändert werden. 
-===== Ganzzahl-Typen =====+===== Zahl-Typen =====
 Die Typen ''uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t'' sind in ihrer Bezeichnung klar, ob ohne Vorzeichen (**u**nsigned) und wieviele Bits diese umfassen. Eigentlich sollte ausschliesslich damit gearbeitet werden. Die Typen ''uint8_t, int8_t, uint16_t, int16_t, uint32_t, int32_t, uint64_t, int64_t'' sind in ihrer Bezeichnung klar, ob ohne Vorzeichen (**u**nsigned) und wieviele Bits diese umfassen. Eigentlich sollte ausschliesslich damit gearbeitet werden.
  
Line 9: Line 9:
   * **float** und **double** Fliesskommazahlen, 4 bzw. 8 Bytes.   * **float** und **double** Fliesskommazahlen, 4 bzw. 8 Bytes.
   * **bool** true oder false   * **bool** true oder false
-  * **char** +  * **char** oder **byte**. 
 + 
 +==== Umwandlung der Typen ==== 
 +Ist in einem Ausdruck ein float oder double involviert, ist auch das Resultat ein float oder double. 
 + 
 +Sind in einem Ausdruck nur ganzzahlige Typen involviert, ist auch das Resultat ganzzahlig, wobei immer gegen Null hin gerundet wird: 
 +<code c++> 
 +void setup() { 
 +  Serial.begin(115200); 
 +  delay(200); 
 +  int a=7; 
 +  int b=6; 
 +  int c = a/b; 
 +  Serial.printf("[int]  %d/%d ist gleich %d\n",a,b,c); 
 +  a = -7; 
 +  c = a/b; 
 +  Serial.printf("[int]  %d/%d ist gleich %d\n",a,b,c); 
 +
 + 
 +void loop() { 
 +  // tu nix 
 +
 +</code> 
 + 
 +==== Ausgabe mit Serial.printf ==== 
 +  * %d (int) 
 +  * %f (float, double) 
 +  * %l (long) 
 +  * %du, %llu (unsigned int, unsigned long long) 
 +  * %c (char) 
 +  * \n Zeilenumbruch 
 + 
 +[[http://www.cplusplus.com/reference/cstdio/printf/|Mehr zu printf]] 
 +==== Speicherbedarf und Umfang ====
  
 <code c++> <code c++>
Line 46: Line 79:
 </code> </code>
  
 +==== Rechengeschwindigkeit ====
 +<code c++>
 +#define RUN(TYPE, FORMAT) addtest<TYPE>(1000000, #TYPE, FORMAT)
 +#define RUM(TYPE, FORMAT) multest<TYPE>(1000000, #TYPE, FORMAT)
 +
 +template<typename T>
 +void addtest(int n, char *t, char *f) {
 +  long zeit = micros();
 +  // volatile bezeichnet Variablen, die z.B. von Interrupts verändert werden könnten.
 +  // Damit kann der Kompiler keine Optimierungen machen, weil sich der Wert ausserhalb
 +  // des normalen Programmflusses ändern könnte.
 +  volatile T r = 0;     // Damit das Ding nicht wegoptimiert wird.
 +  volatile T a = 3456;  // Damit das Ding nicht wegoptimiert wird.
 +  for (int i=0; i<n; i++) {
 +    r = r+a;
 +  }
 +  zeit = micros()-zeit;
 +  Serial.printf("%d Additionen mit Typ %s braucht %d us\n", n, t, zeit);
 +  // Wenn das Resultat nicht gebraucht wird, wird die ganze Schleife
 +  // gnadenlos wegoptimiert ;-)
 +  Serial.print("Das Resultat: ");
 +  Serial.printf(f, r);
 +  Serial.println();
 +}
 +
 +template<typename T>
 +void multest(int n, char *t, char *f) {
 +  long zeit = micros();
 +  volatile T b = 27; // Damit das Ding nicht wegoptimiert wird.
 +  volatile T r = 0;  // Damit das Ding nicht wegoptimiert wird.
 +  T a = 5234;
 +  for (int i=0; i<n; i++) {
 +    r = a*b;
 +  }
 +  zeit = micros()-zeit;
 +  Serial.printf("%d Multiplikationen mit Typ %s braucht %d us\n", n, t, zeit);
 +  // Wenn das Resultat nicht gebraucht wird, wird die ganze Schleife
 +  // gnadenlos wegoptimiert ;-)
 +  Serial.print("Das Resultat: ");
 +  Serial.printf(f, r);
 +  Serial.println();
 +}
 +
 +
 +void setup() {
 +  Serial.begin(115200);
 +  delay(200);
 +  Serial.print("------------\n\n");
 +  RUN(int, "%d");
 +  RUN(long long, "%llu");
 +  RUN(float, "%f");
 +  RUN(double, "%f");
 +  
 +  Serial.println();
 +  
 +  RUM(int, "%d");
 +  RUM(long long, "%llu");
 +  RUM(float, "%f");
 +  RUM(double, "%f");
 +
 +}
 +
 +void loop() {
 +  // tu nix
 +}
 +</code>
  • lehrkraefte/blc/informatik/ffprg2-2020/esp32-io-and-vars.1597220588.txt.gz
  • Last modified: 2020/08/12 10:23
  • by Ivo Blöchliger