Easyelectronics.ru

Электроника для всех
Текущее время: 19 фев 2019, 01:48

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




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

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

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

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

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

Это двухканальный "умный" таймер для двух компьютерных (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 Кб]
Скачиваний: 24


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

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

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

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


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

Зарегистрирован: 11 авг 2016, 20:52
Сообщения: 579
Откуда: 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
Сообщения: 2331
Откуда: Русь, Новороссийск
alexsam, понял про гит. Сегодня посмотрю что это и как, и на днях* обязательно начну осваивать.
Ну а пока, если возможно, по старинке.

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

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


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

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

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


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

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

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

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


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

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

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

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

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


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

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


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

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


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

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2473
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
Сообщения: 2331
Откуда: Русь, Новороссийск
Я старый, потому стараюсь учиться быстро или не учиться вовсе :)
Кое-что поправил, щас буду выкладывать на Гит (upd: выложил в ветку adc_Vlady).
Остальное ("красоту" типа регистров) буду править по мере появления времени.
Вечером попробую скомпилить - мне _это_ интересно.
Комменты прежде всего для себя.


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 1458
А зачем все эти заключения макросов в 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
Сообщения: 2473
NStorm писал(а):
А зачем все эти заключения макросов в do { } while(0)?

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


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

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

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


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 1458
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
Сообщения: 2331
Откуда: Русь, Новороссийск
Попробовал откомпилить - ошибок меньше чем раньше, но всё равно дофига.

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

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
Сообщения: 2331
Откуда: Русь, Новороссийск
Застрял на Гите. Хочу выложить код на ветку 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
Сообщения: 2824
Такие вещи, как установку/сброс/чтение бита я (да и не только я) как бы завсегда делал:
#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
Сообщения: 2473
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
Сообщения: 2824
Можно и так. но иногда биты определены как 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
Сообщения: 1855
Откуда: Харьков
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
Сообщения: 2331
Откуда: Русь, Новороссийск
Так я вот что получаю на домашнем компе (см. выше):
Код:
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
Сообщения: 2473
VladyMile писал(а):
А где её нет? На домашнем компе или [тут мысль кончилась]?
Изначально я эту ветку делал с рабочего компа.

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


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

Зарегистрирован: 14 июн 2015, 17:41
Сообщения: 2331
Откуда: Русь, Новороссийск
Благодарю, 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
Сообщения: 2473
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
Сообщения: 1458
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 часов


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

Сейчас этот форум просматривают: andryblack


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

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

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