CodeVision AVR в вопросах и ответах

Обсуждаем контроллеры компании Atmel.
hubble
Родился
Сообщения: 13
Зарегистрирован: Вс июн 14, 2009 00:34:38

Re: CodeVision AVR в вопросах и ответах

Сообщение hubble »

to a_skr
благодарю
Реклама
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

Добрый день! вопросик как интерпретировать например значение '2' '5' '5'(0х32, 0х35, 0х35)
в 0хff ? и второй как правильно сделать массив переменного размера например
mas[i] = data, где i номер, data значение, в зависимости от условий выполнения программы значения и размер масива могут меняться?
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Вот тут прикольный для ржача пример
А вообще если серьезно, то нужно подробнее
В поисках истины человек развивается.
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

Такая подпрограмма принимает значения с плав точкой с USART необходимо полученые значения переводить в конкретное значение, например значения могут быть 203.4055 или 23.0001 и тп. прием в кодах '0x32' и тд. Это по первому вопросу (против GOTO не имею ничего против, привык с Асм и иногда применяю )

Код: Выделить всё

/**/
void  METRIKKOD(void)      //
{
Long Rj = 0, Ri = 0, Rg = 0; temp = 0;

temp = '2';//getchar();    // Первый символ
        if(temp == '.'){goto m;}
                else{ Rg = temp; Rg = (Rg << 24);}//
                if(temp == ' '){goto m1;}   // Конец значения           
               
               
temp = '3';//getchar();    // Второй
        if(temp == '.'){goto m;}
                else{Rj |=Rg; Rg = temp; Rg = (Rg << 16); Rj |=Rg;} //
                if(temp == ' '){goto m1;}   // Конец значения
               
               
temp ='0'; //getchar();    // Третий
        if(temp == '.'){temp = 0; Rg |= Rj; goto m;}
                else{Rj |=Rg; Rg = temp; Rg = (Rg << 8); Rj |=Rg;}
                if(temp == ' '){temp = 0; Rg |= Rj; goto m1;}   // Конец значения
               
               
temp ='1'; //getchar();    // Четвертый
        if(temp == '.'){temp = 0; Rg |= Rj; goto m;}
                else{ Rg = temp; Rg |= Rj;}
                if(temp == ' '){temp = 0; Rg |= Rj; goto m1;}   // Конец значения
                 
               
temp = '.';//getchar();    //
        if(temp == '.'){temp = 0; Rg |= Rj; goto m;}else{}   
        if(temp == ' '){temp = 0; Rg |= Rj; goto m1;}else{}   // Конец значения
Rj = 0; temp = 0;                                       

goto m1;
m:
Rj = 0;

temp ='2'; //getchar();    // Первый символ
        if(temp == ' '){goto m1;}   // Конец значения           
                else{ Ri = temp; Ri = (Ri << 24);}
         
temp = '5';//getchar();    // Второй
        if(temp == ' '){goto m1;}   // Конец значения           
                else{Rj |=Ri;  Ri = temp; Ri = (Ri << 16); Rj |=Ri;}
       
temp = ' ';//getchar();    // Третий
        if(temp == ' '){temp = 0; Ri |= Rj; goto m1;}   // Конец значения           
                else{ Rj |=Ri; Ri = temp; Ri = (Ri << 8); Rj |=Ri;}
             
temp = '2';//getchar();    // Четвертый 
        if(temp == ' '){temp = 0; Ri |= Rj; goto m1;}   // Конец значения           
                else{ Ri = temp; Ri |= Rj;}
         
Rj = 0;       
temp = 0;       
m1:

}


По поводу массива не хочу загружать проц вычислениями с плавющей точкой и кучей делений в каждом прерывании таймера, по этому планирю зарание просчитывать и зансить в массив данные которые менют значения TCNT0

Код: Выделить всё

void Freq(word Freq)// Задатчик частоты для таймера Т0
{

if(Freq <= 450)// Частота
            {TCNTx = 0x101 - (((flo)1/Freq)*(Freq_MC/1024)); SLCx = SLC1024;} // Меньше или равно 450 Гц. мин. 29 Гц, для кварца 7372800 Гц и делителя 1024.
        else{TCNTx = 0x101 - (((flo)1/Freq)*(Freq_MC/64));   SLCx = SLC64;}   // Больше 450 Гц. макс. 57600 Гц, для кварца 7372800 Гц и делителя 64.
       
TCNT0 = TCNTx;
TCCR0 = SLCx;
}

Это по второму вопросу?
Последний раз редактировалось signum Ср июн 06, 2012 21:04:41, всего редактировалось 1 раз.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

А что разве форматтед вывод не помощник?

