为什么在这个函数原型中使用了uint8_t * const Tx_Buf?

时间:2017-11-28 07:59:09

标签: c arrays string

以下是函数的原型声明:

MD_STATUS R_UART0_Send(uint8_t *const tx_buf, uint16_t tx_num);

上述功能用于通过UART进行数据传输。 我有传递参数到这个函数,但这给了我错误,即参数列表错误。

MD_STATUS R_UART0_Send("TEPL", 5);

你能帮助我理解为什么会使用这个uint8_t const吗?

/* Function Name: R_UART0_Send
 * Description  : This function sends UART0 data.
 * Arguments    : tx_buf - transfer buffer pointer
 *                tx_num -buffer size
 * Return Value : status - MD_OK or MD_ARGERROR
*/
MD_STATUS R_UART0_Send(uint8_t * const tx_buf, uint16_t tx_num)
{
    MD_STATUS status = MD_OK;

    if (tx_num < 1U)
    {
        status = MD_ARGERROR;
    }
    else
    {
        gp_uart0_tx_address = tx_buf;
        g_uart0_tx_count = tx_num;
        STMK0 = 1U;    /* disable INTST0 interrupt */
        TXD0 = *gp_uart0_tx_address;
        gp_uart0_tx_address++;
        g_uart0_tx_count--;
        STMK0 = 0U;    /* enable INTST0 interrupt */
    }

    return (status);
}

以上是我的功能的定义

2 个答案:

答案 0 :(得分:-1)

参数类型uint8_t *const tx_buf表示 指向非常量数据的常量指针

这意味着指针变量在指向的位置不能更改,但是,数据可以通过此指针在此函数中指向的位置进行更改。但到目前为止这不是问题。

问题是你的函数调用。您使用常量数据(字符串文字)调用函数,并且无法修改它们。

现在你有两个选择(选一个,我会先一个):

将功能参数修改为更有用的类型

MD_STATUS R_UART0_Send(const uint8_t *tx_buf, uint16_t tx_num);
R_UART0_Send("TEPL", 5);

不要使用字符串文字调用函数

char data[] = "TEPL"; //Make array first with your string
R_UART0_Send(data, 5); //Pass it to original function

答案 1 :(得分:-1)

可能是因为该函数是用C语言允许的最现代的方法编写来处理Unicode的。

通过使用保证的固定宽度整数,您可以传输有保证的8位字节,并且UTF-8字符串不会受到关于字符长度的各种假设的影响。