Easyelectronics.ru

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

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



    • JLCPCB - Платы прототипов всего за 2$ c бесплатной доставкой (при первом заказе)
    • 10 PCBs за $2 для 2 слоев, $15 для 4 слойной, $74 для 6 слойной платы.
    • Крупнейший китайский производитель прототипных плат. 290000+ клиентов & 8000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин радиодеталей.

Начать новую тему Ответить на тему  [ Сообщений: 107 ]  На страницу Пред.  1, 2, 3, 4, 5
Автор Сообщение
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 17 янв 2018, 00:42 
Только пришел

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 23
Netzschlange писал(а):
Относительно верю (ещё раз повторю -- всю логику не смотрел). Переменная 'mc_cr_src' используется в качестве ключа для 'switch', А переменная 'temp' локальная внутри определённого 'case'. Если в кавычки '{}' не включить, то область видимости выйдет за пределы 'case', в котором объявлена переменная.

Да её вообще в начале функции определить и инициализировать, а в самом конце return temp. По логике просто менять её значение.

Netzschlange писал(а):
У default оператор break не нужен. default всегда располагается последним в switch.

Кто это его обязал последним располагать? Так то и у case break не обязателен, если логика работы это подразумевает.
А вот break после return это просто глаз режет.

Netzschlange писал(а):
Здесь Вы слишком заблуждаетесь.

А большое начинается с малого :) Ну не верю я в "чистые порывы" в данном случае.

Я вообще, даже для AVR, а для ARM и сам Бог велел, предпочитаю ООП использовать. В первую очередь, инкапсуляция данных внутри класса. Вся работа с данными через методы класса и никакой свалки глобальных переменных. Контроль данных на диапазоны при обращении к ним через методы. Инициализация данных в конструкторах. Всё это сильно повышает качество кода. Наследование и полиморфизм, конечно, могут попортить жизнь, но зато интересно, не тупое кодерство. Ценители "чистого выхлопа" проходят мимо, а то я им про виртуальные методы на 8-битках расскажу :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 17 янв 2018, 08:41 
Заглядывает иногда

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 174
VladislavS писал(а):
Кто это его обязал последним располагать?

Ни кто. Не много подзабыл некоторые детали спецификации языка.
VladislavS писал(а):
Так то и у case break не обязателен, если логика работы это подразумевает.
А вот break после return это просто глаз режет.

В каком то смысле Вы правы. break, конечно, после return ни какого смысла не имеет, но и на логику работы не влияет.
VladislavS писал(а):
А большое начинается с малого :) Ну не верю я в "чистые порывы" в данном случае.

У каждого "свои тараканы в голове". Мои "тараканы" -- это ставить скобки (простые, фигурные), даже там где они не нужны.
VladislavS писал(а):
Ценители "чистого выхлопа" проходят мимо, а то я им про виртуальные методы на 8-битках расскажу :)

А вот виртуальные методы в 8-мибитных AVR лучше не использовать. Не знаю как там с другими компиляторами, но при использовании avr-gcc это приводит к бесполезному перерасходу оперативной памяти, которой и так "кот наплакал".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 17 янв 2018, 10:33 
Только пришел

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 23
Netzschlange писал(а):
... но и на логику работы не влияет.
... даже там где они не нужны.

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

Netzschlange писал(а):
А вот виртуальные методы в 8-мибитных AVR лучше не использовать. Не знаю как там с другими компиляторами, но при использовании avr-gcc это приводит к бесполезному перерасходу оперативной памяти, которой и так "кот наплакал".

Естественно, зато ценителей "чистого выхлопа" постебать можно :)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 17 янв 2018, 19:27 
Заглядывает иногда

Зарегистрирован: 19 июн 2013, 08:23
Сообщения: 57
Show

На самом деле все было так:
У меня было объявлено несколько функций которые связаны с вводом-выводом.
Все они зависят от параметра mc_cr_src.
Чтобы можно было скомпилировать и проверить готовые части кода написал такую "заглушку" для всех функций
Код:
switch(mc_cr_src){
      case cr_src_usart: {} break;
      default : {}
   }

Под говнокодом (быдлокодом) я подразумеваю неэффективный код или код с ошибками.
Фигурные скобочки ставлю очень часто, так как они помогают отгораживать логически связанные части кода.
Вы назвали такой код говном, но не привели никаких аргументов, почему и как скобочки ухудшают код.
Не знаю правы вы или нет, но ваше замечание воспринимаю как выкрики религиозного фанатика.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 17 янв 2018, 23:22 
Только пришел

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 23
Sphynx55 писал(а):
Фигурные скобочки ставлю очень часто, так как они помогают отгораживать логически связанные части кода.

Netzschlange, вот видите, ограничивает область видимости, ага :) Не тот случай.

Sphynx55 писал(а):
Вы назвали такой код говном, но не привели никаких аргументов, почему и как скобочки ухудшают код.

Скобки - меньшее из того что мне не понравилось.

Sphynx55 писал(а):
Не знаю правы вы или нет, но ваше замечание воспринимаю как выкрики религиозного фанатика.

Вы абсолютно правы, ваши грабли, вам по ним и ходить.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 18 янв 2018, 09:42 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3429
Откуда: Новосибирск
Sphynx55 писал(а):
Не знаю правы вы или нет, но ваше замечание воспринимаю как выкрики религиозного фанатика.

Давайте включим голый практицизм.
Код:
void func (void)
{
   static u08 _func;

   switch (_func)
   {
      case 0: // Init
         // bla-bla
         // bla-bla
         _func = 1;
         break;

      case 1:
         if (flag & (1<<0))
         {
            // bla-bla
            // bla-bla
            _func = 2;
         }
         break;

      case 2: // Init
         // bla-bla
         // bla-bla
         _func = 1;
         break;
   }
}

Все прекрасно читается, лишние скобки не засоряют код. можно и так:
Код:
void func (void)
{
   static u08 _func;

   switch (_func)
   {
      case 0: sub_func_1 (); break;
      case 1: sub_func_2 (); break;
      case 2: sub_func_3 (); break;
   }
}

#pragma inline = forced // В разных компиляторах разные ключи.
void sub_func_1 (void)
{
// bla-bla
}

#pragma inline = forced // В разных компиляторах разные ключи.
void sub_func_2 (void)
{
// bla-bla
}

#pragma inline = forced // В разных компиляторах разные ключи.
void sub_func_3 (void)
{
// bla-bla
}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 24 янв 2018, 19:48 
Заглядывает иногда

Зарегистрирован: 19 июн 2013, 08:23
Сообщения: 57
Show

Первый вариант ничего не делает и уже размазан на пол страницы, мне так не удобно.
Второй вариант очень хороший, приятно читать такой код, но по описанию похож на сферического коня в вакууме.
Я как новичок только убедился что, лично мне, скобочки нужны. Попался дважды на глупых ошибках.
Косяки связаны с тем что приоритеты операций, хоть и жестко прописаны в стандарте, для меня не всегда очевидны.
Первый косяк:
Код:
не работает:
eeprom_seq_write_start(mc_file.l_block<<8+mc_file.count);
работает:
eeprom_seq_write_start((mc_file.l_block<<8)+mc_file.count);

Второй косяк: код вместе с if{} полностью выкидывался.
Код:
не работает:
if((uint8_t)eep_addr&eep_blk_msk==0){...}
работает:
if(((uint8_t)eep_addr&eep_blk_msk)==0){...}


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

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


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

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


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

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

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