Например TDA7294

Форум РадиоКот • Просмотр темы - Нескольно простых вопросов о программировании AVR на Си.
Форум РадиоКот
Здесь можно немножко помяукать :)

Текущее время: Пт июл 25, 2025 23:54:49

Часовой пояс: UTC + 3 часа


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 1478 ]     ... , , , 26, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 14:37:52 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
Код:
typedef struct{
   uint8_t turn; // перем. для вкл/выкл будильника on=1, off=0
   uint8_t hour;
   uint8_t min;
}alarm_t;

alarm_t alarm[7];


можна ли как-то умудриться чтобы нумерация элементов массива начиналась не с 0 а с 1 ?
это связанно с тем что нумерация будильников начинается с 1

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 14:45:01 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
А смысл? При выводе номера будильника можно просто добавить единицу


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 14:46:10 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
нумерация - это понятие относительное. для чеговека она начинается с 1, а для программы - с 0. в чем проблема при выводе номера человеку делать i+1, в то время как i будет начинаться с 0?

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 15:40:11 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
WiseLord писал(а):
А смысл?

вот для чего, таким образом номер 1 будильника совпадает с номером 1 дня недели
Код:
void check_alarms(void){

   uint8_t i;

   if(f_new_min == 1){

      for (i = 1; i <=7; ++i) {

         if( day_of_week == i ){

            if( alarm[i].hour == hour && alarm[i].min == min ) BUZZER_ON;
         }

      }

      f_new_min = 0; // сбрасываем флаг новой минуты
   }

}


может оно и не совсем верно, но сделал массив будильников на один больше
Код:
typedef struct{
   uint8_t turn; // прем. для вкл/выкл будильника on=1, off=0
   uint8_t hour;
   uint8_t min;
}alarm_t;

     alarm_t alarm[8];

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 15:50:42 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
Ну.. тут можно было сделать и что-то вроде
Код:
void check_alarms(void)
{
   uint8_t i;

   if(f_new_min == 1){
      for (i = 0; i <7; ++i) {
         if( day_of_week == i + 1 )
            if( alarm[i].hour == hour && alarm[i].min == min ) BUZZER_ON;
      }
      f_new_min = 0; // сбрасываем флаг новой минуты
   }
}
и не тратить зря память.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 17:01:25 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
есть ли принципиальная разница между этими записями применительно к циклу
Код:
for (i = 1; i <7; ++i)

и
Код:
for (i = 1; i <7; i++)

_________________
Tell Me The Truth


Вернуться наверх
 
Распродажа паяльного оборудования ATTEN!
Паяльные станции, паяльники и аксессуары по самой выгодной цене.

По промокоду radiokot скидка 10%
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 17:05:11 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
Применительно к циклу принципиальной разницы нет, но первый вариант (с преинкрементом) может быть немного быстрее. Правда, в случае C++ и более сложных объектов, нежели int или какой там тип у i.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 17:27:04 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
я к тому...., при первом заходе в цикл инкремент ведь не делается ?

_________________
Tell Me The Truth


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 17:50:38 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
во-первых, откуда такое желание делать по-своему? ну вот какая разница, будет понедельник нулем или единицей? если ВСЕ сущности нумеровать ЕДИНООБРАЗНО, то они будут сохранять взаимное соответствие: НУЛЕВОЙ будильник для ПОНЕДЕЛЬНИКА, который ноль... а раньше было ПЕРВЫЙ будильник для ПОНЕДЕЛЬНИКА, который 1.

никакой разницы. но следовать стилю все-таки лучше, чем противостоять ему...

во-вторых, цикл for(A; B; C) всегда работает так:
- до начала цикла выполняется список действий А
- в начале очередной (в том числе самой первой) итерации проверяется условие В
- тело цикла отрабатывает только в том случае, если B не равно нулю
- после прогона тела цикла выполняется список действий С
- после этого снова проверяется условие В и т.д. до победного конца

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

Мой уютный бложик... заходите!


Последний раз редактировалось ARV Пн дек 05, 2016 19:35:24, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 18:52:31 
Вымогатель припоя
Аватар пользователя

Карма: 7
Рейтинг сообщений: 58
Зарегистрирован: Чт янв 20, 2011 09:07:08
Сообщений: 674
Откуда: Пермь
Рейтинг сообщения: 0
Конкретно в цикле - без разницы какой вид инкремента использовать, пост или пре. В других местах разница может критичной.

_________________
Никакая контра не уйдёт от нас


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 19:32:19 
Вымогатель припоя
Аватар пользователя

