何时在c,UART函数中使用函数参数中的指针

时间:2016-01-18 11:41:19

标签: c pointers uart

我正在为微控制器上的uart读一些示例代码。

在uart库的头文件中有以下函数定义。

然后在主程序中调用以下代码。

我的问题是为什么他们使用指针作为函数参数?

或者,下面的UART写入函数声明不使用指针。

我只是想知道为什么以及何时使用指针。

非常感谢

3 个答案:

答案 0 :(得分:1)

简而言之,您必须使用指针,因为ti_uart_write_buffer发送数据数组。

出于性能原因,无法通过值将数组传递给C函数。因为这样做会涉及制作数据的副本,这会浪费执行时间和内存。所以C语言本身就不可能做到这一点。

相反,您可以将指针传递给数组的第一个元素。

答案 1 :(得分:0)

在main函数中,BANNER被强制转换为uint8_t*,因为它是字符串文字,因此类型const char[]在用于const char*时会衰减表达式或作为函数传递。 charuint8_t是不同的类型,但它们的表示形式相同,只是对某些值的解释不同。

main函数还有另一个问题:您应该传递strlen(BANNER)而不是sizeof(BANNER),以便不在要传输的字节数中包含空终结符。

以下是更正后的版本:

#define BANNER  "Hello, world!\n\n"

int main(void) {
    ti_uart_write_buffer(TI_UART_0, (const uint8_t *)BANNER, strlen(BANNER));
    return 0;
}

答案 2 :(得分:0)

在功能描述中可以看出它是一个多字节数据写入功能。因此,当您想要写多个字节时,您会发送一个指向该数据的指针。 另一方面,如果您只想写一个字节,请使用只占用一个字节的函数,该函数按值传递。