在嵌入式 C 中传递字符串变量
Passing a variable in string in Embedded C
我正在使用 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 =
,然后,输入参数得到相同的效果。
首先,嵌入式C语言是不存在的。您正在用 C 编程。此代码无效。
你的函数 void send_string(char s[])
只接受一个 char []
类型的参数。您将其称为 send_string("Value = %c",val);
,因此您向其传递了两个参数。在 C 字符串中 %
字符没有特殊含义。它只对 printf
函数有意义。你调用相当于send_string("It doesn't matter what you write here", 'A');
你可以用另一种方式做你想做的事:
#include <stdio.h>
...
int main(void)
{
USARTInit(51);
char val='A';
char buffer[64];
sprintf(buffer, "Value = %c", val);
while(1)
{
send_string(buffer);
}
}
我正在使用 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 =
,然后,输入参数得到相同的效果。
首先,嵌入式C语言是不存在的。您正在用 C 编程。此代码无效。
你的函数 void send_string(char s[])
只接受一个 char []
类型的参数。您将其称为 send_string("Value = %c",val);
,因此您向其传递了两个参数。在 C 字符串中 %
字符没有特殊含义。它只对 printf
函数有意义。你调用相当于send_string("It doesn't matter what you write here", 'A');
你可以用另一种方式做你想做的事:
#include <stdio.h>
...
int main(void)
{
USARTInit(51);
char val='A';
char buffer[64];
sprintf(buffer, "Value = %c", val);
while(1)
{
send_string(buffer);
}
}