Обсуждаем контроллеры компании Atmel.
Ответить

Re: AVR studio в вопросах и ответах

Ср ноя 17, 2021 11:10:56

BOB51, да и в сях на таком коде должно работать.
Студия в этом плане по возможности некорректный бряк перемещает туда, где он будет корректен.
Я повторил показанный Сергеем кусок кода (картинка большая, засим под спойлером)

У меня бряк ставится на
DDRB = 0b00000001;
Но при дебаге по F11 честно перескакивает на
PORTB = 0b00000001;

Скорее всего это из-за того, что заполнение DDRB - это первая команда в Си-листинге.
Но при выполнении по F5 студия честно останавливается на присвоении PORTB.

Сергей Серебряков, попробуйте запустить дебаг (F11) и пошагово выполнить (F10/F11) вашу программу.

И да, проверьте, какие у вас настройки оптимизации и дебага.
У меня с вот такими работает:
Изображение
Вложения
dd.jpg
(60.28 KiB) Скачиваний: 839
d.jpg
(140.4 KiB) Скачиваний: 176

Re: AVR studio в вопросах и ответах

Сб ноя 20, 2021 22:28:11

В 4 студии была функция Up-Download memory чтобы в процессе отладки можно было прочитать или записать память из файла. В 7-й студии не нашёл. Как это там называется или кто как решает такой вопрос?
Вложения
up-download memory.jpg
(40.25 KiB) Скачиваний: 125

Re: AVR studio в вопросах и ответах

Вс фев 20, 2022 21:42:57

как в 7 студии, при помощи комбинации клавиш, закоментировать кусок кода ?

Re: AVR studio в вопросах и ответах

Пн фев 21, 2022 01:20:53

FreshMan, выделяете текст.
[/] на доп.клавиатуре коментит построчными // комментариями.
[*] на доп. клавиатуре комментит выделенное блочным /* комментарием */
Но если не дунуть текст не выделять - ничего не получится.

Re: AVR studio в вопросах и ответах

Пн фев 21, 2022 10:46:21

GoldenAndy, да вот не работает
выделил текст, нажал / и текст удалился
в эклипсе эта фича работает через ctrl+/, а здесь выходит ее нет ?

Re: AVR studio в вопросах и ответах

Пн фев 21, 2022 12:01:47

Работает....
Изображение

* и / - на нумпаде!
Вложения
GIF.gif
(96.58 KiB) Скачиваний: 636

Re: AVR studio в вопросах и ответах

Пн фев 21, 2022 15:58:25

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

Re: AVR studio в вопросах и ответах

Пн фев 21, 2022 16:56:08

FreshMan, не знаю.
Я это не настраивал. Просто как то тапнул по нумпаду - а оно надчало комментить. Понравилось.
Атмел Студия 7.0.634

Re: AVR studio в вопросах и ответах

Пт мар 11, 2022 00:07:34

Котаны, всем привет.

Во время отладки вывожу в окне Output некоторые переменные в прерываниях. Для этого настраиваю Action в точках останова. Но мне также дополнительно требуется выводить, сколько натикало в Cycle Counter в каждом прерывании:

Изображение

Перерыл все - не нашел (а может плохо искал). Единственное, в Visual Studio 2022 для точек останова есть функция $TICK
https://docs.microsoft.com/en-us/visual ... racepoints
Оказывается, она работает и для Microchip Studio, хотя ее нет в списке поддерживаемых функций, но, как я понял, выводит тики процессора машины, а не МК.

Может, есть обходной вариант или костыль?

Спасибо.

Re: AVR studio в вопросах и ответах

Пт апр 29, 2022 22:22:13

