Я использую ATmega8, и я пытаюсь отправить строку над USART (в стиле printf
), которые включают переменную. Я использую Atmel Studio 6.2
в качестве IDE для программирования AVR. Вот мой код: -Передача переменной в строке в Embedded C
#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
передать переменную в строку?
Там нет языка «встроенный C»! И эта функция не входит в стандартную библиотеку, поэтому ** не работает ** в программировании «C». Сначала вы можете изучить C и какие функции. – Olaf