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

 
 
> отладка кода в 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
2 страниц V  < 1 2  
Start new topic
Ответов (15 - 19)
Непомнящий Евген...
сообщение Nov 10 2008, 07:42
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 771
Регистрация: 16-07-07
Из: Волгодонск
Пользователь №: 29 153



Цитата(Foris @ Nov 10 2008, 09:08) *
Ну и совет ! Это будет ДРУГОЙ код и его тоже нужно отлаживать.


Ключевое слово тут - ПРАВИЛЬНО НАПИСАННОГО. Если код написан правильно - он корректен при любой оптимизации (и после компиляции на любом корректном компиляторе wink.gif )

Не так это может быть в ситуациях:
1. Код без оптимизации не укладывается в размер флэша
2. Код без оптимизации не проходит по времени
3. Программные задержки
4. Железно-специфичные вещи типа вачдога

В случаях 1 и 2 ничего сделать наверное нельзя (кроме отладки по кускам). Программные задержки - это обычно зло, там где критична их точность часто имеет смысл перейти на таймеры. Случаи 4 выносятся в отдельные модули или пишутся на асме.

Цитата(TechMike @ Nov 10 2008, 11:29) *
Просьба ткнуть в доку/статью по правильному написанию кода для под AVRStudio+WinAVR(GCC).


Попробуйте поискать в этом форуме по слову volatile. Была масса обсуждений. Часто грабли связаны именно с отсутствием этого квалификатора.
Go to the top of the page
 
+Quote Post
Aleksandr Barano...
сообщение Nov 10 2008, 15:33
Сообщение #17


Частый гость
**

Группа: Участник
Сообщений: 169
Регистрация: 31-08-05
Из: New York
Пользователь №: 8 118



ИМХО: Если "Код без оптимизации не укладывается в размер флэша", значит неверно выбран микроконтроллер.


--------------------
ASB
Go to the top of the page
 
+Quote Post
Qwertty
сообщение Nov 10 2008, 15:41
Сообщение #18


Местный
***

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



Цитата(Aleksandr Baranov @ Nov 10 2008, 18:33) *
ИМХО: Если "Код без оптимизации не укладывается в размер флэша", значит неверно выбран микроконтроллер.

Скорее верно обратное. На небольших проектах оптимизатор способен сократить размер в два-три раза.
Go to the top of the page
 
+Quote Post
SasaVitebsk
сообщение Nov 11 2008, 09:46
Сообщение #19


Гуру
******

Группа: Свой
Сообщений: 2 712
Регистрация: 28-11-05
Из: Беларусь, Витебск, Строителей 18-4-220
Пользователь №: 11 521



Цитата(Aleksandr Baranov @ Nov 10 2008, 19:33) *
ИМХО: Если "Код без оптимизации не укладывается в размер флэша", значит неверно выбран микроконтроллер.

Ну не всегда. Вот живой пример.
Недавно отлаживал бутлоадер для кристаллов 8к. Размер должен был уложится в 1к. Где-то на финише хотел проверить правильность расчёта константы (макро+формулы). А соотнести оператор с асмом было сложновато за счёт максимальной оптимизации. Выключил оптимизацию (на константу - явно не влияет). Толку нет, так как код не влазит и результирующего файла нет. sad.gif

Плюнул - поискал прямо по листингу - нашёл практически сразу.

Вообще знание ассемблера однозначно помогает. Это справедливо для любого кристалла. Будь то AVR либо ARM. Да и вообще, любые дополнительные знания приносят только пользу. Вот только человек ограничен. Физически, умственно, по-времени, по-желаниям... smile.gif
Go to the top of the page
 
+Quote Post
TechMike
сообщение Nov 11 2008, 13:09
Сообщение #20


Частый гость
**

Группа: Свой
Сообщений: 130
Регистрация: 30-07-08
Из: Moscow
Пользователь №: 39 302



Цитата(Непомнящий Евгений @ Nov 10 2008, 10:42) *
В случаях 1 и 2 ничего сделать наверное нельзя (кроме отладки по кускам). Программные задержки - это обычно зло, там где критична их точность часто имеет смысл перейти на таймеры. Случаи 4 выносятся в отдельные модули или пишутся на асме.
Попробуйте поискать в этом форуме по слову volatile. Была масса обсуждений. Часто грабли связаны именно с отсутствием этого квалификатора.


Результат курения сайта по теме правильной оптимизации с GCC: внимательно читать в avr-libc FAQ.html
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 14th August 2025 - 02:46
Рейтинг@Mail.ru


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