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

 
 
> Собрал свежий GCC, bu2.17 avr-gcc4.2.0-20061121 avr-libc-1.4.5
klen
сообщение Dec 4 2006, 18:16
Сообщение #1


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Собрал новые сборки GCC для ARM/AVR, кому интересно качайте пробуйте, сообщайте о глюках.
Сборка для AVR протестина мной на текущем проекте, все пока работает.
http://www.klen.org/Projects/Embeded-gnu-t...last_build.html
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
klen
сообщение Dec 5 2006, 11:28
Сообщение #2


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



2_singlskv
Кусочек С кода приведите который приводитк к такой генерации, я посмотрю че происходит, очень интересно.

2_SysRq
smile.gif я сам решаю эту проблему так
указанием путя с помощю опции -I для gcc
или прописыванием PATH=$(PATH);aaa/bbb/cccc/rootdir/local/avr/include
тогда начинает работать.
А вы относительный путь сохранили от local/bin/avr-gcc до local/avr/include?
Я как раз и работаю над тем чтоб небыло таких проблем при установке пакета в любое место.
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 5 2006, 11:49
Сообщение #3


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(klen @ Dec 5 2006, 11:28) *
2_singlskv
Кусочек С кода приведите который приводитк к такой генерации, я посмотрю че происходит, очень интересно.


Код
BYTE PIN_[2]={
    (BYTE)(&PINB),
    (BYTE)(&PIND)
  };

  tmp1= *(volatile BYTE *)((WORD)PIN_[0]);

результат компиляции
Код
160:        tmp1= *(volatile BYTE *)((WORD)PIN_[0]);
+0000020A:   91800100    LDS     R24,0x0100       Load direct from data space
+0000020C:   2FE8        MOV     R30,R24          Copy register
+0000020D:   27FF        CLR     R31              Clear Register
+0000020E:   8180        LDD     R24,Z+0          Load indirect with displacement
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 5 2006, 12:01
Сообщение #4


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



Тупо всунул и закомпилял:
Код
uint8_t PIN_[2]={
                  (uint8_t)(&PINB),
                  (uint8_t)(&PIND)
                };

volatile uint8_t tmp1= *(volatile uint8_t *)((uint16_t)PIN_[0]);
  26:    83 b1           in    r24, 0x03; 3
  28:    89 83           std    Y+1, r24; 0x01


Но сам код странный, напимер &PINB - ведь PINB есть константа типа адресс, взять от нее еще раз адрес это че получится?. Или я чето не догнал?
Go to the top of the page
 
+Quote Post
singlskv
сообщение Dec 5 2006, 15:17
Сообщение #5


дятел
*****

Группа: Свой
Сообщений: 1 681
Регистрация: 13-05-06
Из: Питер
Пользователь №: 17 065



Цитата(klen @ Dec 5 2006, 12:01) *
Тупо всунул и закомпилял:
Код
uint8_t PIN_[2]={
                  (uint8_t)(&PINB),
                  (uint8_t)(&PIND)
                };

volatile uint8_t tmp1= *(volatile uint8_t *)((uint16_t)PIN_[0]);
  26:    83 b1           in    r24, 0x03; 3
  28:    89 83           std    Y+1, r24; 0x01

А как он у Вас закомпелит вот такой код ?
Код
uint8_t PIN_[2]={
                  (uint8_t)(&PINB),
                  (uint8_t)(&PIND)
                };

uint8_t tmp1= *(volatile uint8_t *)((uint16_t)PIN_[0]);
PIN_[0]=(uint8_t)(&PIND);
uint8_t tmp2= *(volatile uint8_t *)((uint16_t)PIN_[0]);
PIN_[0]=(uint8_t)(&PING);
uint8_t tmp3= *(volatile uint8_t *)((uint16_t)PIN_[0]);
Go to the top of the page
 
+Quote Post
klen
сообщение Dec 5 2006, 23:45
Сообщение #6


бессмертным стать можно тремя способами
*****

Группа: Свой
Сообщений: 1 405
Регистрация: 9-05-06
Из: Москва
Пользователь №: 16 912



код:
Код
//-------------------------------------------------------------------
void x () __attribute__ ((naked));
void x ()
{
volatile uint8_t PIN_[2]={
                  (uint8_t)(&PINB),
                  (uint8_t)(&PIND)
                };

volatile uint8_t tmp1= *(volatile uint8_t *)((uint16_t)PIN_[0]);
PIN_[0]=(uint8_t)(&PIND);
volatile uint8_t tmp2= *(volatile uint8_t *)((uint16_t)PIN_[0]);
PIN_[0]=(uint8_t)(&PINC);
volatile uint8_t tmp3= *(volatile uint8_t *)((uint16_t)PIN_[0]);
}



листинг .lss
Код
//-------------------------------------------------------------------
void x () __attribute__ ((naked));
void x ()
{
1c2:    83 e2           ldi    r24, 0x23; 35
1c4:    8c 83           std    Y+4, r24; 0x04
1c6:    99 e2           ldi    r25, 0x29; 41
1c8:    9d 83           std    Y+5, r25; 0x05
volatile uint8_t PIN_[2]={
                  (uint8_t)(&PINB),
                  (uint8_t)(&PIND)
                };

volatile uint8_t tmp1= *(volatile uint8_t *)((uint16_t)PIN_[0]);
1ca:    ec 81           ldd    r30, Y+4; 0x04
1cc:    ff 27           eor    r31, r31
1ce:    80 81           ld    r24, Z
1d0:    89 83           std    Y+1, r24; 0x01
PIN_[0]=(uint8_t)(&PIND);
1d2:    9c 83           std    Y+4, r25; 0x04
volatile uint8_t tmp2= *(volatile uint8_t *)((uint16_t)PIN_[0]);
1d4:    ec 81           ldd    r30, Y+4; 0x04
1d6:    ff 27           eor    r31, r31
1d8:    80 81           ld    r24, Z
1da:    8a 83           std    Y+2, r24; 0x02
PIN_[0]=(uint8_t)(&PINC);
1dc:    86 e2           ldi    r24, 0x26; 38
1de:    8c 83           std    Y+4, r24; 0x04
volatile uint8_t tmp3= *(volatile uint8_t *)((uint16_t)PIN_[0]);
1e0:    ec 81           ldd    r30, Y+4; 0x04
1e2:    ff 27           eor    r31, r31
1e4:    80 81           ld    r24, Z
1e6:    8b 83           std    Y+3, r24; 0x03


Какие выводы? К примеру mov уже не пресутствует smile.gif А это ваще правильный код, мне в данный момент некогда разглядывать его.
Go to the top of the page
 
+Quote Post

Сообщений в этой теме


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

 


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


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