Easyelectronics.ru

Электроника для всех
Текущее время: 18 окт 2019, 23:57

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



JLCPCB – Прототипы печатных плат за $2/10pcs (Любой цвет!)
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу 1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения: Smart Fan Timer
СообщениеДобавлено: 28 июл 2018, 21:02 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Я делаю, но мне нужна помощь в программировании на Си.

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

Задумка такая:

***** ОБЩЕЕ ОПИСАНИЕ *****

Это двухканальный "умный" таймер для двух компьютерных (12-вольтовых) вентиляторов с встроенным мониторингом их исправности для применения в системе вытяжки на кухне, в гараже и т.п.

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

Допустимое количество управляемых и контролируемых каналов/вентиляторов - от 1 до 2.


ОРГАНЫ УПРАВЛЕНИЯ
- три кнопки управления.
- три потенциометра.

Кнопки RUN, STOP и SELECTOR наружные, легкодоступные для пользователя.
Кнопка RUN при коротком нажатии включает оба вентилятора на определённый интервал времени. При работающих вентиляторах повторное короткое нажатие на RUN в любой момент повторно запускает таймер с начала.
Кнопка STOP в любой момент времени обнуляет время таймера и выключает оба вентилятора.
Кнопка SELECTOR (только при запущенном RUN) позволяет выбрать для работы конкретный вентилятор или оба сразу.

Два потенциометра управляют скоростью вращения вентиляторов (регулируют параметры FB преобразователей DC-DC), а третий потенциометр "Время" устанавливает выдержку таймера (через АЦП микроконтроллера).