Доброго всем. Наверняка такой вопрос задавался, но поиском не нашел. Может ли такое быть, что Студия при оптимизации кода, заменяет 16 битную переменную на 8 битную? И как с этим бороться? переменная объявлена как uint16_t, присвоено значение 1162, декрементом должна добежать до нуля, но в Протеусе четко видно, что добегает до 907 и потом сразу падает в ноль :(

Re: AVR studio в вопросах и ответах

Пт апр 29, 2022 22:32:44

Сомневайтесь в этом утверждении (вполне вероятно, что другое), но поставьте volatile для этого случая и попробуйте.

через переводчик:
Ключевое слово volatile предназначено для предотвращения применения компилятором каких-либо оптимизаций к объектам, которые могут изменяться таким образом, который не может быть определен компилятором.

Re: AVR studio в вопросах и ответах

Пт апр 29, 2022 22:35:34

да volatile она с рождения. не помогает (

Re: AVR studio в вопросах и ответах

Пт апр 29, 2022 22:38:28

Наверное тогда другой случай. Дайте кусок кода (чтоб в темной комнате не гадать ... :) )

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 00:07:03

Land, запустите на выполнение в симуляторе студии. поставте бряк в проблемном месте и покажите нам сишный код и дизасм этого места.
ЗЫ. Возможно, дизасм вам даже без нас ответ даст, 16 бит там или 8.

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 07:41:22

проблема-то явно не в замене 16-бит на 8, 8-битная переменная не сможет до 900 добежать никак, только до 255.

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 12:22:00

проблема-то явно не в замене 16-бит на 8, 8-битная переменная не сможет до 900 добежать никак, только до 255.

счет вниз идет. Декремент.
Вот тот кусок кода:
Код:
if(count_bite > 15)
         {
            TCCR0B = 0x00;
            TIFR0 |= (1<< OCF0A)|(1 << OCF0B);
            TCCR0A &= ~(1 << WGM01);
            OCR0A = 0x00;
            TIMSK0 = 0x00;   
            TCNT0 = 0x00;
            OCR0B = 0x25; // 500Hz 0x25 для тактов   
            TIMSK0 |= (1 << OCIE0B);   
            steps = STEP;   
            if(buffer == COMMAND_OPEN)
               {
                  if(PORTB_RD(RVRS)) PORTB_ON(INA); else PORTB_OFF(INA); // реверс включен или нет
                  PORTB |= 0x02; TCCR0B |= (1 << CS02)|(0<< CS01)|(1<< CS00); // EN1 ON, EN2 OFF
               } else
                  {   
                     if(buffer == COMMAND_CLOSE)
                        {
                           if(PORTB_RD(RVRS)) PORTB_OFF(INA); else PORTB_ON(INA); // реверс включен или нет
                           PORTB |= 0x04; TCCR0B |=(1 << CS02)|(0<< CS01)|(1<< CS00); // EN1 OFF, EN2 ON
                        } else steps = 0; // для перехода к сбросу
                  }
                  
            while (steps){} // висим в цикле пока не отщелкаются все шаги
            TCCR0B = 0x00;
            TIFR0 |= (1<< OCF0A)|(1 << OCF0B);
            TIMSK0 = 0x00;
            PORTB &= ~0x19; // ~(1 << INA)|(1 << EN1)|(1 << EN2)
            flag = RST;
         }

строка while (steps){} . В протеусе слежу за значением steps в окне
переменная steps глобальная volatile uint16_t steps = STEP; Ей присваивается значение STEP = 1162. В прерывании таймера step декрементируется:
Код:
ISR(TIM0_COMPB_vect)
{
   PORTB ^= (1 << EN1)|(1 << EN2);
   if(!i) {PORTB_XOR(INA); i = 2;} else;
   i--;
   --steps;
   TCNT0 = 0;
}

в дизасемблере присвоение значения выглядит так (1162 = 0x048A):
Код:
            steps = STEP;   
000000CD  LDI R20,0x8A      Load immediate
--- D:\FIRMWARE\ATMEL\Jalousie_NEW\Driver\Driver\Debug/.././main.c ----------
000000CE  LDI R21,0x04      Load immediate 
00000143  STS 0x0062,R21      Store direct to data space
00000145  STS 0x0061,R20      Store direct to data space

а декремент в прерывании уже так:
Код:
   --steps;
0000003F  LDS R24,0x0061      Load direct from data space
00000041  LDS R25,0x0062      Load direct from data space
00000043  SBIW R24,0x01      Subtract immediate from word
00000044  STS 0x0062,R25      Store direct to data space
00000046  STS 0x0061,R24      Store direct to data space

и, если я правильно понимаю, как-то так цикл while (steps){}
Код:
00000163  STS 0x0062,R1      Store direct to data space
00000165  STS 0x0061,R1      Store direct to data space
00000167  LDS R24,0x0061      Load direct from data space
00000169  LDS R25,0x0062      Load direct from data space
0000016B  OR R24,R25      Logical OR
0000016C  BRNE PC-0x05      Branch if not equal


вроде как и все правильно :dont_know: Может это глюк протеуса?
Только почему Студия последовательно два значения в один регистр пихает?
00000163 STS 0x0062,R1 Store direct to data space
00000165 STS 0x0061,R1 Store direct to data space
типа 16-ти разрядное значение загрузили:
Синтаксис: Операнды: Счётчик команд:
(i) STS k16, Rr 0 ≤ r ≤ 31, 0 ≤ k ≤ 65535 PC ← PC + 2

Добавлено after 1 hour 23 minutes 58 seconds:
Land, запустите на выполнение в симуляторе студии. поставте бряк в проблемном месте и покажите нам сишный код и дизасм этого места.
ЗЫ. Возможно, дизасм вам даже без нас ответ даст, 16 бит там или 8.

А в Студии все работает :shock: С 950 шагов до 890 прошел нормально. И кому верить? Протеусу или Студии?

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 13:04:07

На "живой конструкции" нельзя попробовать? Напр. светодиод привязан к флагу, или флаг -> к дисплея и т.н. А нет двух свободных пинов для флаг-контроля через модуль rx/tx и UART с визуализации к компу? Так эти туманные вопросы (цитат: "И кому верить? Протеусу или Студии?"), часто граничащие со слухами, легендами и т.п. непроверенные утверждения, то будут устранены. Или код разрабатываться только "на бумаге" (и на симуляторе)?

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

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 13:41:38

veso74, можно конечно в железе посмотреть. Печаль в том, что собственно этот кусок в железе тестировался и все крутилось. Правда с меньшим числом шагов, может я и не заметил проблемы. А ног свободных нет, это в 13-й тиньке сидит. Ок, значит надо будет опять проводочки паять )

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 18:40:43

Код:
ISR(TIM0_COMPB_vect)
...
   --steps;
   TCNT0 = 0;
...

Наверное, так делать не стОит.

Re: AVR studio в вопросах и ответах

Сб апр 30, 2022 19:38:03

Код:
00000163  STS 0x0062,R1      Store direct to data space
00000165  STS 0x0061,R1      Store direct to data space
00000167  LDS R24,0x0061      Load direct from data space
00000169  LDS R25,0x0062      Load direct from data space
0000016B  OR R24,R25      Logical OR
0000016C  BRNE PC-0x05      Branch if not equal


вроде как и все правильно :dont_know: Может это глюк протеуса?
Только почему Студия последовательно два значения в один регистр пихает?
00000163 STS 0x0062,R1 Store direct to data space
00000165 STS 0x0061,R1 Store direct to data space


В AVR GCC регистр R1 всегда содержит ноль. В функции компилятор не видит измений переменной steps и поэтому присваивает ей ноль, соответственно ваш цикл ожидания не отрабатывает. Добавьте volatile к определению переменной steps, это должно помочь. Другой подводный камень - прерывание может случиться между 00000167 и 00000169 и это тоже может привести к сбоям.
Ответить