Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
Ответить

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

Вт окт 31, 2017 18:00:18

Ну так это всё у меня и сделано, естественно так как мне удобно.


Где же так?
Код:
void contr_eep (void)
{   
for(comp=0;comp<66;comp++){
 if(mass[comp]!=eep_mass[comp])result=0;}
 if(result==1){delayt=0;while(delayt<200){lcd_gotoxy(0,0);lcd_putsf("  TEST EEPROM         OK!       ");}w=0;}else
{lcd_gotoxy(0,0);lcd_putsf("  TEST EEPROM       FAILURE!    ");if(eeppp&0b0011111110010000){PORTB.5=0;}else{PORTB.5=1;}if(PINC.3==0)
{PORTB.5=0;dreb_0=6;w=0;}}  //ïèùèò êàæäûå ïðèìåðíî 2 ìèíóòû
}


66 размер массива? Вот Вы решите добавить еще параметр (или убрать). Придется весь код просматривать и править - не осталось ли где 66. Причем, например, при выходе за границу массива, Вы можете не увидеть сразу проблему. Сейчас надо посмотреть объявления mass и eep_mass, чтобы убедиться, что нет ошибки.
comp почему не локальная? Чтобы убедиться, что ошибки нет - надо просмотреть весь текст.
result Также глобальная. Чтобы убедиться, что ошибки нет - надо просмотреть весь текст.
delayt Также глобальная. Чтобы убедиться, что ошибки нет - надо просмотреть весь текст. А ошибка скорей всего есть, так как данная переменная много где используется (судя по текстам, которые Вы давали ранее), в том числе и в обработчике прерываний.
w, опять же глобальная. Назначение непонятное, к тому же поиск затруднен (переменная очень короткая). Много где используется, в том числе и в обработчике прерываний. Скорей всего есть ошибка (и даже не одна).
eeppp&0b0011111110010000 - назначение eeppp и константы непонятно, модифируется в обработчике, используется вне обработчика: как volatile не объявлена, атомарность доступа "побоку". Лень смотреть, но скорей всего есть ошибка.
PORTB.5 PINC.3 непонятно как используются, но используется много где. Если PORTB.5 - это включение alarm-а, то почему не сделать функцию
Код:
void set_alarm (bool_t on)
{
    PORTB.5 = on ? 1 : 0;
}

Так ведь понятнее.

Не много ли для 8-ми строк кода? После внесения правок надо бы проверить все заново.

А мне главное чтобы работало

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

Но, если Вам удобнее, то Ваше дело - пишите, как хотите.

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

Вт окт 31, 2017 18:09:37

Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.

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

Вт окт 31, 2017 18:11:25

ra9ust писал(а):Почему нежелательно инициализация где-то там и в чем минус того что она глобальная?
А какой смысл делать её глобальной и тратить на неё статическую ячейку памяти, если она используется только в одном месте ?
Минус, хотя бы, в том, что нет читабельности кода.

ra9ust писал(а):Почему никаких дисплеев и пищалок?
Потом, что функция, выполняющая определённые действия, должна только их и выполнять. Ничего лишнего в ней быть не должно.
Если хочется что-то вывести по результату этой функции, то выводите после её вызова.

PS: Ладно, Вы вместо критики, пытаетесь отбрыкиваться и доказать, что Ваш стиль не хуже других. О чём дальше можно вести беседу ?

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

Вт окт 31, 2017 18:12:42

Почему нежелательно инициализация где-то там

читаемость, логическая связность кода.
и в чем минус того что она глобальная?

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

логическое разделение и структурирование кода. Функция проверки чего-то должна проверять это что-то; реагировать на результат проверки - дело того, кто функцию вызвал.
Напишите как по другому...

Код:
lcd_gotoxy(0,0);
lcd_putsf("  TEST EEPROM         OK!       ");
delayt=0;
while(delayt<200); // do nothing, wait for delayt increment

и да, общая практика для задержек - в прерывании таймера уменьшать счетчик, а не увеличивать. Т.е.
Код:
delayt=200;
while(delayt>0); // do nothing, wait for delayt decrement

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

Вт окт 31, 2017 18:18:07

Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.


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

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

Вт окт 31, 2017 18:23:08

Пожалуй с локальной переменной соглашусь, и с 2 сек выводом тоже.

Добавлено after 2 minutes 19 seconds:
Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.


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

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

