CodeVision AVR в вопросах и ответах
Re: CodeVision AVR в вопросах и ответах
to a_skr
благодарю
благодарю
- Реклама
Re: CodeVision AVR в вопросах и ответах
Добрый день! вопросик как интерпретировать например значение '2' '5' '5'(0х32, 0х35, 0х35)
в 0хff ? и второй как правильно сделать массив переменного размера например
mas[i] = data, где i номер, data значение, в зависимости от условий выполнения программы значения и размер масива могут меняться?
в 0хff ? и второй как правильно сделать массив переменного размера например
mas[i] = data, где i номер, data значение, в зависимости от условий выполнения программы значения и размер масива могут меняться?
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вот тут прикольный для ржача пример
А вообще если серьезно, то нужно подробнее
А вообще если серьезно, то нужно подробнее
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
Такая подпрограмма принимает значения с плав точкой с USART необходимо полученые значения переводить в конкретное значение, например значения могут быть 203.4055 или 23.0001 и тп. прием в кодах '0x32' и тд. Это по первому вопросу (против GOTO не имею ничего против, привык с Асм и иногда применяю )
По поводу массива не хочу загружать проц вычислениями с плавющей точкой и кучей делений в каждом прерывании таймера, по этому планирю зарание просчитывать и зансить в массив данные которые менют значения TCNT0
Это по второму вопросу?
Код: Выделить всё
/**/
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 в вопросах и ответах
В поисках истины человек развивается.
- Реклама
Re: CodeVision AVR в вопросах и ответах
Подробней пож что такое форматтед, а то невехал?
Последний раз редактировалось signum Ср июн 06, 2012 21:07:29, всего редактировалось 1 раз.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Вот например
sprintf
<cstdio>
int sprintf ( char * str, const char * format, ... );
Write formatted data to string
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
На сколько я понял это формат getchar and putchar functions, Каким боком мне это подключить к моей функции имеющей ктомуже разную размерность мантиссы и экспоненты?
или я туплю?
или я туплю?
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
Берем пример из 1 функции
изменяем под свои нужды
Добавляем пример из 2 функции
Проверить только пока не на чем.Хотя... сейчас в прот загоню
изменяем под свои нужды
Добавляем пример из 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", a, b, (double)a/(double)b);//тут ответ - результат с плавающей точкой должен получиться
for (c = 0 ; c <= n ; c++) {
putchar (buffer[c]);
}
return 0;
}
Проверить только пока не на чем.Хотя... сейчас в прот загоню
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
Ок спасибо попробую, кстати я придумал другой вариант, проверю напишу измененный код. Там берем первое значение допустим '2'(0x32) делаем так
потом так
и так далие Rg,Rj тип int итд получится типа такого '2' '2' '2' '2' на выходе 2222 или 0х8AE, если 3начение 222 там или 93, нужный разряд делим 100, 10 ну как то так.
Код: Выделить всё
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 ну как то так.
Re: CodeVision AVR в вопросах и ответах
По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
signum писал(а):кстати я придумал другой вариант, проверю напишу измененный код.
Другой это типа обратный результат?
signum писал(а):По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.
Массив для чего заранее указывать?
Вообще си вроде можно заранее не объявлять размер.
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
vitalik_1984 писал(а):signum писал(а):кстати я придумал другой вариант, проверю напишу измененный код.
Другой это типа обратный результат?signum писал(а):По поводу массива, полагаю размерность указывать необходимо обязательно и за ранние, переменный размер не получиться ? это по другому вопросу.
Массив для чего заранее указывать?
Вообще си вроде можно заранее не объявлять размер.
Да вроде можно но CV ругается, другой это иной, по другому реализованный, думаю мой вариант будет менее ресурсоемким.
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: CodeVision AVR в вопросах и ответах
похоже все таки обратный.я сначала подумал,что вы на вывод готовите.
если что есть форматированный прием синтаксис примерно такой же как у вывода.
если что есть форматированный прием синтаксис примерно такой же как у вывода.
В поисках истины человек развивается.
Re: CodeVision AVR в вопросах и ответах
данная операция #define anod_min_l (PORTD|=(1<<4)) называется наложение маски на порт D с последующим присвоением имени ? я правильно понимаю ?
Tell Me The Truth
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: CodeVision AVR в вопросах и ответах
Это не операция. Это определение операции записи единицы в 4-й разряд регистра PORTD, к чему это приводит в зависимости от состояния одноименного бита регистра DDRD, найдите сами...
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Re: CodeVision AVR в вопросах и ответах
Goodefine писал(а):Это не операция.
почему ?
Tell Me The Truth
- Goodefine
- Держит паяльник хвостом
- Сообщения: 906
- Зарегистрирован: Ср апр 16, 2008 13:22:54
- Откуда: Приднестровье, Тирасполь
Re: CodeVision AVR в вопросах и ответах
Потому что операция это некое активное действие. От того что оно описано через #define.. оно не выполнится. Устанвка бита наступит на строчке
где то в программе (там где напишете). Поэтому указанная строчка кода это именно ОПРЕДЕЛНИЕ операции, а не сама операция, с точки зрения программного функционала
Код: Выделить всё
anod_min_l;где то в программе (там где напишете). Поэтому указанная строчка кода это именно ОПРЕДЕЛНИЕ операции, а не сама операция, с точки зрения программного функционала
Любой, заслуживающий внимания, опыт приобретается себе в убыток...
Re: CodeVision AVR в вопросах и ответах
значит #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 в вопросах и ответах
Что вы называете маской?
Любой, заслуживающий внимания, опыт приобретается себе в убыток...


