gpt4 book ai didi

c - 了解头文件中的函数定义

转载 作者:太空宇宙 更新时间:2023-11-04 04:36:34 25 4
gpt4 key购买 nike

我正在将编写到特定微 Controller 的软件移植到另一个微 Controller ,但我在 C 语言方面遇到了问题。

我想提请注意下面提到的在 hal_spi_rf_trxeb.c 中定义的函数文件。尽管我在文件中进行了搜索,但我无法找到以下函数的完整函数描述。

  1. TRXEM_SPI_WAIT_DONE()

  2. TRXEM_SPI_RX()

  3. TRXEM_SPI_WAIT_DONE()

  4. TRXEM_SPI_WAIT_TX_DONE()

  5. TRXEM_SPI_RX()

  6. TRXEM_SPI_WAIT_MISO_LOW(x)

经过更多搜索后,我发现这些函数存在于头文件本身中。更具体地说 inhal_spi_rf_trxeb.h文件。

    /******************************************************************************
* @fn trx16BitRegAccess
*
* @brief This function performs a read or write in the extended adress
* space of CC112X.
*
* input parameters
*
* @param accessType - Specifies if this is a read or write and if it's
* a single or burst access. Bitmask made up of
* RADIO_BURST_ACCESS/RADIO_SINGLE_ACCESS/
* RADIO_WRITE_ACCESS/RADIO_READ_ACCESS.
* @param extAddr - Extended register space address = 0x2F.
* @param regAddr - Register address in the extended address space.
* @param *pData - Pointer to data array for communication
* @param len - Length of bytes to be read/written from/to radio
*
* output parameters
*
* @return rfStatus_t
*/
rfStatus_t trx16BitRegAccess(uint8 accessType, uint8 extAddr, uint8 regAddr, uint8 *pData, uint8 len)
{
uint8 readValue;

<span style="background-color:#ff0000;">TRXEM_SPI_BEGIN();</span>
while(TRXEM_PORT_IN & TRXEM_SPI_MISO_PIN);
/* send extended address byte with access type bits set */
<span style="background-color:#ff0000;"> TRXEM_SPI_TX</span>(accessType|extAddr);
TRXEM_SPI_WAIT_DONE();
/* Storing chip status */
readValue = TRXEM_SPI_RX();
TRXEM_SPI_TX(regAddr);
TRXEM_SPI_WAIT_DONE();
/* Communicate len number of bytes */
trxReadWriteBurstSingle(accessType|extAddr,pData,len);

hal_spi_rf_trxeb.h 声称以宏的形式具有我正在搜索的功能。这些宏如下所示。

/******************************************************************************
* MACROS
*/

/* Macros for Tranceivers(TRX) */
#define TRXEM_SPI_BEGIN() st( TRXEM_PORT_OUT &= ~TRXEM_SPI_SC_N_PIN; NOP(); )
#define TRXEM_SPI_TX(x) st( UCB0IFG &= ~UCRXIFG; UCB0TXBUF= (x); )
#define TRXEM_SPI_WAIT_DONE() st( while(!(UCB0IFG & UCRXIFG)); )
#define TRXEM_SPI_WAIT_TX_DONE() st( while(!(UCB0IFG & UCTXIFG)); )
#define TRXEM_SPI_RX() UCB0RXBUF
#define TRXEM_SPI_WAIT_MISO_LOW(x) st( uint8 count = 200; \
while(TRXEM_PORT_IN & TRXEM_SPI_MISO_PIN) \
{ \
__delay_cycles(5000); \
count--; \
if (count == 0) break; \
} \
if(count>0) (x) = 1; \
else (x) = 0; )

问题

  • 我不明白这些宏是如何工作的。

  • 谁能告诉我函数是如何在头文件中定义的?

  • 如何在头文件中定义函数?

  • st() 函数的作用是什么?

如果您需要,可以通过this link 下载整个项目。 .

有关更多信息,您可以查看链接的 header 和源文件(.h.c)文件。

最佳答案

正如您已经说过的,这些不是函数而是宏。您可以在 gcc manual 中阅读有关宏的信息.

A macro is a fragment of code which has been given a name. Whenever the name is used, it is replaced by the contents of the macro.

这就是总结。有比这更多的细节。但对于初学者,您可以将宏视为代码替换规则。在编译器完成工作之前,预处理器会扩展宏。

一个简单的例子:

#define MY_PRINT_MACRO(string1, string2) printf("%s %s\n", string1, string2)

MY_PRINT_MACRO("hello", "world");

预处理器会将第二行更改为:

printf("%s %s\n", "hello", "world");

这正是编译器将看到的(它根本看不到 MY_PRINT_MACRO)。

关于c - 了解头文件中的函数定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30099030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com