Добавлено after 2 minutes 8 seconds:
Уменьшение счетчика учтем, пожалуй это наглядней чем увеличивать.

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

Вт окт 31, 2017 18:45:05

Вы тролите?

eep_month и eep_year присваивается ДО корректировки month и year (т.е. возможно неправильными значениями) Именно ошибка в Вашем понимании.

Поставте 23:59:30 31 декабря. 2017

После завершения минуты у Вас в EEPROM будет (32 декабря 2017 года, вместо 1 января 2018):
eep_day=32
eep_month=12
eep_year=2017

Это не ошибка? Или Вы так задумывали? Ну тады как-то работает и ладно.

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

Вт окт 31, 2017 18:46:25

Уменьшение счетчика учтем, пожалуй это наглядней чем увеличивать.

еще нагляднее - выделить в функцию или макрос
Код:
void delay_ms(uint16_t mseconds){ // 10ms precision
    delayt=mseconds/10;
    while(delayt>0); // do nothing, wait for delayt decrement
}

Код:
#define DELAY_MS(mseconds) ({ \
    delayt=(mseconds)/10; \
    while(delayt>0); \
})

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

Вт окт 31, 2017 18:56:29

О чём дальше можно вести беседу ?

Начинает и до вас доходить? Я ж сразу сказал - гиблое это дело, классифицировать дерьмо...

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

Вт окт 31, 2017 19:04:00

Вы тролите?

eep_month и eep_year присваивается ДО корректировки month и year (т.е. возможно неправильными значениями) Именно ошибка в Вашем понимании.

Поставте 23:59:30 31 декабря. 2017

После завершения минуты у Вас в EEPROM будет (32 декабря 2017 года, вместо 1 января 2018):
eep_day=32
eep_month=12
eep_year=2017

Это не ошибка? Или Вы так задумывали? Ну тады как-то работает и ладно.


Да есть такое дело, но я и не планировал так изначально,конечно через сутки епром обновится, но поправить можно, учтем.
Да это даже и не сбой, а недочет, и вот тут то мне бы и помогла та функция проверки еепром в 20.00, и она бы вылезла, что было бы сигналом для отладки, так что смысл в ней есть.

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

Вт окт 31, 2017 21:05:28

Начинает и до вас доходить?
Да дошло то уже давно. Но, как всегда, где-то глубоко в душе затаилась небольшая надежда ...

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

Ср ноя 01, 2017 03:34:26

...
Да это даже и не сбой, а недочет...

Ага, "It's not a bug, it's a feature!" :D Это не будильник-ли? 32 декабря станет видно. Или только после 20.00? :D

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

Ср ноя 01, 2017 05:19:32

4 страницы. Вот как говнокод множит этропию. "Автору" надо не советы сотянми давать, а ремня и книжки читать.

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

Ср ноя 01, 2017 08:33:01

Как всё запущено здесь...
А таким "комментаторам" потом как бы падать высоко не пришлось.

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

Ср ноя 01, 2017 08:41:11

ra9ust писал(а):Как всё запущено здесь...
вы про это: download/file.php?id=295383 ? таки да, запущено - просто ужас
ra9ust писал(а):А таким "комментаторам" потом как бы падать высоко не пришлось
вам-то точно не придется - ниже некуда просто

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

Ср ноя 01, 2017 14:31:47

Как всё запущено здесь...
А таким "комментаторам" потом как бы падать высоко не пришлось.


*НАДМЕННО* Простите, конечно, наверное вам так понятнее будет: "4 страницы. Вот как говнокод множит этропию. "Автору" надо не советы сотянми давать, а ремня и книжки читать. )))))))"

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

Ср ноя 01, 2017 14:37:32

Умный человек никогда не будет кичится своими знаниями, а спокойно объяснит или даст совет.
Да что толку тут объяснять...

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

Ср ноя 01, 2017 14:41:45

ra9ust писал(а):спокойно объяснит или даст совет
так вам спокойно и объясняли: и про форматирование, и про названия переменных, и про магические числа... и каков итог? у вас на все объяснения один ответ - я так привык и нахер ваше мнение.
ra9ust писал(а):Да что толку тут объяснять...
и не добавить ничего :dont_know:

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

Ср ноя 01, 2017 15:03:29

Я такого не говорил.

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

Ср ноя 01, 2017 15:04:40

Я такого не говорил.

значит, мне показалось. как и остальным.
Ответить