Например TDA7294

Форум РадиоКот • Просмотр темы - Вопросы по С/С++ (СИ)
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 25, 2024 07:15:14

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


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



Начать новую тему Ответить на тему  [ Сообщений: 7588 ]     ... , , , 255, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 15:15:11 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
Про что уже не так написал , что-то не понял.

как минимум, это должно выглядеть так
Спойлер
Код:
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;
        }
    }
}

опять магические числа 66 и 0b0011111110010000
что такое mass? Давайте угадаю - "массив". Нет, нет и нет. Переменная должна называться осмысленно.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 15:18:02 
Потрогал лапой паяльник
Аватар пользователя

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 15:27:35 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ra9ust писал(а):
Ну не пишу я комментарии на очевидные для меня куски кода, просто мне так удобнее, а раз удобно значит привычно. Вот как-то так. Продолжаем обсуждение.
я-то и до этого не принимал участие в обсуждении, а после этого, по моему скромному мнению, и всем остальным должно стать противно обсуждать. раз вам так удобнее - зачем вы вообще спрашиваете чужого мнения? ну и ковыряйтесь в своем коде сами.

по поводу написания качественного кода исписано сотни книг, тысячи гигабайт форумов, а вам все мало, у вас, оказывается, своё понимание об удобстве... успехов вам на этом пути!

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

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


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 15:34:48 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 0
вам удобнее потому, что вы успели привыкнуть к этому говну. Распривыкайте обратно и учитесь делать правильно.
ra9ust писал(а):
почему магические то?

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

ну вот для примера. Все, кто использует modbus, знают коды функций, что там Read Holding registers это 03, Write single Holding register это 06 и далее. Вроде как разберутся в случае чего. Но использовать их прям вот так, как числа - крайне фиговая практика. Потому пишем:
Спойлер
Код:
...
typedef enum {
   MB_FUNC_READ_HOLDING_REGISTERS = (uint8_t) 3,
   MB_FUNC_READ_INPUT_REGISTERS = (uint8_t) 4,
   MB_FUNC_WRITE_SINGLE_REGISTER = (uint8_t) 6,
   MB_FUNC_DIAGNOSTICS = (uint8_t) 8
} mb_function_t;
...
...
    switch (MB_ADU_FUNCTION) {
      case MB_FUNC_DIAGNOSTICS:
          mb_function_diagnostic();
          break;
      case MB_FUNC_READ_HOLDING_REGISTERS:
          mb_function_read_registers();
          break;
      case MB_FUNC_READ_INPUT_REGISTERS:
          mb_function_read_registers();
          break;
      case MB_FUNC_WRITE_SINGLE_REGISTER:
          mb_function_write_single_register();
          break;
      default:
          mb_raise_exception(MB_EXCEPTION_FUNCTION_UNSUPPORTED);
   }


Вернуться наверх
 
Выбираем схему BMS для заряда литий-железофосфатных (LiFePO4) аккумуляторов

Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 15:58:15 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
Качественного в смысле самого исполнения кода, а не того что пробел не сделал или скобки не там поставил.Понятно всё с вами.


Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 16:21:09 
Друг Кота

Карма: 38
Рейтинг сообщений: 618
Зарегистрирован: Пн апр 06, 2015 11:01:53
Сообщений: 3092
Откуда: москва, уфа
Рейтинг сообщения: 3
чтобы подсказать что-то по поводу "самого исполнения кода", надо сначала прочитать ваш код и понять, что он делает. И тут у нас проблема: вамвитььудобнаписатьигонитаккагпринято,и,раз,для,вас,все;ачивидна,высчетаетештоудобствочитающихниважна. Тут понимаете, какая штука: считаемые вами неважными пробелы, отступы, скобки, названия идентификаторов, структурирование кода вообще имеют такую же роль, как и правила орфографии, пунктуации и семантики естественного языка. Их же вы почему-то не игнорируете, так?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 16:33:35 
Потрогал лапой паяльник
Аватар пользователя

Карма: 1
Рейтинг сообщений: 14
Зарегистрирован: Сб сен 19, 2009 07:02:19
Сообщений: 378
Рейтинг сообщения: 0
Качественного в смысле самого исполнения кода, а не того что пробел не сделал или скобки не там поставил.Понятно всё с вами.

А что Вам понятно? Все советы, рекомендации, критика, IMHO, были даны по существу. Напустите на самый идеальный код обфускатор, чтобы он заменил все имена переменных, функций, констант, на "отфонарные", а макроподстановок напротив, на прямое включение и что Вы получите? Программа продолжит выполняться точно-так-же, как и с осмысленными именами сущностей, но кто сможет такой код поддерживать, дополнять, изменять? Ваш код обфусцирован изначально. :) "Вопрос 'Как писать хорошие программы' из разряда 'Как писать хорошую английскую прозу'". Ч. Уэзрелл. Вы пока делаете это хреново. Как Вы будете делать это дальше - Ваше личное дело, вот только именно Вы предложили к рассмотрению свой код, а не те, кто вам здесь отвечал. Так-что пробелы, скобки должны быть ( ну или их хотя-бы рекомендуется ставить ) в нужное время, в нужном месте. Не нравятся вам общепринятые правила, так пишите, как Вам хочется, но имейте в виду, однажды с ростом программы ( а с таким подходом почти наверняка ) , у Вас неизбежно появятся трудноуловимые ошибки. Желающих исследовать ваши неряшливые портянки кода, найдётся немного желающих. Так-что умерьте гордыню и научитесь адекватно и вдумчиво воспринимать справедливую критику.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 16:47:23 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
А мне главное чтобы работало, а как уж это будет сделано-вопрос другой,вот на это другое все и уцепились,почти все.
Ну обратили на это внимание и ладно, понятно, укажите на изменение именно логики работы и всё.Да, возможно трудно прочесть, но никто не говорил что будет легко, ведь никто же не заставляет человека менять почерк письма если он неразборчивыцй,здесь то же самое. Так что умерьте высокомерие и продолжите разбирать код по существу, по логике, по возможному уменьшению кода и тому подобному.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:01:46 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 1
Медали: 1
Получил миской по аватаре (1)
http://www.tutorialspoint.com/online_c_formatter.htm
Ваш последний код :
Код:
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 минуты
}

