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

 
 
> WinAVR: Cовмещение Си и ассемблера
MaxiMuz
сообщение Feb 9 2012, 11:23
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 253
Регистрация: 15-04-10
Из: Волгоград
Пользователь №: 56 658



Здраствуйте !
Использовал пример из статьи: http://we.easyelectronics.ru/AVR/avr-gcc-s...om-proekte.html
"AVR-GCC: Совмещение C и ассемблера в одном проекте ". Начал править makefile, которым я обычно пользуюсь, но при указании Assembler source files... получил error: Oops, ASRC not found !
Не понимаю что не так делаю ! В чем может быть проблема ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
ReAl
сообщение Feb 22 2012, 07:49
Сообщение #2


Нечётный пользователь.
******

Группа: Свой
Сообщений: 2 033
Регистрация: 26-05-05
Из: Бровари, Україна
Пользователь №: 5 417



Смотря что имеется ввиду под словом «выполняется»
Код
#include <stdint.h>

uint8_t foo(uint8_t u)
{
    switch (u) {
        static uint8_t s = 20;
    case 0:
        return u+s;
    case 1:
        ++s;
    case 2:
        return u-s;
    default:
        break;
    }
    // s = 0; // Низзя! Тут s  не видно, она внутри блока swicth
    return 0;
}
Код
foo:
/* prologue: function */
/* frame size = 0 */
    cpi r24,lo8(1)
    breq .L4
    cpi r24,lo8(1)
    brlo .L3
    cpi r24,lo8(2)
    breq .L11
    ldi r24,lo8(0)
    ret
.L3:
    lds r24,s.1215
    ret
.L4:
    lds r25,s.1215
    subi r25,lo8(-(1))
    sts s.1215,r25
    sub r24,r25
    ret
.L11:
    lds r25,s.1215
    sub r24,r25
    ret

    .data
s.1215:
    .byte    20



Где-то уже писал — не могу найти...

switch — это такой оптимизированный условный goto в кучу меток. Все метки должны быть внутри одного выражения (statement)
Цитата(C99)
6.8.4 Selection statements
Syntax
1
selection-statement:
if ( expression ) statement
if ( expression ) statement else statement
switch ( expression ) statement
Как видим, особой разницы между if ( expression ) statement и swicth ( expression ) statement не наблюдается. Кто такой statement — смотрим отдельно
Цитата
6.8 Statements and blocks
statement:
labeled-statement /* сюда входит метка case */
compound-statement
...

Цитата
6.8.2 Compound statement
compound-statement:
{ block-item-listopt }
block-item-list:
block-item
block-item-list block-item
block-item:
declaration /* в любом compound statement, включая switch-евый, может быть declaration */
statement


Если выражение простое (не составное), то и switch может выглядеть вообще так:
Код
uint8_t moo(uint8_t u)
{
        // if ( u == 0 || u == 3 || u == 5 ) return 0;
        switch(u)
        case 0:
        case 3:
        case 5:
                return 0;

        return 1;
}

Код
moo:
    cpi r24,lo8(3)
    breq .L14
    cpi r24,lo8(5)
    breq .L14
    tst r24
    brne .L17
.L14:
    ldi r24,lo8(0)
    ret
.L17:
    ldi r24,lo8(1)
    ret

Тут несколько разных путей поставить нельзя, так как ';' ограничивает выражение и следующий case окажется за пределами switch.
Поэтому swicth «чуть реже, чем всегда» применяется с составными (compound statement), заключающими отдельные statement в фигурные скобки.
А в начале такого блока может и до метки что-то стоять. Главное, чтобы смысл в этом был. Как в примере выше — статическая переменная.


