gpt4 book ai didi

c - 在嵌入式 C 中传递字符串变量

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

我正在使用 ATmega8,我正在尝试通过 USART(以 printf 样式)发送字符串,其中包含一个变量。我正在使用 Atmel Studio 6.2 作为 AVR 的 IDE编程。这是我的代码:-

#define F_CPU 8000000UL
#include <avr/io.h>
#include <util/delay.h>

void USARTInit(uint16_t ubrr_value) // initialize USART
{

UBRRL = ubrr_value;
UBRRH = (ubrr_value>>8);
UCSRC|=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);
UCSRB=(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);

}

void USARTWriteChar(char data) // send character using USART
{

while(!(UCSRA & (1<<UDRE)));
UDR=data;
}

void send_string(char s[]) // send string using USART
{
int i =0;

while (s[i] != 0x00)
{
USARTWriteChar(s[i]);
i++;
}
USARTWriteChar('\n');
}


int main(void)
{
USARTInit(51);
char val='A';
while(1)
{
send_string("Value = %c",val);

}
}

现在,当我编译我的代码时,我得到了这个错误:-

too many arguments to function 'send_string`

所以,显然它不像在 C 编程中那样接受 %c。在 embedded C 中有没有办法在字符串中传递变量?

最佳答案

too many arguments to function send_string

那里的消息很清楚,你的 send_string() 只接受一个指向 char 的指针作为输入参数,但是在调用时,你试图传递两个输入导致不匹配的参数 "Value = %c",val

您不能按照显示的方式在此处使用格式说明符。

一般来说,要走的路是使用临时缓冲区,使用snprintf()生成输入字符串,然后将缓冲区传递给 send_string() 调用。

也就是说,由于您只感兴趣c 的值传递给 send_string(),您可以将函数简化为只接受一个char,比如

void send_string(char s) { ...

然后,传递常量(预定义)字符串 Value = 然后,输入参数 go 得到相同的效果。

关于c - 在嵌入式 C 中传递字符串变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38324871/

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