в два клика превращается вот в это чудо :
Код:
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;    //пищит каждые примерно 2 минуты
            dreb_0=6;
            w=0;
        }
    }
}

Приятнее смотреть, не правда ли ?

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:08:09 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
Точно работает! Не знал про такие сервисы, спасибо за подсказку!


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:10:14 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
Что касается кода. Я, например, с трудом представляю, что в этом коде делается.
Например, вот тут :
Код:
        delayt=0;
        while(delayt<200) {
            lcd_gotoxy(0,0);
            lcd_putsf("  TEST EEPROM         OK!       ");
        }
я вижу бесконечный цикл.

А этот код вообще бессмыселен :
Код:
    for(comp=0; comp<66; comp++) {
        if(mass[comp]!=eep_mass[comp])result=0;
    }
    if(result==1) {
        ....

:dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:20:19 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
Ну как же так, в первом цикл не бесконечен, а длится 2 сек для отображения надписи епром ок и после этого возврат в главное меню(w=0).
Во втором сравниваются 65 переменных в озу с их значениями в епром, если успешно то пишется та самая надпись Ок на две сек, если хоть одно отличие то другая надпись и звуковое оповещение, всё работает, проверено.Это замена той вчерашней кошмарной записи где каждая переменная проверяется через if.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:29:28 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ra9ust писал(а):
цикл не бесконечен, а длится 2 сек
Не вижу там 2-ух секунд. Вижу, что цикл будет крутиться бесконечно, ибо переменная всегда будет равна нулую.
Он может у Вас где-то и изменяться (например, в прерывании), но нам этого не видно. Отсюда и тяжело анализировать код, не имея о нём представления.

ra9ust писал(а):
Во втором сравниваются 65 переменных в озу с их значениями в епром, если успешно то ..........
А представьте, что на начале цикла, переменная result будет равна нулю. Что произойдёт ?


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:36:01 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
delayt постоянно инкрементируется в 10мс прерывании.

result Не будет равна нулю, в самом начале , после инициализации портов и устройств, перед вечным циклом ей присваивается 1.

Добавлено after 2 minutes 27 seconds:
Хотя можно и в инверсии сделать, код сократится на одно присваивание.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:40:08 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
ra9ust писал(а):
result Не будет равна нулю, в самом начале , после инициализации портов и устройств, перед вечным циклом ей присваивается 1
а как же это:
Аlex писал(а):
if(mass[comp]!=eep_mass[comp])result=0;
если данные не совпадут?

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:41:31 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
ra9ust писал(а):
после инициализации портов и устройств, перед вечным циклом ей присваивается 1

1. Место её инициализации - прямо перед самым циклом, а не "где-то там...". Мало того, она должна быть локальной, ибо используется только в одном месте.
2. Функция проверки еепром должна содержать только код ля её проверки. Никаких дисплеев, пищалок, и т.д... там не должно быть.
3. ... Уххх, много чего можно ещё писать, руки устанут :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:41:41 
Ум, честь и совесть. И скромность.
Аватар пользователя

Карма: 97
Рейтинг сообщений: 2058
Зарегистрирован: Чт дек 28, 2006 08:19:56
Сообщений: 18030
Откуда: Новочеркасск
Рейтинг сообщения: 0
Медали: 2
Получил миской по аватаре (1) Мявтор 3-й степени (1)
и в течение 2 секунд каждые 10 мс выводить одно и то же на дисплей - это крутой подход, логичный вполне. не тупая же задержка...

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

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


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:42:34 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
Ну так и будет вывод соответствующей надписи else
{lcd_gotoxy(0,0);lcd_putsf(" TEST EEPROM FAILURE! ");


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:45:06 
Модератор
Аватар пользователя

Карма: 90
Рейтинг сообщений: 1289
Зарегистрирован: Чт мар 18, 2010 23:09:57
Сообщений: 4510
Откуда: Планета Земля
Рейтинг сообщения: 0
Медали: 1
Получил миской по аватаре (1)
А что за слово такое "Failure" ? :)


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: Вопросы по С/С++ (СИ)
СообщениеДобавлено: Вт окт 31, 2017 17:51:26 
Потрогал лапой паяльник
Аватар пользователя

Зарегистрирован: Чт июн 24, 2010 20:58:59
Сообщений: 375
Рейтинг сообщения: 0
Почему нежелательно инициализация где-то там и в чем минус того что она глобальная?
Почему никаких дисплеев и пищалок?

Добавлено after 2 minutes 24 seconds:
А что за слово такое "Failure" ? :)

К исполняемому коду это не имеет никакого отношения! :)

Добавлено after 1 minute 29 seconds:
и в течение 2 секунд каждые 10 мс выводить одно и то же на дисплей - это крутой подход, логичный вполне. не тупая же задержка...

Напишите как по другому...


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

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


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

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


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

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


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