реклама на сайте
подробности

 
 
> отладка кода в AVRStudio
megaboy
сообщение Nov 7 2008, 23:12
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 34
Регистрация: 30-10-07
Пользователь №: 31 885



Существует такая проблема, уменьшающая наглядность при отладке С кода,
скомпилированного в WinAVR - почему то курсор не хочет пошагово ходить по некоторым строкам
кода, например тогда, когда ф-ия в результате оптимизация стала инлайновой.
К тому же, эти строки еще и не отображаются в окне дизасемблера, чтобы хоть как то разобраться...
Вот, к примеру, пример:
С код
Код
        if(pc_fifo.char_cnt)
        {
            send_sim(pop_buffer(&pc_fifo));
        }
        if(sim_fifo.char_cnt)
        {
            send_pc(pop_buffer(&sim_fifo));
        }

Дизасм окно
Код
140:              if(pc_fifo.char_cnt)

+00000365:   91400286    LDS     R20,0x0286       Load direct from data space
+00000367:   91500287    LDS     R21,0x0287       Load direct from data space
+00000369:   1541        CP      R20,R1           Compare
+0000036A:   0551        CPC     R21,R1           Compare with carry
+0000036B:   F1B1        BREQ    PC+0x37          Branch if equal
+0000036C:   91200284    LDS     R18,0x0284       Load direct from data space
+0000036E:   91300285    LDS     R19,0x0285       Load direct from data space
+00000370:   91800282    LDS     R24,0x0282       Load direct from data space
+00000372:   91900283    LDS     R25,0x0283       Load direct from data space
+00000374:   1728        CP      R18,R24          Compare
+00000375:   0739        CPC     R19,R25          Compare with carry
+00000376:   F411        BRNE    PC+0x03          Branch if not equal
+00000377:   E0E0        LDI     R30,0x00         Load immediate
+00000378:   C023        RJMP    PC+0x0024        Relative jump
+00000379:   91E0027E    LDS     R30,0x027E       Load direct from data space
+0000037B:   91F0027F    LDS     R31,0x027F       Load direct from data space
+0000037D:   0FE2        ADD     R30,R18          Add without carry
+0000037E:   1FF3        ADC     R31,R19          Add with carry
+0000037F:   81E0        LDD     R30,Z+0          Load indirect with displacement
+00000380:   5F2F        SUBI    R18,0xFF         Subtract immediate
+00000381:   4F3F        SBCI    R19,0xFF         Subtract immediate with carry
+00000382:   93300285    STS     0x0285,R19       Store direct to data space
+00000384:   93200284    STS     0x0284,R18       Store direct to data space
+00000386:   91800280    LDS     R24,0x0280       Load direct from data space
+00000388:   91900281    LDS     R25,0x0281       Load direct from data space
+0000038A:   1728        CP      R18,R24          Compare
+0000038B:   0739        CPC     R19,R25          Compare with carry
+0000038C:   F421        BRNE    PC+0x05          Branch if not equal
+0000038D:   92100285    STS     0x0285,R1        Store direct to data space
+0000038F:   92100284    STS     0x0284,R1        Store direct to data space
+00000391:   91800288    LDS     R24,0x0288       Load direct from data space
+00000393:   7F8E        ANDI    R24,0xFE         Logical AND with immediate
+00000394:   93800288    STS     0x0288,R24       Store direct to data space
+00000396:   5041        SUBI    R20,0x01         Subtract immediate
+00000397:   4050        SBCI    R21,0x00         Subtract immediate with carry
+00000398:   93500287    STS     0x0287,R21       Store direct to data space
+0000039A:   93400286    STS     0x0286,R20       Store direct to data space
+0000039C:   93E000C6    STS     0x00C6,R30       Store direct to data space
+0000039E:   918000C0    LDS     R24,0x00C0       Load direct from data space
+000003A0:   FF85        SBRS    R24,5            Skip if bit in register set
+000003A1:   CFFC        RJMP    PC-0x0003        Relative jump

144:              if(sim_fifo.char_cnt)

А куда же делось это? 07.gif
{
send_sim(pop_buffer(&pc_fifo));
}


Вопрос собственно, можно ли где то настроить, либо в Студии либо в WinAVR чтобы
пошаговая отладка работала для всех строк С кода или, на крайняк, чтобы все строки
С кода отображались в окне дизасма?

Сообщение отредактировал megaboy - Nov 7 2008, 23:16
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
Artem_Petrik
сообщение Nov 8 2008, 13:12
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 443
Регистрация: 22-07-06
Из: Украина, г. Харьков
Пользователь №: 19 006



Цитата(Qwertty @ Nov 8 2008, 13:06) *
Может. Например запись в еепром или отключение ватчдога с отключенной оптимизацией могут вообще не произойти. Просто не уложитесь во временной интервал. Еще при отключенной оптимизации программа может просто не влезть в кристалл. Соответственно вообще не будет работать, что явно отличается от ситуации со включенным оптимизатором. smile.gif