Включение вентиляторов осуществляется подачей питания (по входам ENABLE преобразователей DC-DC), а скорость вращения вентиляторов управляется величиной напряжения питания (цепями FB преобразователей DC-DC).
Для отслеживания исправности вентиляторов используются мониторинг потребляемого вентиляторами тока (точнее - АЦП МК контролирует напряжение на FB'ах каждого DC-DC - при КЗ там будет меньше положенного; с токовой перегрузкой справится сам чип DC-DC, а заниженное напряжение против номинала или земля на FB скажут микроконтроллеру о том, что пора отключать ENABLE на DC-DC) и встроенные в вентиляторы таходатчики.


Текущее состояние кода на гитхабе

Для тех, кто не в курсе: радиоэлектронику я более-менее знаю (радиоинженер-"сигнальщик"-практик: системы связи + радио/гидролокаторщик), а вот в программировании близок к нулю.


Вложения:
Smart Fan Timer 2018072801.rar [13.79 Кб]
Скачиваний: 81


Последний раз редактировалось VladyMile 01 авг 2018, 14:04, всего редактировалось 1 раз.
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 01:40 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1931
Откуда: Харьков
Первое что бы я вам посоветовал когда просите помощи по коду - это освоить гитхаб. Гит как система контроля версий немного мудренная, но в целом смотреть на код и делать там правки другим людям крайне удобно.
Вот сейчас людям нужно скачачть архив, распаковать, посмотреть. А если нужно предложить правку то нужно ее постить сюда или вам или еще куда-то. А с гитом там все сразу наглядно и понятно и все видят красивый форматированный код, все предложенные правки в виде пулреквестов, вашу историю изменений и т.д.

По проекту я бы убрал потенциометры и заменил на один энкодер и экранчик символьный добавить. Так и современней и кодить интересней.

И что вы в итоге хотите от сообщества - так и не указали-то. Какие проблемы, затыки, косяки?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 07:01 
Старожил
Аватара пользователя

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 634
Откуда: GMT+6
VladyMile писал(а):
про функции не понял - как же они не реализованы, если они в си-файле?

В си-файле реализованы
Код:
void ADC_Average_Filter_Update(u08 ch)
u08 ADC_Average_Filter_Result(u08 ch)



P.S. не меняйте цвет текста, читать не удобно
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 11:33 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
alexsam, понял про гит. Сегодня посмотрю что это и как, и на днях* обязательно начну осваивать.
Ну а пока, если возможно, по старинке.

Kelvin, оба понял, но не понял про функции: всегда считал, что в .h начальное void перед именем функции и void в скобках означают, что эти параметры будут описаны при объявлении функции в .с, а не при "застолблении" в .h
Тогда как же правильно написать в .h?

* - так хочется попасть на море хоть раз за лето, том более что до ближайшего пляжа всего пара кварталов, минут 8 спокойным пёхом; для "местных" побывать всего пару раз за сезон на море - норма :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 11:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
VladyMile писал(а):
alexsam, понял про гит. Сегодня посмотрю что это и как, и на днях* обязательно начну осваивать.

https://www.elegantthemes.com/blog/reso ... te-newbies


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 11:46 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
VladyMile писал(а):
Kelvin, оба понял, но не понял про функции: всегда считал, что в .h начальное void перед именем функции и void в скобках означают, что эти параметры будут описаны при объявлении функции в .с, а не при "застолблении" в .h

void значит, что нет параметров или возвращаемого значения, которое можно было бы использовать.
Тут важно осознать, что компилятор читает код буквально, читать мысли программиста он не в состоянии. Причем читает он этот код ровно в том контексте, который ему известен в точке, которую он читает в данный момент. Он не имеет ни малейшего понятия о том, что помимо уже прочитанного им .h существует еще какой-то .с где эти параметры описаны во всех деталях.
VladyMile писал(а):
Тогда как же правильно написать в .h?

Обе сигнатуры (название функции, количество и типы параметров) должны быть идентичны. Только в этом случае, в том месте, где эта функция вызывается у компилятора будет весь необходимый контекст, что бы понять, правильно ли вы вызвали эту функцию и что (возможно) требуется проделать с параметрами (например, произвести автоматическое приведение типов, там где оно предусмотрено стандартом). Компилятор не человек, намеков не понимает. Он понимает только то, что написано, причем буквально.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 29 июл 2018, 13:10 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
alexsam писал(а):
По проекту я бы убрал потенциометры и заменил на один энкодер и экранчик символьный добавить. Так и современней и кодить интересней.
Этот проект - работа над ошибками прошлого.

Уметь работать с энкодерами и экранами - здорово. Это в планах, но не в этой конструкции: эта конструкция для неподготовленных пользователей типа жены. Ещё и экраны ТУТ не нужны - их не встроить в имеющиеся корпуса.
В этом проекте я попробую сделать индикацию на нескольких PL9823/WS2812.

Потенциометры регуляторов скорости для оперативной регулировки не нужны СОВСЕМ. Они нужны для выставления "максимальной бесшумной скорости" конкретного вентилятора конкретного производителя. Я их сделаю доступными через дырочки в корпусе под шлиц.
Для одного регулятора времени ставить энкодер не считаю целесообразным, да и любой энкодер требует нормальной индикации положения, которой у меня не предусмотрено.

От сообщества я хочу замечаний с предложениями исправлений кода.
Или подсказок - как лучше (в момент моего тупика) сделать код.


evsi, благодарю.

Ребята, надеюсь на вашу помощь в этом проекте.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 14:09 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Текущее состояние кода на гитхабе


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 15:38 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
VladyMile писал(а):
Текущее состояние кода на гитхабе

Выглядит вполне пристойно. Из замечаний:

- Лимиты значений для разных типов описаны в limits.h, вполне можно использовать константы прямо оттуда, чем писать свои.
- Когда создается много алиасов для булевских переменных, удобнее определить конкретные значения только для первой пары значений, а остальные алиасы определить через них, например так:
Код:
#define TRUE      1
#define FALSE   0

#define HIGH      TRUE
#define LOW      FALSE

#define ON      TRUE
#define OFF      FALSE

#define YES      TRUE
#define NO      FALSE

В данном случае это не критично, но если это константы, которые потенциально могут меняться, то при таком подходе достаточно будет изменить только один набор значений, остальные получатся автоматом.
- Разнобой в стиле именовании макросов. Часть в нижнем регистре, часть в верхнем, часть кэмел-кейс. Стоит привести к одному стилю (если делать традиционно, но в верхнем регистре).
- Переменные, которые видны только в одном исходном файле рекомендую объявлять статиками, тогда они не будут видны за пределами единицы компиляции и не будут конфликтовать с другими аналогичными переменными, если вдруг случится так, что имена совпадут.
Например вот эти (из buttons.с):
Код:
u08 volatile pressedKey = 0;
u08 comp = 0;

И наоборот, если вы объявляете переменную статиком, то ей не место в .h, как вот тут (adc.h):
Код:
static u08 ADC_State = LapTime;

Вообще по возможности стоит избегать глобальных переменных видимых всему коду.
- Комментарии на русском - это жесть.

А вцелом все выглядит куда лучше чем во многих других проектах, которые мне доводилось видеть.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 17:39 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Я старый, потому стараюсь учиться быстро или не учиться вовсе :)
Кое-что поправил, щас буду выкладывать на Гит (upd: выложил в ветку adc_Vlady).
Остальное ("красоту" типа регистров) буду править по мере появления времени.
Вечером попробую скомпилить - мне _это_ интересно.
Комменты прежде всего для себя.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 18:03 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
А зачем все эти заключения макросов в do { } while(0)?
Да и практически весь commons.h не нужен. Всё это есть в avr-libc:
https://www.nongnu.org/avr-libc/user-ma ... __sfr.html
https://www.nongnu.org/avr-libc/user-ma ... rupts.html
https://www.nongnu.org/avr-libc/user-ma ... chdog.html
https://www.nongnu.org/avr-libc/user-ma ... ufunc.html

