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
Table of Contents
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
