mikrocontroller.net

Forum: Compiler & IDEs Wo stehen denn alle Funktionen/Schlüsselwörter etc. die WinAVR per default kennt ?


Autor: Uboot- Stocki (uboot-stocki)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi,

in einem anderen Thread habe ich einen Hinweis auf "__builtin_ctz (x);" 
gefunden. Ich hätte das schon öfters brauchen können ...

Wo finde ich denn solche Sachen in der Doku ? Ich kenne zwar die 
libc-Doku aber da stehen ja nur die libc-Sachen drin ...

Wo gibts eine Liste/ÜBersicht o.ä. ???

Gruß

Andreas

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Na in der GCC Doku?

http://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

War doch tatsächlich der allererste Treffer bei Google. ;-)
Ob man diese Sachen unbedingt verwenden sollte, ist die andere Frage - 
es ist eben kein Standard-C.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Brandis schrieb:

> Ob man diese Sachen unbedingt verwenden sollte, ist die andere Frage -
> es ist eben kein Standard-C.

Ja und? Man kann doch trotzdem von einer effizienten Implementierung 
profitieren:
#if defined (__GNUC__) && !defined (__STRICT_ANSI__)
#define ctz(x) __builtin_ctz(x)
#else
static inline int ctz (int x)
{
   // ...
}
#endif

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn Effizienz so aussieht:

>Built-in Function: int __builtin_ctz (unsigned int x)
>
>Returns the number of trailing 0-bits in x, starting at the least
>significant bit position. If x is 0, the result is undefined.

dann programmier ich's doch lieber gleich selbst. Ist einmal Arbeit und 
kann danach beliebig oft wiederverwendet werden.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wenn Effizienz so aussieht:

>>Built-in Function: int __builtin_ctz (unsigned int x)
>>
>>Returns the number of trailing 0-bits in x, starting at the least
>>significant bit position. If x is 0, the result is undefined.

>dann programmier ich's doch lieber gleich selbst. Ist einmal Arbeit und
>kann danach beliebig oft wiederverwendet werden.

Woraus erkennst Du da, das es ineffizient ist? Oder was soll "Wenn 
Effizienz so aussieht" heissen?

Autor: Mark Brandis (markbrandis)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dass x zur Laufzeit auch mal 0 sein kann, davon sollte man eigentlich 
ausgehen. Ich mag eben kein "undefined behaviour".

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Johann L. schrieb:
> Mark Brandis schrieb:
>
>> Ob man diese Sachen unbedingt verwenden sollte, ist die andere Frage -
>> es ist eben kein Standard-C.
>
> Ja und? Man kann doch trotzdem von einer effizienten Implementierung
> profitieren:
>
> #if defined (__GNUC__) && !defined (__STRICT_ANSI__)
> #define ctz(x) __builtin_ctz(x)
> #else
> static inline int ctz (int x)
> {
>    // ...
> }
> #endif
> 

Jep, genau solche Wrapper verwende ich auch sehr gerne, wenn es darum 
geht Code, der nicht C-Standard kompatibel ist kompatibel zu machen.

Wenn man portiert, muss man sich halt darum kümmern. Statt der static 
inline funktion könnte man auch einfach ein #error Not compiled with GCC 
nehmen ;) ;) (Höhö!)

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Mark Brandis schrieb:
> Dass x zur Laufzeit auch mal 0 sein kann, davon sollte man eigentlich
> ausgehen. Ich mag eben kein "undefined behaviour".

Ist doch eine Frage, wofür man es verwenden will.  Wenn du mit x = 0
rechnen können musst, dann kannst du immer noch sowas machen:
#define ctz(x) ((x) == 0? 32: __builtin_ctz(x))

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ Mark Brandis

Ach so.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.