Карма: 19
Рейтинг сообщений: 230
Зарегистрирован: Чт окт 06, 2016 21:12:07
Сообщений: 606
Откуда: Южное Бутово
Рейтинг сообщения: 0
WiseLord писал(а):
Применительно к циклу принципиальной разницы нет, но первый вариант (с преинкрементом) может быть немного быстрее

Ложное утверждение. Постинкремент и преинкремент различаются тогда и только тогда, когда они используются в выражении, содержащем еще какие-либо члены выражения. Если все выражение состоит только из пост- или пре- (как в примере) , то компилятор сгенерирует один и тот же код для обеих случаев.

По синтаксису С, выбор пост- или пре- инкремента на результирующее значение инкрементируемой или декрементируемой переменной не влияет. А влияет только на то, какое значение будет использовано далее в выражении - до инкремента или после. Если же значение вообще не используется, то и разницы нет.

_________________
Не ошибается только то, кто ничего не делает.
Тот, кто признает свои ошибки, на них учится.
Глупец же, упорствуя в своих заблуждениях, остается глупцом.


Последний раз редактировалось ptr128 Пн дек 05, 2016 19:36:31, всего редактировалось 1 раз.

Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 19:36:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 1
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
иногда воспитание утомляет - пришлось исправить и это сообщение... :roll: :))

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 20:13:51 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 0
ptr128 писал(а):
Ложное утверждение
Вообще-то я там дальше написал, для каких случаев это не ложно. В C++, если инкремент происходит не с простой переменной, а с экземпляром класса (для которого перегружен оператор инкремента), разница может быть. Связано с копированием экзепляра объекта.

А в случае простых типов - да, в цикле for разницы нет.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Пн дек 05, 2016 22:48:20 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
ARV писал(а):
ну вот какая разница, будет понедельник нулем или единицей?

Коллега походу покамест не прочуствовал, что этот ноль не просто индекс - а базовый принцип тутошнего Мироздания. Это как таблицу Пифагора называть таблицей умножения. А какие "стихи" выходят из индексов под магией двух делений - целочисленного и по-модулю - ничего лишнего! :)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Вт дек 06, 2016 06:43:45 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
Siarzhuk писал(а):
А какие "стихи" выходят из индексов под магией двух делений - целочисленного и по-модулю
и какие же? продекламируйте, прошу вас! :)

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср дек 07, 2016 13:02:59 
Потрогал лапой паяльник
Аватар пользователя

Карма: 20
Рейтинг сообщений: 121
Зарегистрирован: Вс янв 19, 2014 22:41:55
Сообщений: 353
Рейтинг сообщения: 0
ARV писал(а):
и какие же? продекламируйте, прошу вас! :)

[напыщенно так]
Код:
buffer[index / 8] & (1 << index % 8)

чем не ноктюрн?
[/напыщенно так]
;)

_________________
Одновременным нажатием LIGHT и POWER, РП Sangean ATS-909X (ver 1.29) превращается в ATS-909XR! ;-)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср дек 07, 2016 14:07:12 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 98
Рейтинг сообщений: 2116
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18403
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
и шо сие значит? в каком месте ликовать? ;)

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

Мой уютный бложик... заходите!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср дек 07, 2016 14:16:05 
Друг Кота
Аватар пользователя

Карма: 86
Рейтинг сообщений: 1035
Зарегистрирован: Чт апр 11, 2013 11:19:59
Сообщений: 4884
Откуда: Минск
Рейтинг сообщения: 1
Что-то вроде прохода по битам элементов массива. Где ликовать - тоже не очень ясно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср дек 07, 2016 17:23:19 
Говорящий с текстолитом
Аватар пользователя

Карма: 8
Рейтинг сообщений: 209
Зарегистрирован: Чт июн 10, 2010 20:11:19
Сообщений: 1520
Рейтинг сообщения: 0
Siarzhuk писал(а):
Код:
buffer[index / 8] & (1 << index % 8)

На ночь такой "код" лучше не читать...


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Нескольно простых вопросов о программировании AVR на Си.
СообщениеДобавлено: Ср дек 07, 2016 19:49:00 
Друг Кота
Аватар пользователя

Карма: 27
Рейтинг сообщений: 33
Зарегистрирован: Пн ноя 22, 2010 00:57:15
Сообщений: 6296
Откуда: Ukraine
Рейтинг сообщения: 0
в цикле происходит зависание
Код:
   for (i = 0; i < 6; ++i) {
      eeprom_read_block( &alarm[i], &cp_alarm[i], sizeof(alarm) );
   }

в чем может быть ошибка ?

_________________
Tell Me The Truth


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 1478 ]     ... , , , 26, , , ...  

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 8


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y