Вы должны понять такую вещь - char он и в Африке char. Нету же двоичного чара, десятичного чара, шестнадцатиричного чара
Вопросы по С/С++ (СИ)
- BCluster
- Собутыльник Кота
- Сообщения: 2512
- Зарегистрирован: Пн апр 06, 2009 19:33:29
- Откуда: Молдова, Кишинев
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Можно конечно если она соотвествующего типа. В данном случае char или int...
Вы должны понять такую вещь - char он и в Африке char. Нету же двоичного чара, десятичного чара, шестнадцатиричного чара
Вы должны понять такую вещь - char он и в Африке char. Нету же двоичного чара, десятичного чара, шестнадцатиричного чара
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ghost in shell писал(а):это опорное у меня +5В. Я так понимаю, выше опорного АЦП не меряет?Запятые мне сейчас ненужны - хочу знать, какому напряжению на входе соответствует какое число в ADRES.Ghost in shell писал(а):мерять то не меряет, а подать то можно...только не больше напряжения питания вроде.Мне для аналоговой клавиатуры надо задать соответствие, и мне действительно все равно, что там будет. Абы такое-то число (точнее, диапазон чисел) соответствовало такой-то клавише.Ghost in shell писал(а):вообще это легко посчитать.если полный брать ADRES то 10 бит это 1024
делишь 5 на 1024. 0,0048828125 на бит...например напряжение 3.1в будет 1001111011 в двоичной или 635 в десятеричной системе.А реальное напряжение зависит от того,какой делитель поставить перед входом... В вашем случае это делитель с кнопок
ну с этого и нужно было начинать:)вот проект, в котором такой метод используется.Часы-календарь-термометр (Mega8+DS1307+DS18B20+4LED)Автор тот же - Danko
В поисках истины человек развивается.
- Ghost in shell
- Держит паяльник хвостом
- Сообщения: 931
- Зарегистрирован: Пн июн 15, 2009 06:01:38
- Откуда: USSR
Re: Вопросы по С/С++ (СИ)
ну с этого и нужно было начинать:)
Я стараюсь спрашивать по минимуму.
Кот гуляет сам по себе, но вблизи холодильника.
- Gudd-Head
- Друг Кота
- Сообщения: 20092
- Зарегистрирован: Чт сен 18, 2008 12:27:21
- Откуда: Столица Мира Санкт-Петербург
Re: Вопросы по С/С++ (СИ)
Ghost in shell писал(а):Я стараюсь спрашивать по минимуму.
По-вашему, здесь одни экстрасенсы?
[ Всё дело не столько в вашей глупости, сколько в моей гениальности ] [ Правильно заданный вопрос содержит в себе половину ответа ]
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Ghost in shell писал(а):ну с этого и нужно было начинать:)
Я стараюсь спрашивать по минимуму.
пытаетесь спрашивать по минимуму, но даете мало полезной информации,вам мало отвечают и вы опять спрашиваете:)
со стороны походит на загадки.
В поисках истины человек развивается.
-
demiurg301
- Опытный кот
- Сообщения: 812
- Зарегистрирован: Ср мар 18, 2009 21:14:33
Re: Вопросы по С/С++ (СИ)
Подскажите какбы так сделать:
Хочу сделать универсальные define-ы для определения функционала портов ВВ
Типа такого как то нельзя сделать? (для меги)
#define Z_OUTPUT(X,Y) DDRX&=~Y PORTX&=~Y // выбрал портX и ногуY и выставил в нули (Z- состояние)
Это адреса портов надо переопределять както?
Хочу сделать универсальные define-ы для определения функционала портов ВВ
Типа такого как то нельзя сделать? (для меги)
#define Z_OUTPUT(X,Y) DDRX&=~Y PORTX&=~Y // выбрал портX и ногуY и выставил в нули (Z- состояние)
Это адреса портов надо переопределять както?
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)demiurg301 писал(а):Подскажите какбы так сделать:
Хочу сделать универсальные define-ы для определения функционала портов ВВ
Типа такого как то нельзя сделать? (для меги)
#define Z_OUTPUT(X,Y) DDRX&=~Y PORTX&=~Y // выбрал портX и ногуY и выставил в нули (Z- состояние)
demiurg301 писал(а):Это адреса портов надо переопределять както?
это как? вроде с адресами компилятор сам должен справляться.
В поисках истины человек развивается.
- urry
- Сверлит текстолит когтями
- Сообщения: 1262
- Зарегистрирован: Пн дек 08, 2008 10:58:48
- Откуда: Винница
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Типа такого ?
#define _dirI(port,bit,val) _bitL(DDR##port,bit)
#define _dirO(port,bit,val) _bitH(DDR##port,bit)
http://electronix.ru/forum/index.php?ac ... t&id=30242
#define _dirI(port,bit,val) _bitL(DDR##port,bit)
#define _dirO(port,bit,val) _bitH(DDR##port,bit)
http://electronix.ru/forum/index.php?ac ... t&id=30242
-
demiurg301
- Опытный кот
- Сообщения: 812
- Зарегистрирован: Ср мар 18, 2009 21:14:33
Re: Вопросы по С/С++ (СИ)
vitalik_1984 писал(а): Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)
ДА места валом... Надоело просто "городить огороды" из инициализаций портов ВВ. Как то "умять" хочу.
urry
Типа такого ?
#define _dirI(port,bit,val) _bitL(DDR##port,bit)
#define _dirO(port,bit,val) _bitH(DDR##port,bit)
Да чтото типа этого...
Только чтобы в один макрос вошло всё.
Т.е. 4 состояния порта - выход 1, выход 0, подтяжка к +, и Z-состояние ,а значит и 4 макроса со входным параметром порта.
Видимо тут только через функцию...
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
demiurg301 писал(а):vitalik_1984 писал(а): Так то лучше это в функцию запихать.Прикинуть если пять раз записать Z_OUTPUT(X,Y) это уже десять команд одинаковых, а так одна функция и все.Меньше места должно занимать.Но если место не критично то можно, наверно и так сделать, так будет работать быстрее.(не тратится время на переходы)
ДА места валом... Надоело просто "городить огороды" из инициализаций портов ВВ. Как то "умять" хочу.
Если инициализировать, так можно и макрос:)
А функцией если делать, то можно и менять интерактивно во время исполнения.
В поисках истины человек развивается.
- van_de_luxe
- Встал на лапы
- Сообщения: 103
- Зарегистрирован: Вс окт 31, 2010 16:46:10
- Откуда: Оттуда
Re: Вопросы по С/С++ (СИ)
использую ф-ю
переменные определены как
когда вызываю ее например так
ничего не происходит
пишу для atmega8a
запускал на симуляторе в avrstudio, он строчку color = bright; вообще пропускает.
в чем может быть дело?
почему присваиваю 1 аргумент другому? - в последствии ф-я будет доработана, 2 аргумент должен изменяться в зависимости от глобальной переменной
Код: Выделить всё
void SetBright(unsigned short color, unsigned short bright)
{
color = bright;
}
переменные определены как
Код: Выделить всё
volatile unsigned short LED1[3]={0,0,0};
#define R1 LED1[0]
когда вызываю ее например так
Код: Выделить всё
SetBright(R1, 0x1F2);ничего не происходит
пишу для atmega8a
запускал на симуляторе в avrstudio, он строчку color = bright; вообще пропускает.
в чем может быть дело?
почему присваиваю 1 аргумент другому? - в последствии ф-я будет доработана, 2 аргумент должен изменяться в зависимости от глобальной переменной
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
вы в студии поглядите лучше, чему у вас LED1[0] равно к тому моменту, когда оно "пропускает строчку"... если кроме этого несчастного обращения к функции больше в программе и нет ничего, компилятор запросто может записать туда сразу "нужное" значение, чтобы не лепить бессмысленный вызов вашей функции.
битва с дураками проиграна, победители торжествуют. слава победителям!
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: Вопросы по С/С++ (СИ)
Код: Выделить всё
#define F_CPU 20000000UL // 20 MHz
#define BAUD 9600
#include <util/setbaud.h>
#include <avr/io.h> // ввод-вывод
#include <util/delay.h>
void UART_Init(void)
{
UBRRH = UBRRH_VALUE;
UBRRL = UBRRL_VALUE;
UCSRB = (1 << TXEN) | (1 << RXEN);
UCSRC = (1 << USBS) | (3 << UCSZ0);
}
void Send(unsigned char *data)
{
USART_Send(data);
}
void USART_Send(unsigned char *data)
{
int i;
while(data[i]){
if (data == '\n')
USART_Send('\r');
while ( !( UCSRA & (1<<UDRE)) ){};
UDR = data[i];
i++;
}
}
int main(void)
{
DDRA = 0x00; // Весь порт как вход
DDRB = 0x00; // Весь порт как вход
UART_Init();
int tmp=2;
while (1){
if ((PINB & _BV(PB1)) == 1) {
if(tmp != 1) Send("Test 1\n");
tmp = 1;
} else {
if(tmp != 0) Send("Test 0\n");
tmp = 0;
}
}
return 0;
}Гоняю это дело в эмуляторе, но почему то все время мк считает что на линии 0, в терминале только один раз вижу "Test 0". Хотя я туда то 0 то 1 загоняю. Для этого завел две кнопки одна на минус вторая на плюс.
Похоже косяк тут:
Код: Выделить всё
if ((PINB & _BV(PB1)) == 1)Но я его не вижу
Помогите!
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
ну как же вы не видите?! _BV(PB1) по-вашему равно какому числу?
не надо писать в условии проверки бита ==
надо так:
Код: Выделить всё
if (PINB & _BV(PB1))битва с дураками проиграна, победители торжествуют. слава победителям!
- vitalik_1984
- Поставщик валерьянки для Кота
- Сообщения: 2482
- Зарегистрирован: Пт авг 27, 2010 05:57:06
- Откуда: Тюмень
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
а ничего, что color в вашем случае это массив?указатель на его начало точнееvan_de_luxe писал(а):использую ф-юКод: Выделить всё
void SetBright(unsigned short color, unsigned short bright)
{
color = bright;
}
van_de_luxe писал(а):переменные определены какКод: Выделить всё
volatile unsigned short LED1[3]={0,0,0};
#define R1 LED1[0]
когда вызываю ее например такКод: Выделить всё
SetBright(R1, 0x1F2);
ничего не происходит
пишу для atmega8a
запускал на симуляторе в avrstudio, он строчку color = bright; вообще пропускает.
в чем может быть дело?
почему присваиваю 1 аргумент другому? - в последствии ф-я будет доработана, 2 аргумент должен изменяться в зависимости от глобальной переменной
представьте себе получившийся код: перешли к выполнению функции
загрузили данные, выполнили, вернулись обратно.
а если у вас глобальная переменная и все таки данное действие выполняется не один раз, то все равно можно не передавать функции данные просто присвоить данным значения глобальных переменных.
В поисках истины человек развивается.
-
inkHunter
- Грызет канифоль
- Сообщения: 287
- Зарегистрирован: Сб авг 21, 2010 20:44:27
- Откуда: Ростов
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
Что за прикол не пойму ???!!!
int volatile rx=0;
int volatile starframe=0;
Вот есть такое, пишу в содевижион поставил оптимизацию low , смотрю в протеусе starframe=1; rx=2; и в if заходит, почему если starframe=1 ?
if ((starframe==0)&&(rx!=0))
{
/////////////
}
int volatile rx=0;
int volatile starframe=0;
Вот есть такое, пишу в содевижион поставил оптимизацию low , смотрю в протеусе starframe=1; rx=2; и в if заходит, почему если starframe=1 ?
if ((starframe==0)&&(rx!=0))
{
/////////////
}
-
BerZerK-ku
- Мучитель микросхем
- Сообщения: 492
- Зарегистрирован: Вт июл 22, 2008 08:10:54
Re: Вопросы по С/С++ (СИ)
Вы вообще задумывались когда ответ давали?Мастер Ломастер писал(а):вы в студии поглядите лучше, чему у вас LED1[0] равно к тому моменту, когда оно "пропускает строчку"... если кроме этого несчастного обращения к функции больше в программе и нет ничего, компилятор запросто может записать туда сразу "нужное" значение, чтобы не лепить бессмысленный вызов вашей функции.
van_de_luxe, есть шанс, что вы сможете попасть на эту строчку, если отключите оптимизацию, но функция при этом все равно работать не будет как задумано. vitalik_1984 указал путь решения проблемы. Вам надо либо передавать в функцию указатель на переменную
Код: Выделить всё
void SetBright(unsigned short *color, unsigned short bright)
{
*color = bright;
}
SetBright(&LCD[0], 0x1F2);
Код: Выделить всё
unsigned short SetBright(unsigned short bright)
{
return bright;
}
LCD[0] = SetBright(0x1F2);
Victor_Gordienko - ищите проблему в другом месте. Как вариант - исходники вы исправили, а отладку ведете на старом варианте.
- danger3466
- Встал на лапы
- Сообщения: 135
- Зарегистрирован: Ср дек 21, 2011 12:18:39
Re: Вопросы по С/С++ (СИ)
Мастер Ломастер, спасибо, вы совершенно правы.
А чему равно _BV(PB1)?
А чему равно _BV(PB1)?
Re: Вопросы по С/С++ (СИ)
_BV(PB1) аналогично (1<<PB1) аналогично (1<<1) аналогично 0x02 аналогично 0b00000010
Не умееш - не берись, но не взявшись не научишся.
-
Мастер Ломастер
- Поставщик валерьянки для Кота
- Сообщения: 1995
- Зарегистрирован: Ср май 11, 2011 21:37:45
- Откуда: Цветочный город
- Контактная информация:
Re: Вопросы по С/С++ (СИ)
нет. а что, надо было?BerZerK-ku писал(а):Вы вообще задумывались когда ответ давали?
битва с дураками проиграна, победители торжествуют. слава победителям!