Easyelectronics.ru

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

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



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

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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 548
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
Сообщения: 198
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
Сообщения: 548
Netzschlange писал(а):
... но и на логику работы не влияет.
... даже там где они не нужны.

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

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

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


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

Зарегистрирован: 19 июн 2013, 08:23
Сообщения: 66
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
Сообщения: 548
Sphynx55 писал(а):
Фигурные скобочки ставлю очень часто, так как они помогают отгораживать логически связанные части кода.

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

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

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

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

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


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3473
Откуда: Новосибирск
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
Сообщения: 66
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
Сообщения: 1188
Код:
#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
Сообщения: 1188
Код:
LOCKBITS = 0xFC;

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


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

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


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

Зарегистрирован: 08 дек 2015, 16:25
Сообщения: 5
Здравствуете.
Таймер/счетчик-1 запрограммирован "Fast PWM" 8-бит. При отладке в AVR Studio 4.18, 4.19 Т/С-1 ведет себя как "Phase correct PWM" (TCNT - счетный регистр должен при "Fast PWM" от "0" досчитать до "FF", выставить флаг переполнения, сброситься в "0" и опять до "FF"... , у меня при отладке "TCNT" от "0" считает до "FF", после от "FF" считает до "0", выставляет флаг переполнения и т.д. ...?) Пробовал и на Хрюшке и на 7-ке. В Протеусе симуляция проходит правильно. Не могу понять - или ручки кривые, или студия корявая?
В AVR Studio 5.1 - отладка проходит ровно, но на моем ноутПуке - с тормозами, и не могу при отладке регистры переименовать, так, как они в программе обозваны директивой ".def" -? :-( (вообще какую нибудь фишку придумали, чтобы переименование происходило в автоматическом-полуавтоматическом режиме :-)) Может кто знает как при отладке можно регистры переименовывать в AVR Studio 5.1?

Show


Вложения:
Комментарий к файлу: Исходник с протеусом
Fast_PWM.rar [49.18 Кб]
Скачиваний: 4
Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 115 ]  На страницу Пред.  1, 2, 3, 4, 5

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


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

Сейчас этот форум просматривают: demiurg1978


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

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

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