Все это так, да не совсем так. Действительно в некоторых случаях оптимизация может наоптимизировать так, что timed sequence сброса вачдога, записи в EEPROM, смены предделителя тактовой и т.д. перестанет работать. Или наоборот начнет. Сам с таким несколько раз сталкивался. Но специально для этого практически всегда среда разработки представляет набор (часто инлайновых) функций, использование которых гарантирует, что все будет нормально. В используемом мною IAR-е это все есть, и насколько я могу судить по обсуждениям на этом форуме - в WinAVR(GCC) тоже.
Даже в случае, если нет - такие участки легко реализуются ассемблерными вставками, либо подпрограммками, написанными полностью на асме. Все эти моменты всегда платформеннозависимы, и их совсем немного, поэтому использование ассемблера здесь - не криминально даже с точки зрения убежденных сишников.
Конечно же сущесвует много способов написать программу которая при разных уровнях оптимизации будет выдавать различные результаты. Непоставленные в нужном месте volatile могут преподнести много сюрпризов для начинающего. Код написанный таким образом не может считаться правильным. Правильный же код работоспособен при любом уровне оптимизации. Варьируется только скорость его выполнения и размер.
На случай разного рода задержек (где скорость выполнения - главное), также имеются готовые функции, гарантирующие время задержки.

Что касается watchdog-а, то включать его на этапе хождения по программе "по шагам" - вообще не самая лучшая идея. Сам я включаю его только после того, как программа полностью отлажена и работоспособна.
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Nov 8 2008, 16:39
Сообщение #3


Местный
***

Группа: Свой
Сообщений: 408
Регистрация: 21-10-06
Из: Санкт-Петербург
Пользователь №: 21 527



Цитата(Artem_Petrik @ Nov 8 2008, 16:12) *
Но специально для этого практически всегда среда разработки представляет набор (часто инлайновых) функций, использование которых гарантирует, что все будет нормально. В используемом мною IAR-е это все есть, и насколько я могу судить по обсуждениям на этом форуме - в WinAVR(GCC) тоже.

Стандартные функции часто не устраивают и приходится делать самописные.
Цитата(Artem_Petrik @ Nov 8 2008, 16:12) *
На случай разного рода задержек (где скорость выполнения - главное), также имеются готовые функции, гарантирующие время задержки.

В avr-libc функции задержки при отключенной оптимизации вообще не работоспособны. Более того, при желании их использования велика вероятность превысить размер памяти программ. Особенно актуально для мелких кристаллов типа М8.
Цитата(Artem_Petrik @ Nov 8 2008, 16:12) *
Что касается watchdog-а, то включать его на этапе хождения по программе "по шагам" - вообще не самая лучшая идея.

Это был просто абстрактный пример.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- megaboy   отладка кода в AVRStudio   Nov 7 2008, 23:12
- - Artem_Petrik   Чтобы все максимально правдоподобно отображалось, ...   Nov 7 2008, 23:34
|- - _Pasha   Цитата(Artem_Petrik @ Nov 8 2008, 02:34) ...   Nov 8 2008, 07:39
||- - megaboy   Цитата(_Pasha @ Nov 8 2008, 09:39) Но луч...   Nov 8 2008, 08:17
||- - Qwertty   Цитата(megaboy @ Nov 8 2008, 11:17) Будьт...   Nov 8 2008, 09:06
|- - Foris   Цитата(Artem_Petrik @ Nov 8 2008, 02:34) ...   Nov 10 2008, 05:08
|- - Непомнящий Евгений   Цитата(Foris @ Nov 10 2008, 09:08) Ну и с...   Nov 10 2008, 07:42
|- - TechMike   Цитата(Непомнящий Евгений @ Nov 10 2008, 10...   Nov 11 2008, 13:09
- - megaboy   Из вышесказанного можно сделать вывод, что пошагов...   Nov 8 2008, 12:06
|- - xemul   Цитата(megaboy @ Nov 8 2008, 15:06) Из вы...   Nov 8 2008, 19:48
- - SasaVitebsk   Я работаю в IAR, поэтому могут быть отличия. Но вс...   Nov 9 2008, 17:11
|- - _Pasha   Цитата(SasaVitebsk @ Nov 9 2008, 20:11) У...   Nov 9 2008, 19:48
- - megaboy   Просто для эффективной отладки, я так понимаю, нео...   Nov 9 2008, 23:23
- - TechMike   Просьба ткнуть в доку/статью по правильному написа...   Nov 10 2008, 07:29
- - Artem_Petrik   Цитата(Foris @ Nov 10 2008, 09:08) Ну и с...   Nov 10 2008, 07:36
- - Aleksandr Baranov   ИМХО: Если "Код без оптимизации не укладывает...   Nov 10 2008, 15:33
- - Qwertty   Цитата(Aleksandr Baranov @ Nov 10 2008, 18...   Nov 10 2008, 15:41
- - SasaVitebsk   Цитата(Aleksandr Baranov @ Nov 10 2008, 19...   Nov 11 2008, 09:46


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 04:30
Рейтинг@Mail.ru


Страница сгенерированна за 0.01426 секунд с 7
ELECTRONIX ©2004-2016