Iar 0b Binäre Optionen
Wirrale Händler Schema der Dinge Nhsmail psnc main siteLegalservice, die zu Hause, die legalOpening Tag der Liverpool Weihnachtsmarkt Rekapitulation Glastonbury Festival in nassem Wetter und Schlamm Warnung abgelaufen Website dieser Website abgelaufenBusiness News persönliche Finanzen und Geld Nachrichten abc newsBednest Bewertungen und Auszeichnungen für die Bednest Bedside KrippePageinsider Informationen Über alle DomainsLetzte Nachrichten aus dem Ruhestand Heimatanbieter buyon Hall Trader Joes gefrorenen braunen Reis Medley Ernährung Informationen braunMyplate Kalorien Tracker und Fitness-Programm livestrongGfcf Lebensmittel-Shopping-Liste sprechen über Heilung Autismus TacaBaked Heilbutt mit knusprigen Panko Rezept allrecipescomOhio Abteilung der LandwirtschaftFood Rückrufe Washington State Department of Health25 einfache Rezepte Für ältere Ernährung ein Ort für momVegetarian Süßkartoffel veggie Burger Rezept popsugarFree Kalorienzähler Diät Übung Zeitschrift Baumwolle Trader Arbeitsplätze Portsmouth Supply Chain Award Gewinner enthüllte Logistik ManagerSalaries durchschnittliche Gehalt Arbeitsplätze payNucor Gebäude-Systeme vorgefertigte StahlbautenTodays Börse Nachrichten und Analyse nasdaqcomAchtung der gefälschten Job scam Internet
- , Millennium House, Victoria Road, Douglas, IM2 4RW, Isle of Man, Britische Inseln, lizenziert und geregelt durch (1) die Gambling Supervision Commission in der Isle of Man, British Isles, aktuelle Online-Glücksspiel-Lizenz am 31. August 2012 ausgestellt, und Für britische Kunden durch (2) die UK Gambling Commission - View Lizenz. Diese Website wird in den Rest der EU vermarktet, für Investmentprodukte von Binary Investments (Europe) Ltd. Mompalao Building, Suite 2, Tower Road, Msida MSD1825, Malta, lizenziert und geregelt als Kategorie 3 Investment Services Provider von der Malta Financial Dienstleistungsbehörde (Lizenz Nr. IS70156) und für Gaming-Produkte von Binary (Europe) Ltd. Mompalao Building, Suite 2, Tower Road, Msida MSD1825, Malta, lizenziert und geregelt durch (1) die Malta Gaming Authority in Malta, Lizenz Nr MGACL21182000, 26. Mai 2015 und für britische Kunden von (2) der britischen Glücksspielkommission - Ansicht Lizenz. Und für irische Klienten durch (3) die Revenue Commissioners in Irland, aktuelle Fernbuchmacher Lizenz am 29. September 2015 (Lizenz Nr. 1010285) ausgestellt. Diese Webseiten werden in bestimmten Ländern wie den USA, Costa Rica, Hongkong oder Personen unter 18 Jahren nicht zur Verfügung gestellt. Sie haben die Anzahl der Anfragen pro Sekunde erreicht. Bitte versuch es später. Trading binäre Optionen sind möglicherweise nicht für jedermann geeignet. Bitte stellen Sie daher sicher, dass Sie die damit verbundenen Risiken vollständig verstehen. Ihre Verluste können Ihre ursprüngliche Einzahlung überschreiten und Sie besitzen nicht oder haben kein Interesse an dem zugrunde liegenden Vermögenswert. In Bezug auf binäre Optionen, die Glücksspiel Produkte sind, denken Sie daran, dass Glücksspiel kann süchtig - bitte spielen verantwortungsvoll. Lesen Sie mehr über Responsible Trading. Binary Literals in C Mittwoch, 30. September 2009 von Michael Barr Vor einigen Jahren schrieb der Netrino-Ingenieur Dan Smith eine Schrittmotor-Steuerungs-Firmware, die an viele Register mit binären Feldern und Unterfeldern angrenzte. Nach dem Kämpfen ein bisschen mit dem üblichen fehleranfälligen 8220off von 1 Bit shift8221 Maskierung und Umwandlung von binären zu hexadezimalen Literalen in C, passierte er über einen nützlichen Beitrag auf einem Forum. In einer Nußschale handelt es sich bei der 8220binary literal8221 um die folgenden C-Preprocessor-Makros: Interne Makros definieren HEX (n) 0xnLU definieren B8 (x) ((xamp0x0000000FLU) 1: 0) ((xamp0x000000F0LU) 2: 0) ((xamp0x00000F00LU) 4 (0) ((xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) (Dmsb, dsb, db2, db3, dlsb) B8 (dmsb, dlsb) (BMS (dmsb, dlsb) B8 (dmsb, dlsb) B8 (dmsb, dlsb) ) ((Unsigned long) B8 (dmsb) ltlt24) ((unsigned long) B8 (db2) ltlt16) ((unsigned long) B8 (db3) ltlt8) B8 (dlsb)) Hier sind einige Beispiele für die Verwendung dieser Makros : B8 (01010101) 85 B16 (10101010,01010101) 43,605 B32 (10000000,11111111,10101010,01010101) 2,164,2019011 Wenn Sie also ein Speicher-abgebildete 8-Bit-Steuerregister des Formats XXXYYZZZ (wobei XXX, YY und ZZZ sind (B8 (11) ltlt 3) (B8 (101) ltlt 0)), die die XXX-Bits auf 010, YY bis 11 setzt, und ZZZ auf 101. Wenn ich jemals musste, um XXX zu 011 zu ändern, ändere einfach eine einzelne 0 zu einem 1 im Quellcode und alles magisch ändert sich. Best of all, it8217s alles getan bei compile-time. Keine fehleranfällige Umwandlung in hexadezimal notwendig, keine herauszufinden, welche Bits gehören, welche Nibbles, etc. Dieser Eintrag wurde am Mittwoch, 30. September 2009 um 19:08 Uhr und ist abgelegt unter Uncategorized. Sie können alle Antworten auf diesen Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst eine Antwort hinterlassen. Oder trackback von deiner eigenen Seite. 12 Responses to 8220Binary Literals in C8221 Nigel Jones sagt: Großer Beitrag (oder vielleicht stehlen :-)). Ich wollte immer einen Weg, um Binärzahlen in C auszudrücken, und jetzt habe ich einen Ich nahm den Code und experimentierte ein bisschen damit. Wenn Sie die Optimierung komplett ausschalten, haben sie meinen IAR ARM-Compiler auch einen redundanten Code aufgenommen. Allerdings hat die niedrigste Optimierungsstufe dieses Problem behoben. Die MISRA-Compliance-Checkerin hat natürlich eine absolute Passform über die Verwendung dieser Makros gehabt und eine große Anzahl von Beschwerden erzeugt. Ich denke, das ist noch ein Beispiel, wo man einen intelligenten Handel machen muss. Soll ich ein Makro verwenden, das von MISRA-Standards unsicher ist, erlaubt mir doch, eine ganze Klasse von Fehlern zu beseitigen. Vielleicht sehen wir in meiner reichhaltigen Freizeit, ob ich die Makros umstrukturieren kann, um MISRA-Compliance zu ermöglichen. MISRA-Konformität ermöglicht Ausnahmen für genau diese Art von Ding. Dies macht Ihren Code sicherer und nicht weniger sicher: Die Makros verkapseln einzeln unsichere Konstrukte, sondern verpacken sie mit einer sehr sicheren Schnittstelle. Sie brauchen nur eine projektweite MISRA Abweichung, die auf diese drei Makros spezialisiert ist Und Sie können die volle MISRA-Einhaltung beibehalten, sowohl im Geist als auch im Brief des Gesetzes. Verschiedene MISRA-Kontrolleure behandeln Abweichungen auf unterschiedliche Weise, aber PC-Lint behandelt makro-spezifische Abweichungen sehr gut, für ein Beispiel. Ich versuche, die feineren Punkte von C zu lernen und wie man damit kreativ ist. ) Ich verstehe nichts die Binärmakros. 821282128212821282128212821282128212- 8-Bit-Umwandlungsfunktion definieren B8 (x) ((xamp0x0000000FLU) 1: 0) ((xamp0x000000F0LU) 2: 0) ((xamp0x00000F00LU) 4: 0) ((xamp0x0000F000LU) 8: 0) ((xamp0x000F0000LU) 0) ((xamp0x00F00000LU) 32: 0) ((xamp0x0F000000LU) 64: 0) (xamp0xF0000000LU) 128: 0) 8212821282128212821282128212821282128212-Wenn wir an der ersten Zeile teilnehmen: (xamp0x0000000FLU) Es scheint mir, dass x ist unded Mit der konstanten 0x0000000FLU. Its mit dieser Konstante, dass ich verloren gehen. Zu mir 0x0000000F 15 (in Dezimal). Der Zitat, wie ich es unterhielt, und ich könnte falsch sein, bedeutet, dass die Konstante ein Unsigned Long ist. Ich verstehe, wie das Makro funktionieren soll. Mein Problem, ich denke, ist mit der Syntax. Kann jemand vergossen einige lightThanks, Kennykenlanspach Nigel Jones sagt: Sicher kann. Beispielsweise können wir B8 (1011) betrachten. Zuerst das HEX-Makro konvertiert das Argument 1011 in 0x1011UL. Dies geschieht über den Saitenoperator. (Dies ist ein ziemlich dunkler Teil des Präprozessors 8211 Sie finden weitere Informationen online).Now let39s sehen, was passiert mit dem B8 (x) Makro. Es besteht aus 8 Zeilen, von denen jede eine Bitposition effektiv testet. Die erste Zeile ist (x amp 0x0000000Flu). 1. 0. (Beachten Sie, dass I39ve hinzugefügt Räume und machte die LU Kleinbuchstaben, so dass die Dinge ein wenig klarer IMHO).Jedenfalls wird dies: 0x1011ul amp 0x0000000Ful 0x1. Dies beurteilt offensichtlich wahr und so kehrt der ternäre Operator zurück 1. Die zweite Zeile des B8 () - Makros ist (x amp 0x000000F0lu). 2. 0). Damit dehnt sich das auf 0x1011 amp 0x000000F0 0x10 aus. Dies ist offensichtlich ausgewertet, und der ternäre Operator gibt 2 zurück, was dem vorherigen Ergebnis hinzugefügt wird, was eine Summe der Dezimalzahl ergibt. Die dritte Zeile des B8 () - Makros ist (x amp 0x00000F00lu). 4. 0). Damit dehnt sich dieser auf 0x1011 amp 0x00000F0 0x0 aus. Dies wird offensichtlich falsch ausgewertet, und so kehrt der ternäre Operator 0 zurück, der dem vorherigen Ergebnis hinzugefügt wird, wobei wir unsere Summe in Dezimalzahl 3 halten. Die vierte Zeile des B8 () - Makros ist (x amp 0x0000F000lu). 8. 0). Damit erweitert dies auf 0x1011 amp 0x0000F000 0x1000. Dies beurteilt offensichtlich wahr und der ternäre Operator gibt 8 zurück, was dem vorherigen Ergebnis hinzugefügt wird, was insgesamt Dezimal 11 8211 und unser endgültiges Ergebnis ergibt. Die B16- und B32-Makros bauen einfach auf diese Technik auf, indem sie geeignete Casts und Verschiebungen verwenden. Hoffe das hilft. Wenn es nicht wieder posten und ich versuche, die Erklärung zu erweitern. Miro Samek sagt: In der Tat, MISRA-Checker nicht besonders gerne die Makros, weil sie gegen die folgenden MISRA-Regeln verstoßen: Makro HEX (n) verletzt MISRA Erforderliche Regel 98, Mehrfache Nutzung von 3939 Operatoren in Makro Definitionmacro B8 verletzt MISRA Regel 7, Trigraphs sollen Wird nicht verwendetMacro B8 verletzt MISRA Regel 96, Expression-like Makro 3939 nicht parenthesizedBut die Makros können wie folgt umgebaut werden, um mit MISRA übereinzustimmen: define HEX (n) ((uint32t) 0xn) definieren B8 (x) (((x) amp 0 (x) amp 0x10LU) gtgt 3) ((x) amp 0x100LU) gtgt 6) ((x) amp 0x1000LU) gtgt 9) ((x) amp 0x10000LU) gtgt 12) ((x) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) B8 (B & sub0;) B8 (HEX (B & sub0;)) B16 (B & sub0; (B8 (HEX (b0)) (B8 (HEX (b1)) ltlt 8))) definieren B32 (b3, b2, b1, b0) ((uint32t) (B8 (HEX (b0 )) (B8 (HE1 (b1)) ltlt 8) (B8 (HEX (b2)) ltlt 16) (B8 (HEX (b3)) ltlt 24))) Während die Makros MISRA-konform sind, kann die tatsächliche Verwendung manchmal führen Zu verletzen MISRA Regel 19 (oktale Konstante verwendet), wenn Sie Ihr Binär-Literal mit einer Null beginnen. Miro Samek Es gibt keine Trigraphen in diesem Code. Es scheint, dass Ihr MISRA-Checker ein bisschen zu trigger-happy (sie alle sind). Bei manueller Code-Inspektion kann ich die folgenden MISRA-Verletzungen vorstellen: Verwendung von funktionsähnlichen Makros (19.7), nur ein Vorkommen von einem Makro (19.12) sollte nicht verwendet werden (19.13), U-Suffix für ganzzahlige Literale (10.6 ), Keine impliziten Typkonvertierungen (10.1), oktale Integer-Literale sollten nicht verwendet werden (7.1), anstelle der Standard-Integer-Datentypen (6.3) sollte C99 nicht verwendet werden (1.1). 8230 Themen, wenn Sie nicht gelesen haben Mike Barr8217s jüngsten Posting auf binäre Literale, dann empfehle ich dringend, dass Sie dies tun. Es wäre sehr schön in 8230 gepasst Ich habe niemals die Notwendigkeit von binären Literalen verstanden. Zurück in der Schule würden sie uns unsere erste 8220hello world8221 schreiben lassen, bevor wir Binär und Hexe kennen. Ich denke, du solltest sicher davon ausgehen können, dass jeder Programmierer hex lesen kann. Abgesehen davon glaube ich persönlich, dass Preg (2) (B8 (11) ltlt 3) (B8 (11) ltlt 3) (B8 (101) ltlt 0)) viel schwerer zu lesen ist als preg (2ltlt5) (3ltlt5) (5ltlt0) ), Ganz zu schweigen von Preg XYZ, wo XYZ Bitmaskenkonstanten sind. In einer echten Anwendung würden diese Bitmasken natürlich sinnvolle Namen haben. B32 (11111100, 11000000, 11000000, 11111100), B32 (11000000, 11000000, 11000000, 00000000) ist offensichtlich ein 8216F8217 Zeichenbild. Was Sie wouldn82ns sehen, ob es geschrieben wurde 82200xFCC0C0FC, 0xC0C0C0008221. Peter Maler sagt: Es ist natürlich nicht sinnvoll in den Beispielen, die du gibst. Allerdings ist manchmal ein bisschen Muster genau das: ein Muster. Stellen Sie sich die Schriftart vor. Wenn Sie als binäre Literale geschrieben sind, können Sie die Schriftartbriefe (und alle Fehler), während Hex-Werte bedeutungslose Buchstaben sind. Immer wenn ein Wert ein visuelles Muster darstellt, sind binäre Literale eine unschätzbare Hilfe. Tatsächlich, das ist mein Hauptgebrauch für binäre Literale. Julian Day sagt: Hmm, I8217m nicht ganz sicher, ob ich diese oder nicht mag. Bei der Arbeit in CC, I8217m sehr verwendet, um nicht mit binären numerischen Literalen und plötzlich sehen dies leicht wirft mich. Bei der Arbeit in Ada und anderen Sprachen mit binären numerischen Literalen, kann ich kaum daran erinnern, entweder mit ihnen oder sehen sie verwendet. Ich bin daran interessiert, einen starken Fall für die Verwendung von ihnen zu sehen, da ich mit Lundin über dem Preg-Beispiel einverstanden bin, aber tatsächlich ein Makro oder const für jedes der Felder anstelle von numerischen Literalen verwenden würde. Auf jeden Fall, aus einer MISRA 2004-Perspektive, denke ich, dass das größte Hindernis die Regel 13.7 ist, die besagt, dass 8220Boolean-Operationen, deren Ergebnisse unveränderlich sind, nicht zulässig sind.8221 Das ist der ganze Punkt dieser Makros, um diese Invarianz zu nutzen Ein numerisches Literal aus dieser binären Darstellung zur Kompilierzeit. Sie können deaktivieren Warnungen über die Makro-Definitionen und machen die Erweiterungen MISRA Typ konform, aber Sie müssen sicherstellen, dass 13.7 ist nicht in Kraft an der Stelle, wo das Makro erweitert wird, da die Erweiterung selbst ist nicht MISRAble, wenn das ist die Korrektes Adjektiv. Als Referenz, hier8217s eine Version des Makros, die mit dem GHS verwendet werden könnte compiler8217s in Regeln überprüft: ifndef BINH definieren BINH pragma ghs startnomisra definieren HEX (n) 0xnLU definieren B8 (x) ((uint8t) (((xamp0x0000000FLU) 0UL ) ((Xamp0x0000F0LU) 0UL) 4UL: 0UL) ((xamp0x0000F0LU) 0UL) (siehe xUL0x0000FULU) 0UL) ((Xamp0x00000000LU) 0UL) 64UL: 0UL) (kalibriert0x000000LU) 0UL) 64UL: 0UL)) (sichtbar) Makro definieren B8 (d) ((uint8t) B8 (HEX (xamp0x00F00000LU) 0UL) D))) definieren B16 (dmsb, dlsb) ((un16t) ((uint16t) (B8 (dmsb) ltlt8) ((uint16t) B8 (dlsb)))) definieren B32 (dmsb, db2, db3, dlsb) (( Die GHS-Compiler würden die Binär-Expressionen als das äquivalente numerische Literal auf jeder Optimierungsstufe auswerten, was schließlich die Binär-Expression als das äquivalente numerische Literal auf jeder Optimierungsstufe auswerten würde Ist der Punkt von ihnen. Julian Day sagt:
- , Millennium House, Victoria Road, Douglas, IM2 4RW, Isle of Man, Britische Inseln, lizenziert und geregelt durch (1) die Gambling Supervision Commission in der Isle of Man, British Isles, aktuelle Online-Glücksspiel-Lizenz am 31. August 2012 ausgestellt, und Für britische Kunden durch (2) die UK Gambling Commission - View Lizenz. Diese Website wird in den Rest der EU vermarktet, für Investmentprodukte von Binary Investments (Europe) Ltd. Mompalao Building, Suite 2, Tower Road, Msida MSD1825, Malta, lizenziert und geregelt als Kategorie 3 Investment Services Provider von der Malta Financial Dienstleistungsbehörde (Lizenz Nr. IS70156) und für Gaming-Produkte von Binary (Europe) Ltd. Mompalao Building, Suite 2, Tower Road, Msida MSD1825, Malta, lizenziert und geregelt durch (1) die Malta Gaming Authority in Malta, Lizenz Nr MGACL21182000, 26. Mai 2015 und für britische Kunden von (2) der britischen Glücksspielkommission - Ansicht Lizenz. Und für irische Klienten durch (3) die Revenue Commissioners in Irland, aktuelle Fernbuchmacher Lizenz am 29. September 2015 (Lizenz Nr. 1010285) ausgestellt. Diese Webseiten werden in bestimmten Ländern wie den USA, Costa Rica, Hongkong oder Personen unter 18 Jahren nicht zur Verfügung gestellt. Sie haben die Anzahl der Anfragen pro Sekunde erreicht. Bitte versuch es später. Trading binäre Optionen sind möglicherweise nicht für jedermann geeignet. Bitte stellen Sie daher sicher, dass Sie die damit verbundenen Risiken vollständig verstehen. Ihre Verluste können Ihre ursprüngliche Einzahlung überschreiten und Sie besitzen nicht oder haben kein Interesse an dem zugrunde liegenden Vermögenswert. In Bezug auf binäre Optionen, die Glücksspiel Produkte sind, denken Sie daran, dass Glücksspiel kann süchtig - bitte spielen verantwortungsvoll. Lesen Sie mehr über Responsible Trading. Binary Literals in C Mittwoch, 30. September 2009 von Michael Barr Vor einigen Jahren schrieb der Netrino-Ingenieur Dan Smith eine Schrittmotor-Steuerungs-Firmware, die an viele Register mit binären Feldern und Unterfeldern angrenzte. Nach dem Kämpfen ein bisschen mit dem üblichen fehleranfälligen 8220off von 1 Bit shift8221 Maskierung und Umwandlung von binären zu hexadezimalen Literalen in C, passierte er über einen nützlichen Beitrag auf einem Forum. In einer Nußschale handelt es sich bei der 8220binary literal8221 um die folgenden C-Preprocessor-Makros: Interne Makros definieren HEX (n) 0xnLU definieren B8 (x) ((xamp0x0000000FLU) 1: 0) ((xamp0x000000F0LU) 2: 0) ((xamp0x00000F00LU) 4 (0) ((xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) - (xamp0x000000000) (Dmsb, dsb, db2, db3, dlsb) B8 (dmsb, dlsb) (BMS (dmsb, dlsb) B8 (dmsb, dlsb) B8 (dmsb, dlsb) ) ((Unsigned long) B8 (dmsb) ltlt24) ((unsigned long) B8 (db2) ltlt16) ((unsigned long) B8 (db3) ltlt8) B8 (dlsb)) Hier sind einige Beispiele für die Verwendung dieser Makros : B8 (01010101) 85 B16 (10101010,01010101) 43,605 B32 (10000000,11111111,10101010,01010101) 2,164,2019011 Wenn Sie also ein Speicher-abgebildete 8-Bit-Steuerregister des Formats XXXYYZZZ (wobei XXX, YY und ZZZ sind (B8 (11) ltlt 3) (B8 (101) ltlt 0)), die die XXX-Bits auf 010, YY bis 11 setzt, und ZZZ auf 101. Wenn ich jemals musste, um XXX zu 011 zu ändern, ändere einfach eine einzelne 0 zu einem 1 im Quellcode und alles magisch ändert sich. Best of all, it8217s alles getan bei compile-time. Keine fehleranfällige Umwandlung in hexadezimal notwendig, keine herauszufinden, welche Bits gehören, welche Nibbles, etc. Dieser Eintrag wurde am Mittwoch, 30. September 2009 um 19:08 Uhr und ist abgelegt unter Uncategorized. Sie können alle Antworten auf diesen Eintrag durch den RSS 2.0 Feed verfolgen. Du kannst eine Antwort hinterlassen. Oder trackback von deiner eigenen Seite. 12 Responses to 8220Binary Literals in C8221 Nigel Jones sagt: Großer Beitrag (oder vielleicht stehlen :-)). Ich wollte immer einen Weg, um Binärzahlen in C auszudrücken, und jetzt habe ich einen Ich nahm den Code und experimentierte ein bisschen damit. Wenn Sie die Optimierung komplett ausschalten, haben sie meinen IAR ARM-Compiler auch einen redundanten Code aufgenommen. Allerdings hat die niedrigste Optimierungsstufe dieses Problem behoben. Die MISRA-Compliance-Checkerin hat natürlich eine absolute Passform über die Verwendung dieser Makros gehabt und eine große Anzahl von Beschwerden erzeugt. Ich denke, das ist noch ein Beispiel, wo man einen intelligenten Handel machen muss. Soll ich ein Makro verwenden, das von MISRA-Standards unsicher ist, erlaubt mir doch, eine ganze Klasse von Fehlern zu beseitigen. Vielleicht sehen wir in meiner reichhaltigen Freizeit, ob ich die Makros umstrukturieren kann, um MISRA-Compliance zu ermöglichen. MISRA-Konformität ermöglicht Ausnahmen für genau diese Art von Ding. Dies macht Ihren Code sicherer und nicht weniger sicher: Die Makros verkapseln einzeln unsichere Konstrukte, sondern verpacken sie mit einer sehr sicheren Schnittstelle. Sie brauchen nur eine projektweite MISRA Abweichung, die auf diese drei Makros spezialisiert ist Und Sie können die volle MISRA-Einhaltung beibehalten, sowohl im Geist als auch im Brief des Gesetzes. Verschiedene MISRA-Kontrolleure behandeln Abweichungen auf unterschiedliche Weise, aber PC-Lint behandelt makro-spezifische Abweichungen sehr gut, für ein Beispiel. Ich versuche, die feineren Punkte von C zu lernen und wie man damit kreativ ist. ) Ich verstehe nichts die Binärmakros. 821282128212821282128212821282128212- 8-Bit-Umwandlungsfunktion definieren B8 (x) ((xamp0x0000000FLU) 1: 0) ((xamp0x000000F0LU) 2: 0) ((xamp0x00000F00LU) 4: 0) ((xamp0x0000F000LU) 8: 0) ((xamp0x000F0000LU) 0) ((xamp0x00F00000LU) 32: 0) ((xamp0x0F000000LU) 64: 0) (xamp0xF0000000LU) 128: 0) 8212821282128212821282128212821282128212-Wenn wir an der ersten Zeile teilnehmen: (xamp0x0000000FLU) Es scheint mir, dass x ist unded Mit der konstanten 0x0000000FLU. Its mit dieser Konstante, dass ich verloren gehen. Zu mir 0x0000000F 15 (in Dezimal). Der Zitat, wie ich es unterhielt, und ich könnte falsch sein, bedeutet, dass die Konstante ein Unsigned Long ist. Ich verstehe, wie das Makro funktionieren soll. Mein Problem, ich denke, ist mit der Syntax. Kann jemand vergossen einige lightThanks, Kennykenlanspach Nigel Jones sagt: Sicher kann. Beispielsweise können wir B8 (1011) betrachten. Zuerst das HEX-Makro konvertiert das Argument 1011 in 0x1011UL. Dies geschieht über den Saitenoperator. (Dies ist ein ziemlich dunkler Teil des Präprozessors 8211 Sie finden weitere Informationen online).Now let39s sehen, was passiert mit dem B8 (x) Makro. Es besteht aus 8 Zeilen, von denen jede eine Bitposition effektiv testet. Die erste Zeile ist (x amp 0x0000000Flu). 1. 0. (Beachten Sie, dass I39ve hinzugefügt Räume und machte die LU Kleinbuchstaben, so dass die Dinge ein wenig klarer IMHO).Jedenfalls wird dies: 0x1011ul amp 0x0000000Ful 0x1. Dies beurteilt offensichtlich wahr und so kehrt der ternäre Operator zurück 1. Die zweite Zeile des B8 () - Makros ist (x amp 0x000000F0lu). 2. 0). Damit dehnt sich das auf 0x1011 amp 0x000000F0 0x10 aus. Dies ist offensichtlich ausgewertet, und der ternäre Operator gibt 2 zurück, was dem vorherigen Ergebnis hinzugefügt wird, was eine Summe der Dezimalzahl ergibt. Die dritte Zeile des B8 () - Makros ist (x amp 0x00000F00lu). 4. 0). Damit dehnt sich dieser auf 0x1011 amp 0x00000F0 0x0 aus. Dies wird offensichtlich falsch ausgewertet, und so kehrt der ternäre Operator 0 zurück, der dem vorherigen Ergebnis hinzugefügt wird, wobei wir unsere Summe in Dezimalzahl 3 halten. Die vierte Zeile des B8 () - Makros ist (x amp 0x0000F000lu). 8. 0). Damit erweitert dies auf 0x1011 amp 0x0000F000 0x1000. Dies beurteilt offensichtlich wahr und der ternäre Operator gibt 8 zurück, was dem vorherigen Ergebnis hinzugefügt wird, was insgesamt Dezimal 11 8211 und unser endgültiges Ergebnis ergibt. Die B16- und B32-Makros bauen einfach auf diese Technik auf, indem sie geeignete Casts und Verschiebungen verwenden. Hoffe das hilft. Wenn es nicht wieder posten und ich versuche, die Erklärung zu erweitern. Miro Samek sagt: In der Tat, MISRA-Checker nicht besonders gerne die Makros, weil sie gegen die folgenden MISRA-Regeln verstoßen: Makro HEX (n) verletzt MISRA Erforderliche Regel 98, Mehrfache Nutzung von 3939 Operatoren in Makro Definitionmacro B8 verletzt MISRA Regel 7, Trigraphs sollen Wird nicht verwendetMacro B8 verletzt MISRA Regel 96, Expression-like Makro 3939 nicht parenthesizedBut die Makros können wie folgt umgebaut werden, um mit MISRA übereinzustimmen: define HEX (n) ((uint32t) 0xn) definieren B8 (x) (((x) amp 0 (x) amp 0x10LU) gtgt 3) ((x) amp 0x100LU) gtgt 6) ((x) amp 0x1000LU) gtgt 9) ((x) amp 0x10000LU) gtgt 12) ((x) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) (B) B8 (B & sub0;) B8 (HEX (B & sub0;)) B16 (B & sub0; (B8 (HEX (b0)) (B8 (HEX (b1)) ltlt 8))) definieren B32 (b3, b2, b1, b0) ((uint32t) (B8 (HEX (b0 )) (B8 (HE1 (b1)) ltlt 8) (B8 (HEX (b2)) ltlt 16) (B8 (HEX (b3)) ltlt 24))) Während die Makros MISRA-konform sind, kann die tatsächliche Verwendung manchmal führen Zu verletzen MISRA Regel 19 (oktale Konstante verwendet), wenn Sie Ihr Binär-Literal mit einer Null beginnen. Miro Samek Es gibt keine Trigraphen in diesem Code. Es scheint, dass Ihr MISRA-Checker ein bisschen zu trigger-happy (sie alle sind). Bei manueller Code-Inspektion kann ich die folgenden MISRA-Verletzungen vorstellen: Verwendung von funktionsähnlichen Makros (19.7), nur ein Vorkommen von einem Makro (19.12) sollte nicht verwendet werden (19.13), U-Suffix für ganzzahlige Literale (10.6 ), Keine impliziten Typkonvertierungen (10.1), oktale Integer-Literale sollten nicht verwendet werden (7.1), anstelle der Standard-Integer-Datentypen (6.3) sollte C99 nicht verwendet werden (1.1). 8230 Themen, wenn Sie nicht gelesen haben Mike Barr8217s jüngsten Posting auf binäre Literale, dann empfehle ich dringend, dass Sie dies tun. Es wäre sehr schön in 8230 gepasst Ich habe niemals die Notwendigkeit von binären Literalen verstanden. Zurück in der Schule würden sie uns unsere erste 8220hello world8221 schreiben lassen, bevor wir Binär und Hexe kennen. Ich denke, du solltest sicher davon ausgehen können, dass jeder Programmierer hex lesen kann. Abgesehen davon glaube ich persönlich, dass Preg (2) (B8 (11) ltlt 3) (B8 (11) ltlt 3) (B8 (101) ltlt 0)) viel schwerer zu lesen ist als preg (2ltlt5) (3ltlt5) (5ltlt0) ), Ganz zu schweigen von Preg XYZ, wo XYZ Bitmaskenkonstanten sind. In einer echten Anwendung würden diese Bitmasken natürlich sinnvolle Namen haben. B32 (11111100, 11000000, 11000000, 11111100), B32 (11000000, 11000000, 11000000, 00000000) ist offensichtlich ein 8216F8217 Zeichenbild. Was Sie wouldn82ns sehen, ob es geschrieben wurde 82200xFCC0C0FC, 0xC0C0C0008221. Peter Maler sagt: Es ist natürlich nicht sinnvoll in den Beispielen, die du gibst. Allerdings ist manchmal ein bisschen Muster genau das: ein Muster. Stellen Sie sich die Schriftart vor. Wenn Sie als binäre Literale geschrieben sind, können Sie die Schriftartbriefe (und alle Fehler), während Hex-Werte bedeutungslose Buchstaben sind. Immer wenn ein Wert ein visuelles Muster darstellt, sind binäre Literale eine unschätzbare Hilfe. Tatsächlich, das ist mein Hauptgebrauch für binäre Literale. Julian Day sagt: Hmm, I8217m nicht ganz sicher, ob ich diese oder nicht mag. Bei der Arbeit in CC, I8217m sehr verwendet, um nicht mit binären numerischen Literalen und plötzlich sehen dies leicht wirft mich. Bei der Arbeit in Ada und anderen Sprachen mit binären numerischen Literalen, kann ich kaum daran erinnern, entweder mit ihnen oder sehen sie verwendet. Ich bin daran interessiert, einen starken Fall für die Verwendung von ihnen zu sehen, da ich mit Lundin über dem Preg-Beispiel einverstanden bin, aber tatsächlich ein Makro oder const für jedes der Felder anstelle von numerischen Literalen verwenden würde. Auf jeden Fall, aus einer MISRA 2004-Perspektive, denke ich, dass das größte Hindernis die Regel 13.7 ist, die besagt, dass 8220Boolean-Operationen, deren Ergebnisse unveränderlich sind, nicht zulässig sind.8221 Das ist der ganze Punkt dieser Makros, um diese Invarianz zu nutzen Ein numerisches Literal aus dieser binären Darstellung zur Kompilierzeit. Sie können deaktivieren Warnungen über die Makro-Definitionen und machen die Erweiterungen MISRA Typ konform, aber Sie müssen sicherstellen, dass 13.7 ist nicht in Kraft an der Stelle, wo das Makro erweitert wird, da die Erweiterung selbst ist nicht MISRAble, wenn das ist die Korrektes Adjektiv. Als Referenz, hier8217s eine Version des Makros, die mit dem GHS verwendet werden könnte compiler8217s in Regeln überprüft: ifndef BINH definieren BINH pragma ghs startnomisra definieren HEX (n) 0xnLU definieren B8 (x) ((uint8t) (((xamp0x0000000FLU) 0UL ) ((Xamp0x0000F0LU) 0UL) 4UL: 0UL) ((xamp0x0000F0LU) 0UL) (siehe xUL0x0000FULU) 0UL) ((Xamp0x00000000LU) 0UL) 64UL: 0UL) (kalibriert0x000000LU) 0UL) 64UL: 0UL)) (sichtbar) Makro definieren B8 (d) ((uint8t) B8 (HEX (xamp0x00F00000LU) 0UL) D))) definieren B16 (dmsb, dlsb) ((un16t) ((uint16t) (B8 (dmsb) ltlt8) ((uint16t) B8 (dlsb)))) definieren B32 (dmsb, db2, db3, dlsb) (( Die GHS-Compiler würden die Binär-Expressionen als das äquivalente numerische Literal auf jeder Optimierungsstufe auswerten, was schließlich die Binär-Expression als das äquivalente numerische Literal auf jeder Optimierungsstufe auswerten würde Ist der Punkt von ihnen. Julian Day sagt:
Comments
Post a Comment