--------------------
Ну, я пошёл… Если что – звоните…
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- MaxiMuz   WinAVR: Cовмещение Си и ассемблера   Feb 9 2012, 11:23
- - demiurg_spb   Makefile в студию...   Feb 9 2012, 11:35
- - haker_fox   QUOTE (MaxiMuz @ Feb 9 2012, 19:23) Здрас...   Feb 9 2012, 12:35
|- - MaxiMuz   Цитата(haker_fox @ Feb 9 2012, 15:35) А В...   Feb 9 2012, 16:06
||- - demiurg_spb   Это ваш реальный мейкфайл из проекта? В вашем теку...   Feb 9 2012, 16:15
|||- - MaxiMuz   Цитата(demiurg_spb @ Feb 9 2012, 19:15) Э...   Feb 9 2012, 16:20
|||- - demiurg_spb   Цитата(MaxiMuz @ Feb 9 2012, 19:20) Да, в...   Feb 10 2012, 05:40
|||- - Сергей Борщ   QUOTE (demiurg_spb @ Feb 10 2012, 07:40) ...   Feb 10 2012, 12:00
||- - haker_fox   QUOTE (MaxiMuz @ Feb 10 2012, 00:06) Счит...   Feb 12 2012, 06:05
||- - MaxiMuz   Цитата(haker_fox @ Feb 12 2012, 09:05) Эт...   Feb 12 2012, 16:45
||- - MaxiMuz   Цитата(haker_fox @ Feb 12 2012, 09:05) Эт...   Feb 14 2012, 11:50
|- - MaxiMuz   Цитата(haker_fox @ Feb 9 2012, 15:35) Здр...   Feb 14 2012, 11:05
|- - demiurg_spb   потому что по умолчанию всё берётся из текущего ка...   Feb 14 2012, 11:39
||- - MaxiMuz   Цитата(demiurg_spb @ Feb 14 2012, 14:39) ...   Feb 14 2012, 11:44
||- - demiurg_spb   Что задаётся? Чтобы искалось в других каталогах? И...   Feb 14 2012, 11:46
|- - haker_fox   QUOTE (MaxiMuz @ Feb 14 2012, 19:05) в AS...   Feb 15 2012, 00:49
- - MaxiMuz   Да, вручную все добавляется и успешно собирается д...   Feb 10 2012, 08:39
- - MaxiMuz   В демо-проекте "совмещение Си и ассемблера...   Feb 11 2012, 18:18
|- - Сергей Борщ   QUOTE (MaxiMuz @ Feb 11 2012, 20:18) Где ...   Feb 11 2012, 21:06
- - ReAl   Я давно в makefile проекта перестал вписывать отде...   Feb 12 2012, 11:16
|- - haker_fox   QUOTE (ReAl @ Feb 12 2012, 19:16) Я давно...   Feb 13 2012, 13:58
|- - ReAl   Цитата(haker_fox @ Feb 13 2012, 15:58) Мн...   Feb 14 2012, 16:45
- - MaxiMuz   новый вопрос: Для обращения к байтовой регистрово...   Feb 12 2012, 18:03
|- - demiurg_spb   Цитата(MaxiMuz @ Feb 12 2012, 21:03) А ка...   Feb 13 2012, 05:19
- - _Ivana   Спасибо за упоминание про Makefile. Только что пыт...   Feb 13 2012, 19:01
|- - haker_fox   QUOTE (_Ivana @ Feb 14 2012, 03:01) пропи...   Feb 14 2012, 02:12
- - MaxiMuz   Всем спасибо за разьяснение в особенности haker_fo...   Feb 15 2012, 17:58
|- - Сергей Борщ   QUOTE (MaxiMuz @ Feb 15 2012, 19:58) В че...   Feb 15 2012, 20:42
|- - MaxiMuz   Цитата(Сергей Борщ @ Feb 15 2012, 23:42) ...   Feb 16 2012, 08:20
|- - Сергей Борщ   QUOTE (MaxiMuz @ Feb 16 2012, 10:20) поче...   Feb 16 2012, 09:31
- - MaxiMuz   Непонимаю смысл вставки:Кодasm volatile("...   Feb 19 2012, 14:58
|- - Сергей Борщ   QUOTE (MaxiMuz @ Feb 19 2012, 16:58) Непо...   Feb 19 2012, 17:51
|- - MaxiMuz   Цитата(Сергей Борщ @ Feb 19 2012, 20:13) ...   Feb 19 2012, 18:19
|- - haker_fox   QUOTE (MaxiMuz @ Feb 20 2012, 02:19) Где ...   Feb 20 2012, 08:54
|- - MaxiMuz   Цитата(haker_fox @ Feb 20 2012, 11:54) Он...   Feb 21 2012, 19:40
|- - Сергей Борщ   Я никогда не использовал регистровые переменные, н...   Feb 21 2012, 23:53
- - slavik.ksu   здравствуй те уважаемые форумчане! Перехожу н...   Feb 22 2012, 06:08
|- - demiurg_spb   КодISR ( USART_RX_vect ) { switch ...   Feb 22 2012, 06:36
|- - slavik.ksu   Оказывается в конструкции switch строка выполняетс...   Feb 22 2012, 06:42
|- - slavik.ksu   Оказывается в конструкции switch строка выполняетс...   Feb 22 2012, 06:43
- - MaxiMuz   Цитата(Сергей Борщ @ Feb 22 2012, 02:53) ...   Feb 22 2012, 07:50
- - MaxiMuz   Цитата(MaxiMuz @ Feb 22 2012, 10:50) Так ...   Feb 22 2012, 10:02
- - ReAl   Кстати, да. Если кто-то из модераторов перенесёт в...   Feb 22 2012, 11:16


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

 


RSS Текстовая версия Сейчас: 24th July 2025 - 23:48
Рейтинг@Mail.ru


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