Easyelectronics.ru • Просмотр темы - AVR Studio

Easyelectronics.ru

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

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



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 334
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
Сообщения: 196
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
Сообщения: 334
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
Сообщения: 334
Sphynx55 писал(а):
Фигурные скобочки ставлю очень часто, так как они помогают отгораживать логически связанные части кода.

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

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

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

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

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


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3465
Откуда: Новосибирск
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){...}


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 10 июн 2018, 11:26 
Здравствуйте!

Зарегистрирован: 10 июн 2018, 11:06
Сообщения: 1
У меня возникла проблема с extern в AtmeStudio 7. Т.е. у меня есть три файл, условно

первый test.c

#include "test.h"
void function (void)
{ to do something;}

второй test.h

#ifndef test_H
#define test_H

extern void function(void);

#endif

третий main.c
#include "test.h"
......

function();

.........


Компилятор выдает мне ошибку, что function не определена (undefined reference to 'function'). В чем может быть ошибка? Заранее спасибо за ответ!


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

Зарегистрирован: 24 сен 2013, 16:06
Сообщения: 2
shant писал(а):
У меня возникла проблема с extern в AtmeStudio 7. Т.е. у меня есть три файл, условно

первый test.c

#include "test.h"
void function (void)
{ to do something;}

второй test.h

#ifndef test_H
#define test_H

extern void function(void);

#endif

третий main.c
#include "test.h"
......

function();

.........


Компилятор выдает мне ошибку, что function не определена (undefined reference to 'function'). В чем может быть ошибка? Заранее спасибо за ответ!

Следует сделать так:
первый test.c

#include "test.h"
void function (void)
{ to do something;}

второй test.h

#ifndef test_H
#define test_H

void function(void); // Это объявление функции относится к определению функции в файле test.c

#endif

третий main.c
#include "test.h"
extern void function(void); // Здесь указывается, что определение функции находится в другом файле (test.c)
......


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

Зарегистрирован: 31 окт 2017, 20:17
Сообщения: 4
Привет всем. Подскажите кто знает, как сделать,чтобы значение фьюзов и лок-бит сохранилось в elf файле. Задолбало каждый раз зашивать... Пользуюсь 7-й студией.


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 867
Код:
#include <avr/io.h>
...
FUSES =
{
   .high = 0xDD,
   .low  = 0xFD
};


https://www.nongnu.org/avr-libc/user-ma ... _fuse.html


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

Зарегистрирован: 31 окт 2017, 20:17
Сообщения: 4
А локбиты LOCKBIT ={…}; ?


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 867
Код:
LOCKBITS = 0xFC;

https://www.microchip.com/webdoc/AVRLib ... _lock.html


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

Зарегистрирован: 31 окт 2017, 20:17
Сообщения: 4
Спасибо огромное


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

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


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

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


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

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

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