Лучше всё-таки использовать стандартные вещи, а не изобретать свои велосипеды.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 18:08 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
NStorm писал(а):
А зачем все эти заключения макросов в do { } while(0)?

https://stackoverflow.com/questions/106 ... cope-block


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 18:22 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
NStorm писал(а):
А зачем все эти...
Я же сам такие вещи пока не пишу. :)

Возможно, у ДиХальта нашел в статьях, или у кого-то ещё из "учителей".
Насколько помню, это связано со связками "несколько операций подряд" при компиляции с разными ключами.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 18:39 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
evsi писал(а):
https://stackoverflow.com/questions/1067226/c-multi-line-macro-do-while0-vs-scope-block

Не, когда несколько операций в макросе это понятно. Там же куча по одному, типа такого:
Код:
#define nop() do { asm volatile (nop); } while(0)

А вот это вообще работать не будет:
Код:
#define BitIsSet(reg, bit)      do { ((reg & (1<<bit)) != 0); } while(0)
#define BitIsClear(reg, bit) do { ((reg & (1<<bit)) == 0); } while(0)


Что будет при if (BitIsSet(reg, 1)) {} ? Ошибка компиляции будет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 01 авг 2018, 23:40 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Попробовал откомпилить - ошибок меньше чем раньше, но всё равно дофига.

(задумчиво рассматривает свой код в новой ветке)...

