//********************************************************************************
//
// Автор : DruidCat
//
// МК : ATMega8L
//
// Компилятор : WinAVR
//
// Назначение : Выводим по USART строку "ВЫСОТА 239"
//
// Дата : 04.08.2012
//
//********************************************************************************
#include <avr/io.h>
#include <util/delay.h> //Для вызова функции _delay_ms()
#define F_CPU 8000000UL //Частота МК
#define USART_SPEED 9600 //Скорость USART желаемая
#define BAUD ((F_CPU/(USART_SPEED*16UL)) + 1) //Формула расчета БОД
#include <stdlib.h> //Для вызова ыункции itoa
#include <string.h> //Для вызова функции strlen
void SEND_USART(char WORD[]){ //Функция вывода массива
for(int i=0;i<11;i++){ //Цикл, пока i не достигнет 11, он будет работать
UDR = WORD; //Выводим посимвольно символы в масиве
_delay_ms(1); //Пауза 1мс
}
}
void REVERSE(char s[]) { //reverse: переворачиваем строку s на месте
int i, j;
char c;
for (i = 0, j = strlen(s)-1; i<j; i++, j--) {
c = s;
s = s[j];
s[j] = c;
}
}
void itoa(int n, char s[]) //itoa: конвертируем n в символы в s
{
int i, sign;
if ((sign = n) < 0) //записываем знак
n = -n; //делаем n положительным числом
i = 0;
do { //Цикл, генерирующий цифры в обратном порядке
s[i++] = n % 10 + '0'; //берем следующую цифру, к десятичному остатку прибовляем 0х48 и получаем символ цифры в ASCII
} while ((n /= 10) > 0); //удаляем цифру деля на 10 'n=n/10' если n>0
if (sign < 0) //Если <0 то...
s[i++] = '-'; //Добавляем знак '-' если он есть
s = '\0'; //Конец строки
REVERSE(s); //Реверсируем массив цифр
}
int main (void)
{
UCSRB = (0<<RXCIE)|(0<<TXCIE)|(0<<RXEN)|(1<<TXEN); //Активизируем передатчик
UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0); //размер слова 8 разрядов
UBRRH = (unsigned char)(BAUD >> 8 ); //Скорость передач*
UBRRL = (unsigned char)BAUD; //Скорость передач*
char HIGHT[]="Высота 239 "; //Словесный масив
while (1) //Бесконечный цикл
{ //Отсылаем текст через небольшую паузу
SEND_USART(HIGHT); //Отсылаем массив HIGHT через функцию SEND_USART
_delay_ms(1000); //Пауза в 1сек
REVERSE(HIGHT); //Вызываем функию reverse для реверса массива HIGHT
}
}
При написании программы, я её поэтапно проверял. Написал функцию по выводу массива по USART, работает. Провери функцию reverse, которая реверсирует масивв, работает. А как только я написал функцию itoa,WINAVR выда ошибку
error: conflicting types for 'itoa'
(путь нахождения stdlib.h у меня в винде)stdlib.h:406: error: previous declaration of 'itoa' was here
Помогите как правильно листинг написать, я в С вообще профан, я искренне верю, что тупо мне знаний не хватает.
Я функцию itoa размещал в главной функции main, компилятор ошибок никаких не выдал. Но я не могу ей воспользоваться, не знаю как её правильно вызвать. хехехе


