ich eine Header-Datei in meinem Projekt verwenden, das hatte definieren die folgende (n):Gibt es irgendeinen Grund, etwas "flüchtiges const" in C zu erklären, sondern nur "flüchtig" in C++?
#ifdef __cplusplus
extern "C" {
#endif
#ifdef __cplusplus
#define __I volatile /*!< Defines 'read only' permissions*/
#else
#define __I volatile const /*!< Defines 'read only' permissions*/
#endif
Die __I
verwendet wird, wie in einer anderen Header-Datei folgt:
typedef struct {
// more members before
__I uint32_t CR; /*!< GPIO Commit*/
// more members after
} GPIOA_Type;
#define GPIOF_BASE 0x40025000UL
#define GPIOF ((GPIOA_Type *) GPIOF_BASE)
Meine Frage ist, warum sollte die __I
const in C gemacht werden, aber nicht in C++? Sie können immer noch den Wert ändern, auf den CR verweist, da Sie die Adresse haben, aber ich bin nur neugierig, warum die Definition von __I
anders ist.
Für jeden, der sich, was dies für oder aus, die __I
definiert sind von IAR Embedded Workbench ARM Cortex-M4 , und die Struktur ist von Texas Instruments LM4F120H5QR CMSIS Dateien.
In C++ gibt 'const' interne Verknüpfung. Ich weiß nicht, ob es in C ist, aber ich vermute nicht. Beachten Sie jedoch, dass "__I" ein Name ist, der der Implementierung vorbehalten ist und nicht im Benutzercode verwendet werden soll. –
@Mat McNabb Ich meinte, da ich die genaue Adresse des CR-Registers habe, kann ich folgendes tun: #define GPIO_PORTF_CR_R (* ((volatile unsigned long *) 0x40025524)), dann GPIO_PORTF_CR_R = xxxxx, und das ändert den Wert des Registers . – SoftwareDev
@SoftwareDev OK - das 'volatile const CR' bedeutet, dass Sie' CR' nicht verwenden können, um das Register zu ändern; natürlich kann es auf andere Weise modifiziert werden –