STM32里面的一些小函數——assert_param,PUTCHAR_PROTOTYPE


assert_param

可以在stm32f10x_conf.h找到原型,

#ifdef USE_FULL_ASSERT

  #define assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t*)__FILE__, __LINE__))
  void assert_failed(uint8_t* file, uint32_t line);

#else
  #define assert_param(expr) ((void)0)
#endif 

大概是什么意思呢?

分兩段看:若定義了USE_FULL_ASSERT,則執行下面的define語句和后面的void assert_failed函數,   反之則只執行assert_param函數(空函數)。

assert_param(expr) ((expr) ? (void)0 : assert_failed((uint8_t*)__FILE__, __LINE__)):

如果expr為真,即執行(void)0函數,如果expr為假,即執行后面的assert_failed函數,而assrt_failed函數在main下面可以找到

void assert_failed(u8* file, u32 line) 
{ /* User can add his own implementation to report the file name and linenumber, 
ex: printf("Wrong parameters value: file %s on line %d\r\n", file,line) */ 
/* Infinite loop */ 
while (1) { } 
}

也就是說,可以用assert函數,來執行判斷功能,用來程序在跑飛的時候,進入此處。

 

PUTCHAR_PROTOTYPE在main函數中可以找到原型,此處定義的是USART1,可以借助這個函數測試串口是否正常。

PUTCHAR_PROTOTYPE
{
USART_SendData(USART1, (uint8_t) ch);
/* Loop until the end of transmission */
while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET)
{}

return ch;
}

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM