Easyelectronics.ru

Электроника для всех
Текущее время: 25 май 2018, 17:38

Часовой пояс: 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
СообщениеДобавлено: 14 янв 2018, 13:46 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Лично я считаю, что в данный момент вы ерундой страдаете. Вам не нравится выхлоп компилятора? Либо переходите на асм, либо пробуйте варианты, при которых выхлоп приемлем. Не идеален, но приемлем. Если не нравится, читай выше.
И да, IAR дает более оптимизированный выхлоп.


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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
На самом деле, на начальном этапе изучения стоит подсматривать за выхлопом компилятора, чтобы прочувствовать во что в итоге выливается тот или иной код. Ну а в повседневной работе - либо задача решена, тогда всё равно что там внутри, либо нет. Если нет, то можно кое-где помочь компилятору тем или иным способом вплоть до асмомарания.

Ни в коем случае не хочу развивать IAR vs GCC, но я не верю, что в 2018 году сборка uint16_t из двух uint8_t может дать что-то отличное от пересылки байт. Я всё же хотел бы посмотреть на определение mc_file в версии Sphynx55. Закралось у меня одно сомнение... :)


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

Зарегистрирован: 19 июн 2013, 08:23
Сообщения: 57
Код:
struct mcu_file_ptr {
   uint8_t status;
   uint8_t block;
   uint8_t l_block;
   uint16_t count;
   uint16_t size;
};

struct mcu_file_ptr mc_file;

uint8_t eeprom_seq_read_byte();


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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
Ну вроде всё честно, я уж было подумал где-то знаковое целое проскочило.


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

Зарегистрирован: 06 фев 2011, 15:16
Сообщения: 611
Откуда: Челябинск
Sphynx55 писал(а):
Не понимаю к чему ваши примеры. У меня AVR Studio и GCC, он не понимает __flash;
У меня не получается нормально склеить из 2ух uint8_t один uint16_t.
Простой способ uint16_t=(uint8_t<<8)|uint8_t; дает слишком плохой код.
Код:
uint8_t *t_ptr = &mc_file.size;
*t_ptr = eeprom_seq_read_byte();
*(t_ptr+1) = eeprom_seq_read_byte();

Дает хороший код, но очень неудобно все это писать и можно легко ошибиться.
Так как правильно их объединить ?

А чего именно вы хотите: иметь эффективный код или код без ошибок?
PS: В любом случае советую попробовать IAR.


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

Зарегистрирован: 15 янв 2018, 17:18
Сообщения: 11
Доброго времени суток! Ребят, помогите. был не большой опыт в программировании на асме. пользовался avr studio 4. тут решил тряхнуть стариной, но решил попробовать пописать на С. тут начались проблемы... написал кусочек и решил подебажить. вот тут у меня голова то и припухла. никак не пойму как работает код. ткните носом где я не правильно делаю?
Задача: попихать байты в буфер. по приведенному коду массив заполняется, но переменные не меняются. пробовал на С, С++, на разных версиях - результат одинаков. думается что как-то не правильно написано


Вложения:
Безымянный2.jpg
Безымянный2.jpg [ 209.02 Кб | Просмотров: 706 ]
Безымянный.jpg
Безымянный.jpg [ 118.04 Кб | Просмотров: 706 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 15 янв 2018, 19:47 
Заглядывает иногда

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
rmb, рано вам ещё применять структуры, функции и тем более указатели. Начните с операторов if, for и while. Приучите себя инциализировать переменные.


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

Зарегистрирован: 19 июн 2013, 08:23
Сообщения: 57
Добрый вечер, наткнулся на очередные грабли.
После включения оптимизации О2 решил проверить другие части кода и обнаружил что
контроллер не реагирует на USART. При оптимизации O1 все работает нормально.
При отладке нашел где контроллер виснет.
Функция получения символа:
Код:
char mc_cr_getchar()
{
   switch(mc_cr_src){
      case cr_src_usart:{
         char temp;
         while(MCU_RX_Get(&temp)){
            mc_core_stat = cr_wait ;
            asm("sleep");
            mc_core_stat = cr_busy ;
         }
         if (temp==';')mcu_com_task();
         return temp;
      } break;
      default : {}
   }
}

Снова та же трабла со слипом, получется бесконечный цикл:
000003BD SLEEP Sleep
000003BE RJMP PC-0x0001 Relative jump
Объявил функцию volatile uint8_t MCU_RX_Get(char *data); но эффекта не дало.


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

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 580
VladislavS писал(а):
Sphynx55 писал(а):
У меня AVR Studio и GCC, он не понимает __flash;

Там это как-то по другому объявляется. У AVR есть FLASH и размещать в ней данные компилятор должен уметь.

Давнно уже понимает. Только недавно писали где-то в соседней ветке: https://gcc.gnu.org/onlinedocs/gcc/Name ... paces.html
А так в avr-libc есть макрос PROGMEM.


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

Зарегистрирован: 15 янв 2018, 17:18
Сообщения: 11
VladislavS писал(а):
rmb, рано вам ещё применять структуры, функции и тем более указатели. Начните с операторов if, for и while. Приучите себя инциализировать переменные.

=))) не, ну я конечно "зеленый", но не до такой же степени.
по логике код, представленный выше должен работать. но он не работает(работает не корректно). вот просил спецов подсказать. так что вопрос все еще открыт


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
VladislavS писал(а):
rmb, рано вам ещё применять структуры, функции и тем более указатели. Начните с операторов if, for и while. Приучите себя инциализировать переменные.

caxapa.ru - единственный форум, где мне дали неплохое начало, что по асму, что по си. Я старался с совсем тупыми вопросами не лезть, только в случае, когда исчерпал все варианты. Bill, кстати, очень неплохо тогда помогал. На этом форуме почему-то другая картина.

Код:
//========================================================================
struct my_struct_t
{
   u08 buffer [10];
   u08 StInd;
   u08 EndInd;
} my_struct_t;

struct my_struct_t my_struct;

void main (void)
{
   for (u08 i = 0; i < 10; i++)
      my_struct. buffer [i] = 0x55;

   u08 *ptr = my_struct. buffer;

   for (u08 i = 0; i < 10; i++)
      *ptr++ = 0xAA;   

   while (1)
   {
      DDRA ^= (1<<0);
   }
}
//========================================================================


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

Зарегистрирован: 15 янв 2018, 17:18
Сообщения: 11
тут все ясно - даже дебажить не надо. в моем случае я, с заполнением массива меняю(пытаюсь поменять) другую переменную в структуре, но она не меняется. и вот тут я не пойму почему. пока я не разберусь в чем дело даже пытаться что-то дальше писать нет никакого смысла


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Не надо полностью цитировать сообщения. Зачем засорять форум?
Show


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

Зарегистрирован: 15 янв 2018, 17:18
Сообщения: 11
Вот покопался, нашел IAR. тот же код абсолютно нормально работает. ну и что это было? мне что-то не хочется в IAR'е работать - чет мне он не приглянулся.


Вложения:
Безымянный.jpg
Безымянный.jpg [ 187.61 Кб | Просмотров: 665 ]
Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: AVR Studio
СообщениеДобавлено: 16 янв 2018, 00:19 
Старожил

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Лично я перематерился в студии на си писать. Выхлоп крайне ужасен. Переполз на IAR. Доволен всем, выхлопом, удобством.
Пример выхлопа в студии:
Show


Это голимый пистец!


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

Зарегистрирован: 15 янв 2018, 17:18
Сообщения: 11
это мое первое впечатление от IAR'a. будем попробовать поработать может понравиться.


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

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

Show


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Настройка IAR.


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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
rmb писал(а):
=))) не, ну я конечно "зеленый", но не до такой же степени.

Ну, судя по скриншотам, до такой :(

rmb писал(а):
по логике код, представленный выше должен работать. но он не работает(работает не корректно).

Не должен он работать. В вечном цикле улетаете за пределы массива. Неужели этого не видно?

rmb писал(а):
вот просил спецов подсказать. так что вопрос все еще открыт

К сожалению, это ваши грабли, и пока об них шишку не набьёте, толку не будет.

rmb писал(а):
Вот покопался, нашел IAR. тот же код абсолютно нормально работает. ну и что это было? мне что-то не хочется в IAR'е работать - чет мне он не приглянулся.

Ну где же он работает? Точно так же по памяти долбанули. На скриншоте в отладчике разве не видно?


Последний раз редактировалось VladislavS 16 янв 2018, 01:20, всего редактировалось 1 раз.

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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
VladislavS писал(а):
К сожалению, это ваши грабли, и пока об них шишку не набьёте, толку не будет.

Практика - мерило истины...


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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
demiurg1978 писал(а):
Это голимый пистец!

Можно с аргументами что вам тут не нравится? Раскрученный цикл? Так сами оптимизацию по скорости пойди поставили?


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

Зарегистрирован: 13 янв 2018, 21:36
Сообщения: 127
Sphynx55 писал(а):
Добрый вечер, наткнулся на очередные грабли..

Ваши грабли не настолько очевидные как у rmb, но объяснимые.
Sphynx55 писал(а):
После включения оптимизации О2 решил проверить другие части кода и обнаружил что
контроллер не реагирует на USART. При оптимизации O1 все работает нормально.

Если включение оптимизации делает код нерабочим, то это верный признак ошибки. Поверьте, в 2018 году в компиляторах дла AVR практически нет ошибок, на которые вы можете со сколь либо ненулевой вероятностью нарваться. Это ваши грабли. Думается мне, что компилятор решил, что функция MCU_RX_Get(&temp) всегда true возвращает, вот и зациклил выкинув ненужное. Почему он так решил? Ищите. Глобальная переменная, изменяемая в прерывании без volatile есть?


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Я пробовал разные варианты оптимизации. У студии есть такое, пока не прибьешь гвоздями, хер нормальный выхлоп получишь. Я заколебался бодаться, пробовать варианты, удовлетворяющие меня. Особенно меня выбесил выхлоп работы с flash и EEPROM. Попробовал поработать в IAR, результат меня более чем удовлетворил и я не задумываясь переполз на IAR.


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

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

Повторю вопрос, что вас не удовлетворило в примере выше?


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

Зарегистрирован: 25 фев 2011, 18:45
Сообщения: 3463
Откуда: Новосибирск
Повторяю, у студии меня не удовлетворяет выхлоп. Точка. И не только в этом примере. Чтобы получить примлемый выхлоп, нужно перебрать кучу вариантов для каждого чиха. В итоге львиная доля времени уходит на перебор вариантов.


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

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


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

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


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

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

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