Guten Abend, ich suche nach einer Mathe-Bibliothek (mit Cos/Sin/e) für den STM8S(003F3), kann ich da jede beliebige C-Bibliothek nehmen? Welche würdet ihr empfehlen? Grüße
Ich vermute mal, dass SDCC passende Routinen enthält, aber ziemlich sicher nur mit einfacher Genauigkeit.
Gast
#4968609
sdcc/include/math.h bietet:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
Danke für eure Hilfe, kann man die Bibliothek vom SDCC mit dem IAR-Compiler auch benutzen?
Warum nimmst du nicht einfach die Bibliothek vom IAR, wenn du den sowieso schon nutzt?
Ich wusste nicht, dass es eine IAR C-Bibliothek gibt? Wo finde ich die?
Wenn du einen C-Compiler hast, dann hast du auch eine C-Standardbibliothek. Ohne die funktionieren nämlich viele Funktionen, die der C-Standard vorschreibt, nicht.
Gast
#4969662
> Wo finde ich die?
stm8/lib
Eigentlich sollte hier mal was stehen.
Aber wer zu faul ist, die Doku* mal selber zu lesen...
Dem schreib ich das hier nicht nochmal ab.
*) doc/EWstm8_DevelopmentGuide.pdf
Durch Verwendung der IAR eigenen Bibliothek hast du über die Linker Options zudem den Vorteil zwischen diversen Implementierungsvarianten (auf Größe optimiert, auf Speed optimiert...) der Funktionen wählen zu können.
... wenn du die math - library nicht einbinden magst, vielleicht hilft dir das ?!? Sinus / Cosinus über Taylorreihenentwicklung. Ich hatte es hier vor geraumer Zeit auch davon (allerdings primär für einen STM32F030). Ein Forumsmitglied hatte hier eine geniale Festkommabibliothek gepostet (nicht von ihm), die ich allerdings noch nicht auf einen STM8 portiert habe (gibt Schwierigkeiten bzgl. int32 Variablen). Die folgenden Funktionen funktionieren auf STM8 und MCS51:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
10 | |
11 | |
12 | |
13 | |
14 | |
15 | |
16 | |
17 | |
18 | |
19 | |
20 | |
21 | |
22 | |
23 | |
24 | |
25 | |
26 | |
27 | |
28 | |
29 | |
30 | |
31 | |
32 | |
33 | |
34 | |
35 | |
36 | |
37 | |
38 | |
39 | |
40 | |
41 | |
42 | |
43 | |
44 | |
45 | |
46 | |
47 | |
48 | |
49 | |
50 | |
51 | |
52 | |
53 | |
54 | |
55 | |
56 | |
57 | |
58 | |
59 | |
60 | |
61 | |
62 | |
63 | |
64 | |
65 | |
66 | |
67 | |
68 | |
69 | |
70 | |
71 | |
72 | |
73 | |
74 | |
75 | |
76 | |
77 | |
78 | |
79 | |
80 | |
81 | |
82 | |
83 | |
84 | |
85 | |
Gast
#4970387
Na, das mit dem "tiny_pow" ist aber so ziemlich die ärgste
Resoucenverschwendung, Stichwort Horner-Schema. Spart VIELE
Multiplikationen gegenüber der Trivial-Variante bei der
Polynomauswertung:
a_n*x^n+a_{n-1}*x^{n-1}+...+a_1*x+a_0
=(...(a_n*x+a_{n-1})*x+a_{n-2})*x+a_{n-3})...)*x+a_0
Da wird also nur fortwährend mit x multipliziert und der
nächstniedrigere Koeffizient dazu addiert.
Wenn man weiß, dass nur ungerade (oder nur gerade) Potenzen auftauchen,
modifiert man das natürlich, dass man laufend mit x^2 multipliziert.
Die Zahl der Multiplikationen ist bei der Trivial-Variante von der
Größenordnung n^2, beim Horner-Schema nur n.
Außerdem: Taylor-Entwicklung ist nicht so das Gelbe vom Ei, wenn man ein
relativ großes Intervall betrachtet. In der Nähe des Entwicklungspunktes
(hier: 0) zwar nicht schlecht, aber die Qualität sinkt mit zunehmendem
Abstand rapide ... Und [0,pi] ist schon ziemlich groß.
(Übrigens ist das oben nicht "mit Taylor-Reihe", sondern "mit
Taylor-Polynom".)
Besser: Entwicklung nach Legendre- oder Tschebyschow-Polynomen, damit
erzielt man eine halbwegs gleichmäßige Approximationsgüte auch bei einem
längeren Intervall. Und es kommt trotzdem wieder ein Polynom (auch
ungerade bzw. beim Kosinus gerade) heraus, der Rechenaufwand ist also
derselbe.
Die Implementierung oben liefert übrigens bei negativen Winkeln ... ?!
Und wenn schon Taylor, sollte man ein möglichst kleines Intervall
nehmen, es böte sich also an, auch noch die Symmetrie von [0,pi/2] zu
[pi/2,pi] zu nutzen.
... absolut alles richtig was du sagst. Allerdings hatten diese Funktionen schlicht funktioniert und es war noch ausreichend Platz. Grundsätzlich war das etwas schnelles und bei anderen Controllern hatte ich die math hinzugelinkt. Dann, wenn der Platz gering wird, verwende ich die Festkomma-Software die hier ein Forumsmitglied gepostet hat. Bei der Taylorreihenentwicklung sieht man allerdings auch sehr schön, wie das aufgebaut ist... und (ich weiß das ist nicht wirklich ein Argument) die Quelldateien bleiben schön klein und übersichtlich ! (Allerdings - wie du absolut richtig angemerkt hast: ungenau und resourcenverschwendend)
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.