#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.
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] (); }
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.
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
unsigned int getint(void) {
unsigned int n=0;char c; while (((c=getchar())>='0') && (c<='9')) n=10*n+(c-'0'); return n;
}
int machlang[15]={
0xe3b2, 0x0031, //xor #-1,&0x31 (emulating INV)
0x4130 //ret
};
int (*machfn)() = NULL;
machfn= (int (*)()) machlang;
machfn();