Вопросы по С/С++ (СИ)

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Аватара пользователя
urry
Сверлит текстолит когтями
Сообщения: 1262
Зарегистрирован: Пн дек 08, 2008 10:58:48
Откуда: Винница
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение urry »

Мастер Ломастер, BerZerK-ku хотел сказать, наверное, что все регистры внутри контроллера определены как volatile и компилятор не их может выбросить по оптимизации, исходя из этого.
Другое дело, что булевская "логическая единица" значит - любое число, отличное от 0.
грубо говоря
#define false 0
#define true !false
Т.е. если результат действия (умножения) будет, скажем, 0х80 то проверка ифом
char b=0xff;
char a=0x80;
if(a&b) - здесь выполнится
if((a&b) == true) - здесь выполнится, эта запись эквивалентна предыдущей
if((a&b) == 1) - здесь не выполнится, результат не равен единице, true не 1, а число, отличное от 0.

ЗЫ коряво написал.... :(
Последний раз редактировалось urry Пн дек 26, 2011 10:33:01, всего редактировалось 1 раз.
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

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

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

есть такая команда

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

delay_ms(500);

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

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

FreshMan писал(а):есть такая команда

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

delay_ms(500);

а если мне время задержки нужно выразить в секундах или минутах или часах......., как правильно ее тогда написать ? :write:

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

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

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

delay_s(500);
delay_min(500);
delay_hour(500);

так что такая форма записи не приемлемая ?
Tell Me The Truth
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: Вопросы по С/С++ (СИ)

Сообщение danger3466 »

Вопрос по самым азам:
unsigned char i=0;
i++;
переменная i будет иметь вполне очевидные 0х01 hex, но не очевидно для меня следующее:
char i=0;
i--;
Как выглядят отрицательные значения, к примеру -1 в hex?
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

0x00-- = 0xFF :)
Аватара пользователя
vitalik_1984
Поставщик валерьянки для Кота
Сообщения: 2482
Зарегистрирован: Пт авг 27, 2010 05:57:06
Откуда: Тюмень
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение vitalik_1984 »

FreshMan писал(а):

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

delay_s(500);
delay_min(500);
delay_hour(500);

так что такая форма записи не приемлемая ?

почему же не приемлема?Приемлема, если допишете нужные функции:)
В поисках истины человек развивается.
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: Вопросы по С/С++ (СИ)

Сообщение danger3466 »

Аlex писал(а):0x00-- = 0xFF :)

Мерси :)
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

danger3466 писал(а):Как выглядят отрицательные значения, к примеру -1 в hex?
оно вам надо? главное, что компилятор знает, как они выглядят, ему с этими числами работать, ну а вам-то зачем? вам шашечки или ехать?
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
FreshMan
Друг Кота
Сообщения: 6296
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Откуда: Ukraine

Re: Вопросы по С/С++ (СИ)

Сообщение FreshMan »

vitalik_1984 писал(а):почему же не приемлема?Приемлема, если допишете нужные функции:)

а можете показать пример ее написания ? :))
Последний раз редактировалось Аlex Пн дек 26, 2011 22:27:15, всего редактировалось 1 раз.
Причина: Убрал многоэтажные цитаты
Tell Me The Truth
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Аlex »

FreshMan писал(а):а можете показать пример ее написания ? :))
Циклы рулят :))
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

FreshMan писал(а):
vitalik_1984 писал(а):почему же не приемлема?Приемлема, если допишете нужные функции:)

а можете показать пример ее написания ? :))


легко )

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

void delay_s(unsigned char i)
{
int j;
for (j=0;j<i*10;j++)
{
delay_ms(100); // делаем паузу в 100мс
#asm("wdr"); // сбрасываем собаку (если надо)
}
}


тупой вариант без собаки

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

void delay_s(unsigned char i)
{
delay_ms(i*1000);
}


минуты и часы по аналогии
BerZerK-ku
Мучитель микросхем
Сообщения: 492
Зарегистрирован: Вт июл 22, 2008 08:10:54

Re: Вопросы по С/С++ (СИ)

Сообщение BerZerK-ku »

Тупой вариант может не прокатить. Т.к. в WinAvr delay_ms ограничено 6.5с.
В IAR можно воспользоваться макросами:

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

#define CPU_CLK_Hz 16000000
#define _delay_ms(x) __delay_cycles((x) * (CPU_CLK_Hz / 1000))
#define _delay_s(x) __delay_cycles((x) * CPU_CLK_Hz)
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: Вопросы по С/С++ (СИ)

Сообщение danger3466 »

WinAVR ругается на объявление:
bit OWI_Init(void)

Как правильно тип данных в один бит?
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

danger3466 писал(а):WinAVR ругается на объявление:
bit OWI_Init(void)

Как правильно тип данных в один бит?
прочтите какой-нибудь букварь по языку Си, и вы будете неприятно удивлены тем абсолютно непреложным фактом, что в языке Си не существует типа БИТ. просто не существует, как сущности. смиритесь. и работайте, как все программисты, которые отлично обходятся без этого типа
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: Вопросы по С/С++ (СИ)

Сообщение danger3466 »

Мастер Ломастер писал(а):
danger3466 писал(а):WinAVR ругается на объявление:
bit OWI_Init(void)

Как правильно тип данных в один бит?
прочтите какой-нибудь букварь по языку Си, и вы будете неприятно удивлены тем абсолютно непреложным фактом, что в языке Си не существует типа БИТ. просто не существует, как сущности. смиритесь. и работайте, как все программисты, которые отлично обходятся без этого типа

Читаю букварь Ю.А.Шпака, он гад такой утверждает что есть :kill: его за такое
Мастер Ломастер
Поставщик валерьянки для Кота
Сообщения: 1995
Зарегистрирован: Ср май 11, 2011 21:37:45
Откуда: Цветочный город
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение Мастер Ломастер »

danger3466 писал(а):Читаю букварь Ю.А.Шпака, он гад такой утверждает что есть :kill: его за такое
а мне Сёма Рабинович по телефону битлов пропел - так и не пойму, за что их любят? шепелявят, картавят, слов не разберешь, в ноты не попадают...
битва с дураками проиграна, победители торжествуют. слава победителям!
Аватара пользователя
danger3466
Встал на лапы
Сообщения: 135
Зарегистрирован: Ср дек 21, 2011 12:18:39

Re: Вопросы по С/С++ (СИ)

Сообщение danger3466 »

Мастер Ломастер писал(а):
danger3466 писал(а):Читаю букварь Ю.А.Шпака, он гад такой утверждает что есть :kill: его за такое
а мне Сёма Рабинович по телефону битлов пропел - так и не пойму, за что их любят? шепелявят, картавят, слов не разберешь, в ноты не попадают...


Может тогда хороший букварь посоветуете? Синтаксис всех функций то не запомнишь, наверняка есть какой то справочник у вас...
Аватара пользователя
BCluster
Собутыльник Кота
Сообщения: 2512
Зарегистрирован: Пн апр 06, 2009 19:33:29
Откуда: Молдова, Кишинев
Контактная информация:

Re: Вопросы по С/С++ (СИ)

Сообщение BCluster »

danger3466 писал(а):Как правильно тип данных в один бит?

А зачем он нужн?
Используйте char например
В других случаях, например для флагов может быть удобно использовать битовые поля.

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

  struct 
  {
      unsigned int b1 : 1;
      unsigned int b2 : 1;
      unsigned int b3 : 1;
  } flags;

Но это когда много флагов например надо хранить. Есть плюсы и минусы, не буду вдаваться в подробности
Ответить

Вернуться в «Разные вопросы по МК»