NStorm писал(а):
А вот это вообще работать не будет:
Код:
#define BitIsSet(reg, bit)      do { ((reg & (1<<bit)) != 0); } while(0)
#define BitIsClear(reg, bit) do { ((reg & (1<<bit)) == 0); } while(0)
Что будет при if (BitIsSet(reg, 1)) {} ? Ошибка компиляции будет.
Почему ошибка компиляции?
Можно не отвечать.
Это я к тому, что я ошибки не вижу. Вот такой я "погромист" :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 09:48 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Застрял на Гите. Хочу выложить код на ветку adc_Vlady, она в браузере видна, а в Баше её нет:
Код:
User@VEGA MINGW32 /usr/bin
$ cd D:/Vlady/RadioAmateur/Git

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git remote add origin https://github.com/VladyMile/Smart-Fan-Timer.git
fatal: remote origin already exists.

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git branch
* master

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git checkout adc_Vlady
error: pathspec 'adc_Vlady' did not match any file(s) known to git.

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git pull origin master
warning: no common commits
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 12 (delta 0), reused 12 (delta 0), pack-reused 0
Unpacking objects: 100% (12/12), done.
From https://github.com/VladyMile/Smart-Fan-Timer
* branch            master     -> FETCH_HEAD
* [new branch]      master     -> origin/master
fatal: refusing to merge unrelated histories

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git pull origin adc_Vlady
remote: Counting objects: 12, done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 12 (delta 9), reused 12 (delta 9), pack-reused 0
Unpacking objects: 100% (12/12), done.
From https://github.com/VladyMile/Smart-Fan-Timer
* branch            adc_Vlady  -> FETCH_HEAD
* [new branch]      adc_Vlady  -> origin/adc_Vlady
fatal: refusing to merge unrelated histories

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git branch
* master

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git add -A

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git commit -m "исправлен косяк с переменными"
On branch master
Changes not staged for commit:
        modified:   Smart-Fan-Timer (modified content)

no changes added to commit

User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 10:16 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3646
Такие вещи, как установку/сброс/чтение бита я (да и не только я) как бы завсегда делал:
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
#define READ_BIT(REG, BIT) ((REG) & (BIT))

ну и потом в коде пишем
SET_BIT(reg, 1<<5);
if( READ_BIT(reg, 1<<3) ) { ...чето там... }


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 10:22 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
BusMaster писал(а):
Такие вещи, как установку/сброс/чтение бита я (да и не только я) как бы завсегда делал:
#define SET_BIT(REG, BIT) ((REG) |= (BIT))
#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT))
#define READ_BIT(REG, BIT) ((REG) & (BIT))

ну и потом в коде пишем
SET_BIT(reg, 1<<5);
if( READ_BIT(reg, 1<<3) ) { ...чето там... }

Постоянное писание сдвигов как-то не добавляет удобства этим макросам. Почему бы не делать сдвиг прямо в макросе, а в параметре передавать только номер бита?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 10:31 
Старожил
Аватара пользователя

Зарегистрирован: 22 июл 2017, 11:48
Сообщения: 3646
Можно и так. но иногда биты определены как 0х00700000
Я со сдвигами делаю макросы вот такого плана:
#define REDLED_ON GPIOA->BSRR = 1<<3
или вот так:
#define REDLED_Port GPIOA
#deifne REDLED_Pin 3
#define REDLED_ON REDLED_Port->BSRR = 1<<REDLED_Pin


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 12:13 
Старожил
Аватара пользователя

Зарегистрирован: 27 мар 2015, 04:10
Сообщения: 1931
Откуда: Харьков
VladyMile писал(а):
Застрял на Гите. Хочу выложить код на ветку adc_Vlady, она в браузере видна, а в Баше её нет

Так вы же в мастере все время, в скобочках же пишет: "(master)"
Вам нужно переключится на вашу ветку:
Делаете в текущей:
git pull //затягиваем все
git checkout adc_Vlady // переключаемся на ветку, в скобках должна появится ваша ветка: (adc_Vlady)
git status // смотрим что у нас происходит с нашими файлами
тут правим файлы, потом когда готовы заливать делаем еще раз git status чтоб посмотреть не поправили ли мы чего-то лишнего
так же можно сделать
git diff
чтоб посмотреть конкретные изменения в файлах.
git add [filename] // добавляем все что нужно закомитить
git commit -m "my cool changes" //комитим локально (в локальный репозиторий) с описаловом
git push origin adc_Vlady // пушим на шитхаб (внешний репозиторий)

