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

 
 
> Какова логика работы компилятора Atmel studio
mozg12342
сообщение Mar 31 2018, 15:07
Сообщение #1





Группа: Участник
Сообщений: 14
Регистрация: 22-02-18
Пользователь №: 101 921



Добрый день!!!
Решил вот опробовать Atmel studio 7. Столкнулся со следующими странностями:
Если в поле условия оператора if вставить любую логическую операцию, то компилятор отказывается выполнять её и просто пропускает. Если к примеру выполню необходимую операцию, запишу в переменную и переменную вставлю в поле условия, то работает как надо.
Раньше писал код в Code Vision? там так делать можно было. Можно ли в студии так делать или прийдется каждый раз использовать промежуточную переменную?
Написал простой код для примера:
Код
#define F_CPU 8000000
#include <avr/io.h>
#include <avr/interrupt.h>
#include <util/delay.h>

unsigned char r;

int main(void)
{
    DDRB=0b11111111;
    PORTB=0b00000000;
    DDRC=0b00000000;
    PORTC=0b00000001;
    DDRD=0b00000000;
    PORTD=0b00000000;
    ACSR=0x80;
    //------------------------------------------------
    while (1)
    {
        if(~(PINC|0b11111110))      //если bit 0 порта С равен нулю, то выполнить условие
        {
         PORTB=0xFF;
         }
         r=(~(PINC|0b11111110));         
     }
}


Дизасемблер показывает:
Код
00000013  CLR R1        Clear Register
00000014  OUT 0x3F,R1        Out to I/O location
00000015  LDI R28,0x5F        Load immediate
00000016  LDI R29,0x04        Load immediate
00000017  OUT 0x3E,R29        Out to I/O location
00000018  OUT 0x3D,R28        Out to I/O location
--- No source file -------------------------------------------------------------
00000019  LDI R18,0x00        Load immediate
0000001A  LDI R26,0x60        Load immediate
0000001B  LDI R27,0x00        Load immediate
0000001C  RJMP PC+0x0002        Relative jump
0000001D  ST X+,R1        Store indirect and postincrement
0000001E  CPI R26,0x61        Compare with immediate
0000001F  CPC R27,R18        Compare with carry
00000020  BRNE PC-0x03        Branch if not equal
00000021  RCALL PC+0x0003        Relative call subroutine
00000022  RJMP PC+0x0015        Relative jump
00000023  RJMP PC-0x0023        Relative jump
--- C:\STUDIOmk\transmitter\transmitter\Debug/.././main.c ----------------------
{
    DDRB=0b11111111;
00000024  SER R24        Set Register
00000025  OUT 0x17,R24        Out to I/O location
    PORTB=0b00000000;
00000026  OUT 0x18,R1        Out to I/O location
    DDRC=0b00000000;
00000027  OUT 0x14,R1        Out to I/O location
    PORTC=0b00000001;
00000028  LDI R24,0x01        Load immediate
00000029  OUT 0x15,R24        Out to I/O location
    DDRD=0b00000000;
0000002A  OUT 0x11,R1        Out to I/O location
    PORTD=0b00000000;
0000002B  OUT 0x12,R1        Out to I/O location
    ACSR=0x80;
0000002C  LDI R24,0x80        Load immediate
0000002D  OUT 0x08,R24        Out to I/O location
         PORTB=0xFF;
0000002E  SER R25        Set Register
        if(~(PINC|0b11111110))      //если bit 0 порта С равен нулю, то выполнить условие
0000002F  IN R24,0x13        In from I/O location а
         PORTB=0xFF;
00000030  OUT 0x18,R25        Out to I/O location
        r=(~(PINC|0b11111110));         
00000031  IN R24,0x13        In from I/O location
00000032  ORI R24,0xFE        Logical OR with immediate
00000033  COM R24        One's complement
00000034  STS 0x0060,R24        Store direct to data space
00000036  RJMP PC-0x0007        Relative jump
--- No source file -------------------------------------------------------------
00000037  CLI         Global Interrupt Disable
00000038  RJMP PC-0x0000        Relative jump
Go to the top of the page
 
+Quote Post

Сообщений в этой теме
- mozg12342   Какова логика работы компилятора Atmel studio   Mar 31 2018, 15:07
- - Harvester   Цитата(mozg12342 @ Mar 31 2018, 18:07) Ко...   Mar 31 2018, 17:20
|- - mozg12342   Цитата(Harvester @ Mar 31 2018, 18:20) Дл...   Apr 1 2018, 14:45
|- - jcxz   Цитата(mozg12342 @ Apr 1 2018, 17:45) Моя...   Apr 1 2018, 14:50
|- - adnega   Цитата(mozg12342 @ Apr 1 2018, 17:45) пор...   Apr 1 2018, 14:53
|- - mozg12342   Цитата(adnega @ Apr 1 2018, 15:53) Это на...   Apr 1 2018, 15:05
- - k155la3   А если внимательно почитать warn, то скорее всего ...   Mar 31 2018, 18:51
- - dimka76   Кодif( (PINC & (1 << 0...   Mar 31 2018, 19:54
|- - k155la3   Цитата(dimka76 @ Mar 31 2018, 22:54) Кодi...   Apr 1 2018, 12:33
||- - adnega   Цитата(k155la3 @ Apr 1 2018, 15:33) Кодif...   Apr 1 2018, 14:30
||- - k155la3   Цитата(adnega @ Apr 1 2018, 17:30) может,...   Apr 1 2018, 14:33
||- - adnega   Цитата(k155la3 @ Apr 1 2018, 17:33) Вах ...   Apr 1 2018, 14:50
||- - jcxz   Цитата(adnega @ Apr 1 2018, 17:50) В боев...   Apr 1 2018, 14:53
||- - adnega   Цитата(jcxz @ Apr 1 2018, 17:53) Скобки-т...   Apr 1 2018, 15:01
||- - jcxz   Цитата(adnega @ Apr 1 2018, 18:01) Для од...   Apr 1 2018, 15:17
|- - mozg12342   Цитата(dimka76 @ Mar 31 2018, 20:54) Кодi...   Apr 1 2018, 14:53
- - aiwa   Цитата(mozg12342 @ Mar 31 2018, 17:07) Мо...   Mar 31 2018, 22:32
|- - Сергей Борщ   QUOTE (aiwa @ Apr 1 2018, 00:32) Которые ...   Apr 1 2018, 07:02
|- - mozg12342   Цитата(aiwa @ Mar 31 2018, 23:32) Причина...   Apr 1 2018, 14:57
- - adnega   Вообще, в AVR для битовых условий есть всякие sbrc...   Apr 1 2018, 14:55
- - mozg12342   Всем отзывчивым большое спасибо!!!   Apr 1 2018, 16:20


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

 


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


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