以下是函数的原型声明:
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);
}
以上是我的功能的定义
答案 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字符串不会受到关于字符长度的各种假设的影响。