Советы:
привыкайте пользоваться командой git status она говорит о вашем состоянии бранча и файлов.
перед каждым коммитом и пушем делайте git pull, когда вы работаете один - это конечно не критично, но если вдруг будете работать с кем-то или на разных компах с одним кодом то это поможет избежать конфликтов перед комитом, а их лучше разруливать до того чем после.
а лучше делать так:
git pull && git commit -m "bla bla" && git push origin [branch]
так у вас шансы что ко-то между коммитом и пушем зальет что-то свое сводится практически к нулю. Но это для больших команд и когда пушат в один бранч (что конечно же зло).
Не делайте
$ git add -A
это зло, лучше посмотреть сначала git status и убедится что в комит не попадет лишнее.
Делайте
git diff
покажет все ващи изменения именно кода. Удобно чтоб не залить лишнего.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 13:48 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Так я вот что получаю на домашнем компе (см. выше):
Код:
User@VEGA MINGW32 /d/Vlady/RadioAmateur/Git (master)
$ git branch
* master

$ git checkout adc_Vlady
error: pathspec 'adc_Vlady' did not match any file(s) known to git.
То есть у меня ветки adc_Vlady нет.
А где её нет? На домашнем компе или [тут мысль кончилась]?
Изначально я эту ветку делал с рабочего компа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 14:12 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
VladyMile писал(а):
А где её нет? На домашнем компе или [тут мысль кончилась]?
Изначально я эту ветку делал с рабочего компа.

Каждый репозиторий git автономен. Есть средства синхронизации между ними, но они все запускаются руками. Если посмотреть на ситуацию с такой стороны, станет понятно, что этой ветки нет нигде, кроме локального репозитория на одной машине, где он был сделан. После push он появится в репозитории на сервере, а после pull возможно и на другой машине. "Возможно" потому что в зависимости от установок git может синхронизировать только текущий бранч. Что бы это решить, надо сделать git pull --all (он вытащит все бранчи из ориджина), а затем git checkout <branch>. Вот после этого все процессы синхронизации будут закончены, в текущем локальном репозитории будет точно такая же ветка, как на ориджине и она станет текущей.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 14:16 
Старожил
Аватара пользователя

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2619
Откуда: Русь, Новороссийск
Благодарю, evsi. Теперь ясно. Разбираюсь.
Код:
$ git pull --all
Fetching origin
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> adc_Vlady


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 14:30 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2471
VladyMile писал(а):
Благодарю, evsi. Теперь ясно. Разбираюсь.
Код:
$ git pull --all
Fetching origin
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.

    git pull <remote> <branch>

If you wish to set tracking information for this branch you can do so with:

    git branch --set-upstream-to=origin/<branch> adc_Vlady

Советую переключиться обратно на master и повторить попытку.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Smart Fan Timer
СообщениеДобавлено: 02 авг 2018, 15:51 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 2284
VladyMile писал(а):
NStorm писал(а):
А вот это вообще работать не будет:
Код:
#define BitIsSet(reg, bit)      do { ((reg & (1<<bit)) != 0); } while(0)
#define BitIsClear(reg, bit) do { ((reg & (1<<bit)) == 0); } while(0)
Что будет при if (BitIsSet(reg, 1)) {} ? Ошибка компиляции будет.
Почему ошибка компиляции?
Можно не отвечать.
Это я к тому, что я ошибки не вижу. Вот такой я "погромист" :)

Ну я всё же отвечу. Потому что подставьте макрос и поймете какой код получится:
Код:
if (do { ((reg & (1<<1)) != 0); } while(0)) {}

Нельзя в условиях if писать оператор do, поэтому будет ошибка.
Я уже говорил, что вы перестарались с do {} while(0). Тут он не то, что не нужен, а даже мешает работать. Нельзя макросы, от которых мы ждем возвращаемого значения заключать в do {}.
Вот ваш commons.h правильно сделанный:
Show commons.h


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 86 ]  На страницу 1, 2, 3, 4  След.

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


Кто сейчас на конференции

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


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

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

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB