Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Klatsch und Tratsch (https://www.delphipraxis.net/34-klatsch-und-tratsch/)
-   -   "C" Compiler Problem - Just for fun (https://www.delphipraxis.net/188982-c-compiler-problem-just-fun.html)

ATS3788 23. Apr 2016 20:00

"C" Compiler Problem - Just for fun
 
Hallo
Ich mache mich zur seit ein wenig rar in diesem Forum, weil ich mit µC rumspiele
Ich verstehe PIC16 und PIC18 (Microchip) ganz gut. (XC8 Compiler)

Nun bin ich auf PIC32 umgestiegen weil ich dachte, der ist sehr Leistungsfähig bei kleinem
Geld, also Microchip liefer mit MPLAB X auch eine Java Basierende Oberfläche für C und C++ und
einen Composer mit dem Namen Harmony.
http://www.microchip.com/mplab/mplab-harmony

Nur das hat Macken ohne Ende eines möchte ich hier vorstellen


Code:
#define LCDIF_PBWIDTH4BITS (0x01 << 6)

 startOfLcdIfObjs->lcdIfFlags |= LCDIF_PBWIDTH4BITS; // It's doing this , just for Testing

   if (busWidth == 4)
            {
                Nop();
                Nop();
                startOfLcdIfObjs->lcdIfFlags |= LCDIF_PBWIDTH4BITS; // <--- Does not like this
                startOfLcdIfObjs->lcdIfFlags |= (busDataShift & //  It's doing this
                                                        LCDIF_SHIFTDATAMASK);
Tia, der Compiler überspringt das einfach und bei einem Normalen Error Level
bekommst Du auch keine Meldung und wenn habe ich sie nicht gesehen.


Damit kann man Stunden verbringen, bis man darauf kommt.
C ist wirklich praktisch für µC aber hier ist es echt ärgerlich.

Ich wünsche euch einen schönen Sonntag.

Rollo62 24. Apr 2016 08:27

AW: "C" Compiler Problem - Just for fun
 
Könnte es sein dass das Define auch mit der größeren, z.B. long int, definiert werden muss ?

Delphi-Quellcode:
//also von
#define LCDIF_PBWIDTH4BITS (0x01 << 6)
// zu
#define LCDIF_PBWIDTH4BITS (0x0001 << 6)
//oder
#define LCDIF_PBWIDTH4BITS (0x00000001 << 6)
Rollo

BUG 24. Apr 2016 08:37

AW: "C" Compiler Problem - Just for fun
 
Zitat:

Zitat von Rollo62 (Beitrag 1336487)
Könnte es sein dass das Define auch mit der größeren, z.B. long int, definiert werden muss ?

C Präprozessormacros sind quasi Textersetzung, das sollte keine Rolle spielen.

Klingt ein bisschen noch Optimierungskram. Gerade bei MMIO ist volatile ganz nützlich :wink:

Rollo62 24. Apr 2016 08:54

AW: "C" Compiler Problem - Just for fun
 
Ja, aber 0x01 wird womöglich als Byte interpretiert und abgeschnitten, während 0x00000001L mit den vollen 32 Bit rechnen kann.

Die Frage ist vielleicht welcher Typ ist startOfLcdIfObjs->lcdIfFlags, Byte oder long ?

Könnte so ein Problem mit der implizierten Typumwandlung sein.

Rollo

Zacherl 24. Apr 2016 12:43

AW: "C" Compiler Problem - Just for fun
 
Zitat:

Zitat von Rollo62 (Beitrag 1336491)
Könnte so ein Problem mit der implizierten Typumwandlung sein.

Dann sollte diese Zeile aber auch Probleme machen:
Code:
startOfLcdIfObjs->lcdIfFlags |= LCDIF_PBWIDTH4BITS; // It's doing this , just for Testing


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:47 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz