реклама на сайте
подробности

 
 
> Непонятки с компилятором, CVAVR
Lexi
сообщение Dec 18 2007, 09:01
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 27-06-07
Из: Беларусь, Гомель
Пользователь №: 28 752



Народ помогаем!!
Застряна богальном.
При переходе с PIC на AVR возникла дурацкая проблема.

К примеру есть нейкое int i. i=16;
В компиляторе который я юзал для PIC командой printf("%d", i); у меня выводились данные '1' '6' в нормальном ASCII. А в компиляторе CVAVR так делать не хочет, покрайней мере способа я не нашел. А вычилять делить на 100 или на 10 с добавлением 48 бред.

Как тут поступить??
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Lexi
сообщение Dec 19 2007, 11:55
Сообщение #2


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 27-06-07
Из: Беларусь, Гомель
Пользователь №: 28 752



НУ да запрещены.... Нет так нельзя. Он у меня еще и слушать должен "собеседника". Принимать команды. UART работает на ура. Но только не хочет выполнять 1 процедуру. Это выход целых чисел int i=13, и выводить на уарт как 0x31 0x33. Вот что я от него и хотел. Пришлось написать собсвенную процедуру. Час времени и проценты памяти. Ладно, фиг с ним. Зато приятнее с масивами работать чем на пике. Это факт. smile.gif Вот тока с таймерами еще разобраться. Нужен частотомер на базе ATmega8L. Кстати, он умеет ли по I2C аппаратно говорить или он только SPI держит?
Код

void dprintf(long int i)
{
int a[8];
int b;
a[0]=i/1000000;
i=i-a[0]*1000000;
a[1]=i/100000;
i=i-a[1]*100000;
a[2]=i/10000;
i=i-a[2]*10000;
a[3]=i/1000;
i=i-a[3]*1000;
a[4]=i/100;
i=i-a[4]*100;
a[5]=i/10;
i=i-a[5]*10;
a[6]=i/1;
for(b=0;b<7;b++) if(a[b]!=0) break; //отсекаем нули первые
for(b;b<7;b++) printf("%c", a[b]+48); //выводим данные
}


Сообщение отредактировал Lexi - Dec 19 2007, 11:58
Go to the top of the page
 
+Quote Post
aesok
сообщение Dec 19 2007, 12:07
Сообщение #3


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Lexi @ Dec 19 2007, 14:55) *
Код

void dprintf(long int i)
{
int a[8];
int b;
a[0]=i/1000000;
i=i-a[0]*1000000;
a[1]=i/100000;
i=i-a[1]*100000;
a[2]=i/10000;
i=i-a[2]*10000;
a[3]=i/1000;
i=i-a[3]*1000;
a[4]=i/100;
i=i-a[4]*100;
a[5]=i/10;
i=i-a[5]*10;
a[6]=i/1;
for(b=0;b<7;b++) if(a[b]!=0) break; //отсекаем нули первые
for(b;b<7;b++) printf("%c", a[b]+48); //выводим данные
}



biggrin.gif Пожалуйста прочитайте описание функции printf, например здесь: http://ru.wikipedia.org/wiki/Printf

Анатолий.

PS: Или printf в CVAVR не понимает тип long?

Сообщение отредактировал aesok - Dec 19 2007, 13:07
Go to the top of the page
 
+Quote Post
Lexi
сообщение Dec 20 2007, 05:35
Сообщение #4


Частый гость
**

Группа: Свой
Сообщений: 131
Регистрация: 27-06-07
Из: Беларусь, Гомель
Пользователь №: 28 752



Цитата(aesok @ Dec 19 2007, 16:07) *
biggrin.gif Пожалуйста прочитайте описание функции printf, например здесь: http://ru.wikipedia.org/wiki/Printf

Анатолий.

PS: Или printf в CVAVR не понимает тип long?

Ну если все так просто, и вы уже это все прочли, то почему просто не сказать в чем трабла???
Читай тут читай там... Да знаю я все это, в ВУЗе я это изучал все а не проходил.
Сдесь совсем другая проблема - особеность ПО.
В PICC все работает, WinAVR тоже. А вот а CVAVR не хочет.
Ну и ладно, один фиг сча я этот контроллер перевел на SPI для общения с "главным".
Go to the top of the page
 
+Quote Post
aesok
сообщение Dec 20 2007, 10:28
Сообщение #5


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Lexi @ Dec 20 2007, 08:35) *
Читай тут читай там... Да знаю я все это, в ВУЗе я это изучал все а не проходил.


Я придерживаюсь мнения что человет который изучал функцию "printf" все а не проходил ее, никогда бы не стал изобретать "dprintf", а написал бы чтото типа:

Код
long foo;

printf("%l", foo);




Анатолий.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 25th July 2025 - 01:43
Рейтинг@Mail.ru


Страница сгенерированна за 0.01411 секунд с 7
ELECTRONIX ©2004-2016