2017-04-24 15 views
1

Iにおいてキャストのconst intへINTポインタは、私のSTM32コードでスイッチケースノード

#define USART1    ((USART_TypeDef *) USART1_BASE) 

を有し、iが

switch((uint32_t)ptr) 
{ 
    case USART1: return 1; 
(...) 

しかしGCCアーム(6.3.1したいと思います)私は

を使用することができる情報を見つけました

error: reinterpret_cast from integer to pointer

私にエラーを与えます210

case __builtin_constant_p(USART1): return 0; 

これはgccの解決策ですか?もっと一般的なものがありますか?

+1

'ptr'はどのようなタイプですか? '(USART_TypeDef *)とは何ですか? – Unimportant

+0

スイッチ(reinterpret_cast ptr))? –

+0

整数 - > 'switch((uint32_t)ptr)'へのポインタをキャストしようとしています。 – CinCout

答えて

2

を符号なし整数定数のカップルの単なる和であるUART1_BASEがあります。マシン・ヘッダーを参照してください。

#define PERIPH_BASE   0x40000000U 
#define APB2PERIPH_BASE  (PERIPH_BASE + 0x00010000U) 
#define USART1_BASE   (APB2PERIPH_BASE + 0x1000U) 

だから、あなたにもcase文で整数へのポインタをキャストするのを忘れ

switch((unsigned int)ptr) { 
    case USART1_BASE: return 1; 
} 
0

USART1_BASEは、STM32開発環境のヘッダーファイルの番号です。スイッチで使用するタイプを決定したら、コードをコンパイルできます。私はuint32_tをお勧めします。

switch((uint32_t)ptr) 
{ 
    case USART1_BASE: return 1; 
    (...) 

あなたがスイッチからキャストを削除しようとすることができ、より読みやすくするような場合:

uint32_t ptr_value = (uint32_t)ptr; 

switch(ptr_value) 
{ 
    case USART1_BASE: return 1; 
    (...) 
2

を使用することができるはずです。 私の作業コードの例:

switch ((uint32_t)gpio) { 
    case (uint32_t)GPIOA: 
     EXTI_cfgr = 0b0000; 
     break; 
    case (uint32_t)GPIOB: 
     EXTI_cfgr = 0b0001; 
     break; 
    case (uint32_t)GPIOC: 
     EXTI_cfgr = 0b0010; 
     break; 
    default: 
     break; 
    } 
関連する問題