日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]在學(xué)習(xí)stm32庫函數(shù)過程中,筆者遇到大量的assert_param語句。經(jīng)查明,assert_param的作用就是用來判斷傳遞給函數(shù)的參數(shù)是否是有效值。以下是從固件庫中復(fù)制粘貼的:void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Pe

在學(xué)習(xí)stm32庫函數(shù)過程中,筆者遇到大量的assert_param語句。經(jīng)查明,assert_param的作用就是用來判斷傳遞給函數(shù)的參數(shù)是否是有效值。

以下是從固件庫中復(fù)制粘貼的:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph, FunctionalState NewState)
{

assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));
assert_param(IS_FUNCTIONAL_STATE(NewState));
if (NewState != DISABLE)
{
RCC->APB2ENR |= RCC_APB2Periph;
}
else
{
RCC->APB2ENR &= ~RCC_APB2Periph;
}
}

筆者用keil中的鼠標(biāo)右鍵“go to definition xxxxxx""

查看assert_param(IS_RCC_APB2_PERIPH(RCC_APB2Periph));語句中IS_RCC_APB2_PERIPH的定義,得到如下結(jié)果:


#define RCC_APB2Periph_AFIO((uint32_t)0x00000001)
#define RCC_APB2Periph_GPIOA((uint32_t)0x00000004)
#define RCC_APB2Periph_GPIOB((uint32_t)0x00000008)
#define RCC_APB2Periph_GPIOC((uint32_t)0x00000010)
#define RCC_APB2Periph_GPIOD((uint32_t)0x00000020)
#define RCC_APB2Periph_GPIOE((uint32_t)0x00000040)
#define RCC_APB2Periph_GPIOF((uint32_t)0x00000080)
#define RCC_APB2Periph_GPIOG((uint32_t)0x00000100)
#define RCC_APB2Periph_ADC1((uint32_t)0x00000200)
#define RCC_APB2Periph_ADC2((uint32_t)0x00000400)
#define RCC_APB2Periph_TIM1((uint32_t)0x00000800)
#define RCC_APB2Periph_SPI1((uint32_t)0x00001000)
#define RCC_APB2Periph_TIM8((uint32_t)0x00002000)
#define RCC_APB2Periph_USART1((uint32_t)0x00004000)
#define RCC_APB2Periph_ADC3((uint32_t)0x00008000)
#define RCC_APB2Periph_TIM15((uint32_t)0x00010000)
#define RCC_APB2Periph_TIM16((uint32_t)0x00020000)
#define RCC_APB2Periph_TIM17((uint32_t)0x00040000)
#define RCC_APB2Periph_TIM9((uint32_t)0x00080000)
#define RCC_APB2Periph_TIM10((uint32_t)0x00100000)
#define RCC_APB2Periph_TIM11((uint32_t)0x00200000)

#define IS_RCC_APB2_PERIPH(PERIPH) ((((PERIPH) & 0xFFC00002) == 0x00) && ((PERIPH) != 0x00))

。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

以這個函數(shù)為例:

void RCC_APB2PeriphClockCmd(uint32_t RCC_APB2Periph,

FunctionalState

NewState)的作用就是使能APB2外設(shè)時鐘,而當(dāng)我們調(diào)用這個函數(shù)的時候,所給它的參數(shù)必須是以上規(guī)定的幾個數(shù)值中的一個,不可隨意填一個未定義的值進去。assert_param()函數(shù)有效的解決了這個問題,它在函數(shù)運行之初,便判斷工程師所給的值是否為這個函數(shù)的有效值,以達到糾錯報錯的功能。同時,當(dāng)我們不知道這個函數(shù)該填入什么樣的值的時候,就可以使用keil中提供的右鍵“go

to definition xxxx"查看assert_param()括號中的定義。


本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關(guān)閉