typedef struct{__IO uint32_t CRL;__IO uint32_t CRH;__IO uint32_t IDR;__IO uint32_t ODR;__IO uint32_t BSRR;__IO uint32_t BRR;__IO uint32_t LCKR;} GPIO_TypeDef;#define GPIOF_BASE (APB2PERIPH_BASE + 0x1C00)//定義了一個偏移地址#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)//請問這句是什么意思?#define GPIO_LED GPIOFtypedef struct{uint16_t GPIO_Pin;GPIOSpeed_TypeDef GPIO_Speed;GPIOMode_TypeDef GPIO_Mode;}GPIO_InitTypeDef;GPIO_InitTypeDef GPIO_InitStructure;GPIO_Init(GPIO_LED, &GPIO_InitStructure);/*關于這兩個實參,照下面的聲明看第1個是一個指向GPIO_TypeDef結構的指針,那么具體到GPIO_LED也就是上面問的那句define是什么意思?第2個實參是把GPIO_InitTypeDef結構的變量GPIO_InitStructure的首地址傳進去?*/void GPIO_Init(GPIO_TypeDef* GPIOx, GPIO_InitTypeDef* GPIO_InitStruct)assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));}這個assert是什么意思?是說(GPIO_InitStruct->GPIO_Mode)只要為下面聲明中的任一項就不終止程序往下執行?#define IS_GPIO_MODE(MODE)(((MODE) == GPIO_Mode_AIN) || ((MODE) == GPIO_Mode_IN_FLOATING) || \((MODE) == GPIO_Mode_IPD) || ((MODE) == GPIO_Mode_IPU) || \((MODE) == GPIO_Mode_Out_OD) || ((MODE) == GPIO_Mode_Out_PP) || \((MODE) == GPIO_Mode_AF_OD) || ((MODE) == GPIO_Mode_AF_PP))
3 回答

一只斗牛犬
TA貢獻1784條經驗 獲得超2個贊
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
意思是:IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode)這個判斷條件必須為真,否則程序就會進入死循環。
一般assert用來判斷必須為真的一些條件,防止程序出現意外錯誤。
例如:
assert(汽車有4個輪子)//這個是必須成立的條件
開汽車

婷婷同學_
TA貢獻1844條經驗 獲得超8個贊
#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE)
//把一個數值強制轉換成指針類型
GPIO_Init(GPIO_LED, &GPIO_InitStructure);
//函數調用,第一個參數為指向GPIO_TypeDef類型的地址,第二個參數為指向GPIO_InitTypeDef
類型的地址
assert_param(IS_GPIO_MODE(GPIO_InitStruct->GPIO_Mode));
//assert,俗稱斷言,即假定某些條件必為真。如果在程序運行過程中斷言的條件不幸的為假,則會發生assert中斷,會提示哪個文件哪一行發生了assert錯誤。
- 3 回答
- 0 關注
- 136 瀏覽
添加回答
舉報
0/150
提交
取消