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

Если ваш вопрос не влез ни в одну из вышеперечисленных тем, вам сюда.
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3220997#p3220997"]Ну так это всё у меня и сделано, естественно так как мне удобно.[/uquote]

Где же так?

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

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-ми строк кода? После внесения правок надо бы проверить все заново.

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221121#p3221121"]А мне главное чтобы работало[/uquote]
В том то и дело, что работает "криво". Я за пару минут нашел ошибку, с которой Вы даже согласились. Поверьте ошибок у Вас куча. Не удивлюсь, если иногда устройство "глючит" и подвисает. Структурированный и понятный код - это не самоцель, это способ значительно уменьшить количество ошибок в ПО и время для исправления ошибок, расширения функциональности.

Но, если Вам удобнее, то Ваше дело - пишите, как хотите.
Реклама
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

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

PS: Ладно, Вы вместо критики, пытаетесь отбрыкиваться и доказать, что Ваш стиль не хуже других. О чём дальше можно вести беседу ?
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

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

Сообщение arkhnchul »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221170#p3221170"]Почему нежелательно инициализация где-то там[/uquote]
читаемость, логическая связность кода.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3221170#p3221170"]и в чем минус того что она глобальная?[/uquote]
по семантике она локальная. Плюс не факт, что вы очень общее название result не захотите использовать где-то еще. Плюс компилятор может оптимизировать использование локальной переменной, заменив обращение к ней операциями целиком в регистрах.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3221170#p3221170"]Почему никаких дисплеев и пищалок?[/uquote]
логическое разделение и структурирование кода. Функция проверки чего-то должна проверять это что-то; реагировать на результат проверки - дело того, кто функцию вызвал.
[uquote="ra9ust",url="/forum/viewtopic.php?p=3221170#p3221170"]Напишите как по другому...[/uquote]

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

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
Реклама
Эиком - электронные компоненты и радиодетали
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221192#p3221192"]Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.[/uquote]

Я же Вам показал ошибку. И Вы даже согласились. Или мне еще проанализировать и сказать, в каких случаях Вы ее увидите и что увидите?
И показал возможные проблемы, где еще могут быть проблемы. А зачем? Вас же все устраивает.
Реклама
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

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

Добавлено after 2 minutes 19 seconds:
[uquote="viiv",url="/forum/viewtopic.php?p=3221200#p3221200"][uquote="ra9ust",url="/forum/viewtopic.php?p=3221192#p3221192"]Не понятно что вы подразумеваете под ошибкой? Если сбой в работе или нарушение алгоритма, то всё работает без единого сбоя,без глюков и практически не выключаясь уже полгода,всё как и задумывал работает, ну а если под ошибкой подразумевается просто
загроможденность кода лишними действиями,то возможно соглашусь, потому и спрашивал про упрощение.[/uquote]

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

Добавлено after 2 minutes 8 seconds:
Уменьшение счетчика учтем, пожалуй это наглядней чем увеличивать.
Реклама
viiv
Грызет канифоль
Сообщения: 289
Зарегистрирован: Чт ноя 06, 2014 13:09:06

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

Сообщение viiv »

Вы тролите?

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

Это не ошибка? Или Вы так задумывали? Ну тады как-то работает и ладно.
arkhnchul
Друг Кота
Сообщения: 3092
Зарегистрирован: Пн апр 06, 2015 11:01:53
Откуда: москва, уфа

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

Сообщение arkhnchul »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221201#p3221201"]Уменьшение счетчика учтем, пожалуй это наглядней чем увеличивать.[/uquote]
еще нагляднее - выделить в функцию или макрос

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

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); \
}) 
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

[uquote="Аlex",url="/forum/viewtopic.php?p=3221195#p3221195"]О чём дальше можно вести беседу ?[/uquote]
Начинает и до вас доходить? Я ж сразу сказал - гиблое это дело, классифицировать дерьмо...
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

Мой уютный бложик... заходите!
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

[uquote="viiv",url="/forum/viewtopic.php?p=3221223#p3221223"]Вы тролите?

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

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

Да есть такое дело, но я и не планировал так изначально,конечно через сутки епром обновится, но поправить можно, учтем.
Да это даже и не сбой, а недочет, и вот тут то мне бы и помогла та функция проверки еепром в 20.00, и она бы вылезла, что было бы сигналом для отладки, так что смысл в ней есть.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

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

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

[uquote="ARV",url="/forum/viewtopic.php?p=3221232#p3221232"]Начинает и до вас доходить?[/uquote]Да дошло то уже давно. Но, как всегда, где-то глубоко в душе затаилась небольшая надежда ...
Аватара пользователя
shindax
Потрогал лапой паяльник
Сообщения: 378
Зарегистрирован: Сб сен 19, 2009 07:02:19

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

Сообщение shindax »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221241#p3221241"]...
Да это даже и не сбой, а недочет...[/uquote]
Ага, "It's not a bug, it's a feature!" :D Это не будильник-ли? 32 декабря станет видно. Или только после 20.00? :D
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

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

Сообщение smalcom »

4 страницы. Вот как говнокод множит этропию. "Автору" надо не советы сотянми давать, а ремня и книжки читать.
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

Как всё запущено здесь...
А таким "комментаторам" потом как бы падать высоко не пришлось.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
smalcom
Встал на лапы
Сообщения: 128
Зарегистрирован: Пн фев 08, 2016 10:57:14

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

Сообщение smalcom »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221522#p3221522"]Как всё запущено здесь...
А таким "комментаторам" потом как бы падать высоко не пришлось.[/uquote]

*НАДМЕННО* Простите, конечно, наверное вам так понятнее будет: "4 страницы. Вот как говнокод множит этропию. "Автору" надо не советы сотянми давать, а ремня и книжки читать. )))))))"
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

Умный человек никогда не будет кичится своими знаниями, а спокойно объяснит или даст совет.
Да что толку тут объяснять...
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

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

Мой уютный бложик... заходите!
Аватара пользователя
ra9ust
Потрогал лапой паяльник
Сообщения: 375
Зарегистрирован: Чт июн 24, 2010 20:58:59

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

Сообщение ra9ust »

Я такого не говорил.
Аватара пользователя
ARV
Ум, честь и совесть. И скромность.
Сообщения: 18546
Зарегистрирован: Чт дек 28, 2006 08:19:56
Откуда: Новочеркасск
Контактная информация:

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

Сообщение ARV »

[uquote="ra9ust",url="/forum/viewtopic.php?p=3221802#p3221802"]Я такого не говорил.[/uquote]
значит, мне показалось. как и остальным.
если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе
при взгляде на многих сверху ничего не меняется...

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

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