Site Tools


Hotfix release available: 2025-05-14b "Librarian". upgrade now! [56.2] (what's this?)
Hotfix release available: 2025-05-14a "Librarian". upgrade now! [56.1] (what's this?)
New release available: 2025-05-14 "Librarian". upgrade now! [56] (what's this?)
Hotfix release available: 2024-02-06b "Kaos". upgrade now! [55.2] (what's this?)
sw:uc

ATmega

PROGMEM

Strings + Array

  #include <avr/pgmspace.h>
  const char ptmpUP_msg[]      PROGMEM = "Upper Temp";
  const char ptmpDN_msg[]      PROGMEM = "Lower Temp";
  const char ptmpCLG_msg[]     PROGMEM = "Chiller Temp";
  const char* const pgtmp_msg[]  PROGMEM =
  { ptmpUP_msg, ptmpDN_msg,  ptmpCLG_msg };

oder alternativ mit flash statt PROGMEM:

  const __flash char ptmpUP_msg[]  = "Upper Temp";
  const __flash char ptmpDN_msg[]  = "Lower Temp";
  const __flash char ptmpCLG_msg[] = "Chiller Temp";
  const __flash char* const __flash pgtmp_msg[] =
  { ptmpUP_msg, ptmpDN_msg,  ptmpCLG_msg };
  pgtmp_msg is const and located in flash.  And it contains elements that are 
  pointers to const locations in flash.

Functionpointer

Your functions are of prototype "void (*)(void)", not of "void (*)()".
And the return type is "void", not "__flash void"; avr-gcc throws a
diagnostic on this.

If you want to put the array in flash, then put funcArray in flash:

void func1 (void) {}
void func2 (void) {}
void func3 (void) {}
 
void (* const __flash funcArray[])(void) = { func1, func2, func3 } ;
 
void run (unsigned char funcNo){
   funcArray[funcNo] ();
   }

Quadratwurzel

The simplest square root algorithm is to simply subtract successive odd numbers and count the number of subtractions:
(9-1=8) (8-3=5) (5-5=0)
Three subtractions so the sq root of nine is 3.

Dezimalbrüche und Brüche wandeln

z.B.faktor=2.12345676
maxima: rat(2.12345676);
rat' replaced 2.12345676 by 172/81 = 2.123456790123457
Um mit Faktor zu multiplizieren: *172/81; dividieren: *81/172

scanf für unsigned int

unsigned int getint(void) {

unsigned int n=0;char c;
while (((c=getchar())>='0') && (c<='9')) n=10*n+(c-'0');
return n;

}

MSP430/gcc exec code im RAM

int machlang[15]={

      0xe3b2, 0x0031,   //xor #-1,&0x31    (emulating INV)
      0x4130            //ret
      };
      int (*machfn)() = NULL;
      machfn= (int (*)()) machlang;
      machfn();
sw/uc.txt · Last modified: 2024/04/15 00:43 by 127.0.0.1