Вот еще нашел пример ftoa
В поисках истины человек развивается.
Реклама
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

vitalik_1984 писал(а):А что разве форматтед вывод не помощник?

Вот еще нашел пример ftoa

Подробней пож что такое форматтед, а то невехал?
Последний раз редактировалось signum Ср июн 06, 2012 21:07:29, всего редактировалось 1 раз.
Реклама
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Вот например
sprintf
<cstdio>
int sprintf ( char * str, const char * format, ... );
Write formatted data to string
В поисках истины человек развивается.
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

На сколько я понял это формат getchar and putchar functions, Каким боком мне это подключить к моей функции имеющей ктомуже разную размерность мантиссы и экспоненты?
или я туплю?
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

Берем пример из 1 функции
изменяем под свои нужды
Добавляем пример из 2 функции

Код: Выделить всё

/* sprintf example */
#include <stdio.h>

int main ()
{
  char buffer [50];
  int n, a=5, b=3;
  n=sprintf (buffer"%d delit %d is %f"ab, (double)a/(double)b);//тут ответ - результат с плавающей точкой должен получиться
  for (= 0 ; c <= n ; c++) {
    putchar (buffer[c]);
    }
  return 0;
}
 

Проверить только пока не на чем.Хотя... сейчас в прот загоню
В поисках истины человек развивается.
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

Ок спасибо попробую, кстати я придумал другой вариант, проверю напишу измененный код. Там берем первое значение допустим '2'(0x32) делаем так

Код: Выделить всё

 temp -= 0x30; Rg = temp; Rg = Rg*1000;

потом так

Код: Выделить всё

Rj |=Rg; temp -= 0x30; Rg = temp;  Rg = Rg*100;Rg +=Rj; Rj = Rg;

и так далие Rg,Rj тип int итд получится типа такого '2' '2' '2' '2' на выходе 2222 или 0х8AE, если 3начение 222 там или 93, нужный разряд делим 100, 10 ну как то так.
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

signum писал(а):кстати я придумал другой вариант, проверю напишу измененный код.

Другой это типа обратный результат?
signum писал(а):По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.

Массив для чего заранее указывать?
Вообще си вроде можно заранее не объявлять размер.
В поисках истины человек развивается.
Аватара пользователя
signum
Встал на лапы
Сообщения: 84
Зарегистрирован: Ср июн 22, 2011 20:41:57
Откуда: Харьков

Re: CodeVision AVR в вопросах и ответах

Сообщение signum »

vitalik_1984 писал(а):
signum писал(а):кстати я придумал другой вариант, проверю напишу измененный код.

Другой это типа обратный результат?
signum писал(а):По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.

Массив для чего заранее указывать?
Вообще си вроде можно заранее не объявлять размер.

Да вроде можно но CV ругается, другой это иной, по другому реализованный, думаю мой вариант будет менее ресурсоемким.
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: CodeVision AVR в вопросах и ответах

Сообщение vitalik_1984 »

похоже все таки обратный.я сначала подумал,что вы на вывод готовите.
если что есть форматированный прием синтаксис примерно такой же как у вывода.
В поисках истины человек развивается.
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

данная операция #define anod_min_l (PORTD|=(1<<4)) называется наложение маски на порт D с последующим присвоением имени ? я правильно понимаю ?
Tell Me The Truth
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Goodefine »

Это не операция. Это определение операции записи единицы в 4-й разряд регистра PORTD, к чему это приводит в зависимости от состояния одноименного бита регистра DDRD, найдите сами...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

Goodefine писал(а):Это не операция.

почему ?
Tell Me The Truth
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Goodefine »

Потому что операция это некое активное действие. От того что оно описано через #define.. оно не выполнится. Устанвка бита наступит на строчке

Код: Выделить всё

anod_min_l;

где то в программе (там где напишете). Поэтому указанная строчка кода это именно ОПРЕДЕЛНИЕ операции, а не сама операция, с точки зрения программного функционала
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: CodeVision AVR в вопросах и ответах

Сообщение FreshMan »

значит #define anod_min_l (PORTD|=(1<<4)) - это просто наложение маски на порт D с последующим присвоением ей имени ?
Последний раз редактировалось FreshMan Вт июн 12, 2012 19:02:49, всего редактировалось 1 раз.
Tell Me The Truth
Аватара пользователя
Goodefine
Держит паяльник хвостом
Сообщения: 906
Зарегистрирован: Ср апр 16, 2008 13:22:54
Откуда: Приднестровье, Тирасполь

Re: CodeVision AVR в вопросах и ответах

Сообщение Goodefine »

Что вы называете маской?
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Ответить

Вернуться в «AVR»