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

 
 
 
Reply to this topicStart new topic
> avr-gcc Ubuntu 8.10, будет ли работать?
alex1979
сообщение Jun 5 2009, 06:14
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Собрал avr-gcc под Ubuntu.
binutils-2.29.51
gcc-4.3.2
avr-libc-1.6.6
применил патчи от WinAvr-20090313.

Собрал проект на линуксе и есть одно небольшое отличие, вопрос не смертельное ли оно unsure.gif

дисассемблер поекта на линуксе:
Код
.....
00000098 <__do_copy_data>:
      98:    13 e0           ldi    r17, 0x03; 3
      9a:    a0 e0           ldi    r26, 0x00; 0
      9c:    b1 e0           ldi    r27, 0x01; 1
      9e:    e0 e8           ldi    r30, 0x80; 128
      a0:    f1 e3           ldi    r31, 0x31; 49
      a2:    00 e0           ldi    r16, 0x00; 0
      a4:    0b bf           out    0x3b, r16; 59
      a6:    02 c0           rjmp    .+4     ; 0xac <__do_copy_data+0x14>
      a8:    07 90           elpm    r0, Z+
      aa:    0d 92           st    X+, r0
      ac:    a6 32           cpi    r26, 0x26; 38
      ae:    b1 07           cpc    r27, r17
      b0:    d9 f7           brne    .-10    ; 0xa8 <__do_copy_data+0x10>

      000000b2 <__do_clear_bss>:
.....


и на винде:
Код
....
00000098 <__do_copy_data>:
      98:    13 e0           ldi    r17, 0x03; 3
      9a:    a0 e0           ldi    r26, 0x00; 0
      9c:    b1 e0           ldi    r27, 0x01; 1
      9e:    ee e1           ldi    r30, 0x1E; 30
      a0:    f2 e3           ldi    r31, 0x32; 50
      a2:    00 e0           ldi    r16, 0x00; 0
      a4:    0b bf           out    0x3b, r16; 59
      a6:    02 c0           rjmp    .+4     ; 0xac <__do_copy_data+0x14>
      a8:    07 90           elpm    r0, Z+
      aa:    0d 92           st    X+, r0
      ac:    a8 34           cpi    r26, 0x48; 72
      ae:    b1 07           cpc    r27, r17
      b0:    d9 f7           brne    .-10    ; 0xa8 <__do_copy_data+0x10>
      b2:    1b be           out    0x3b, r1; 59

000000b4 <__do_clear_bss>:
....


разница в одну команду out 0x3b, r1 ; 59


проект компилировался для ATmega128

Сообщение отредактировал alex1979 - Jun 5 2009, 06:28
Go to the top of the page
 
+Quote Post
aesok
сообщение Jun 5 2009, 06:36
Сообщение #2


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(alex1979 @ Jun 5 2009, 10:14) *
Собрал avr-gcc под Ubuntu.
Собрал проект на линуксе и есть одно небольшое отличие, вопрос не смертельное ли оно unsure.gif
...
разница в одну команду out 0x3b, r1 ; 59

проект компилировался для ATmega128


Для ATmega не смертельно, для ATxmega смертельно.

Анатолий.

Сообщение отредактировал aesok - Jun 5 2009, 06:36
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jun 5 2009, 06:46
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Цитата(aesok @ Jun 5 2009, 09:36) *
Для ATmega не смертельно, для ATxmega смертельно.

Анатолий.


в обозримом будущем буду применять ATmega. rolleyes.gif спасибо
Go to the top of the page
 
+Quote Post
Legotron
сообщение Jul 1 2009, 07:35
Сообщение #4


инопланетянин
***

Группа: Свой
Сообщений: 236
Регистрация: 24-12-06
Из: Питер
Пользователь №: 23 832



Цитата(alex1979 @ Jun 5 2009, 10:14) *
Собрал проект на линуксе и есть одно небольшое отличие, вопрос не смертельное ли оно unsure.gif

2All: Уважаемые, не могли бы вы объяснить, в чем суть различий??
Почему на ATxmega работать не будет??
Очень интересно понять смысл вопроса, не выкидывать же многотысячные строки дизасемблера в форум для принятия решения, будет работать на ATxmega или нет..
Go to the top of the page
 
+Quote Post
xelax
сообщение Jul 1 2009, 08:34
Сообщение #5


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Одна и таже версия компилятора, должна давать одинаковый код для одного и того же target на любых host платформах.

Что-то вы недособирали для gcc под Ubuntu. Или наоборот не те патчи наложили.
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jul 1 2009, 11:14
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Цитата(xelax @ Jul 1 2009, 11:34) *
Одна и таже версия компилятора, должна давать одинаковый код для одного и того же target на любых host платформах.

Что-то вы недособирали для gcc под Ubuntu. Или наоборот не те патчи наложили.


Версия binutils другая, не все патчи установились laughing.gif
Go to the top of the page
 
+Quote Post
kurtis
сообщение Jul 1 2009, 11:53
Сообщение #7


Местный
***

Группа: Свой
Сообщений: 466
Регистрация: 21-06-05
Пользователь №: 6 205



Binutils не влияет на генерацию кода, ассемблерный код генерирует компилятор.

А проекты скомпилированные под Убунтой в реальном железе стабильно работают?
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jul 1 2009, 13:04
Сообщение #8


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Цитата(kurtis @ Jul 1 2009, 14:53) *
Binutils не влияет на генерацию кода, ассемблерный код генерирует компилятор.

А проекты скомпилированные под Убунтой в реальном железе стабильно работают?


К сожалению пока нет проектов скомпилированных под убунтой в реальном железе crying.gif
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 1 2009, 19:31
Сообщение #9


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(Legotron @ Jul 1 2009, 11:35) *
2All: Уважаемые, не могли бы вы объяснить, в чем суть различий??
Почему на ATxmega работать не будет??


out 0x3b, r1 - переводиться как 'out RAMPZ, __zero_reg__' или друними словами обнулить регистр RAMPZ.

ATmegа контролеры имеют до 64КВ RAM, регистр RAMPZ используется как старший байт регистра Z только для адресации более 64 КВ FLASH и в програме всегда уснанавливается перед исполнением инструкций ELPM и SPM. Его состояния не оказывает никакого влияния на код генерируемый avr-gcc.

ATxmega контролеры могут адресовать до 16 MB RAM и регистр RAMPZ ипользуеться как старший байт регистра Z как для доступа к FLASH инструкциями ELPM и SPM так и для доступа к RAM инструкциями LD и ST. avr-gcc не знает о существовании регистра RAMPZ а также о RAMPX, RAMPY и RAMPD и никогда не устанавливает их перед инструкциями LD и ST. Для коректной работы кода генерируемого avr-gcc неодходимо чтобы эти регистры содержали нули, поэтому RAMPZ и должен быть обнулен в стартап коде после использования.

Анатолий.
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jul 2 2009, 05:10
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Хочу заметить , что регистр RAMPZ всетаки обнуляется инструкциями
Код
.......
      a2:    00 e0           ldi    r16, 0x00; 0
      a4:    0b bf           out    0x3b, r16; 59
......
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 2 2009, 05:47
Сообщение #11


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(alex1979 @ Jul 2 2009, 09:10) *
Хочу заметить , что регистр RAMPZ всетаки обнуляется инструкциями
Код
.......
      a2:    00 e0           ldi    r16, 0x00; 0
      a4:    0b bf           out    0x3b, r16; 59
......


Это не обнуление RAMPZ! Это инициализаци RAMPZ старшим байтом адреса метки __data_load_start:
Код
__do_copy_data:
    ldi    r17, hi8(__data_end)
    ldi    r26, lo8(__data_start)
    ldi    r27, hi8(__data_start)
    ldi    r30, lo8(__data_load_start)
    ldi    r31, hi8(__data_load_start)

    /* On the enhanced core, "elpm" with post-increment updates RAMPZ
       automatically.  Otherwise we have to handle it ourselves.  */

#ifdef __AVR_ENHANCED__
    ldi    r16, hh8(__data_load_start)
#else
    ldi    r16, hh8(__data_load_start - 0x10000)
.L__do_copy_data_carry:
    inc    r16
#endif
    out    AVR_RAMPZ_ADDR, r16


Анатолий.

Сообщение отредактировал aesok - Jul 2 2009, 05:58
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jul 2 2009, 11:31
Сообщение #12


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



вопрос скорее к Анатолию.

нашел конструкцию, которая отвечает за обнуление RAMPZ
(в файле avr-libc-1.6.6/crt1/gcrt1.S)

Код
#ifdef __AVR_HAVE_RAMPD__
    out    AVR_RAMPZ_ADDR, __zero_reg__
#endif /* __AVR_HAVE_RAMPD__*/


остается вопрос - это правильно или как.

P.S. прикладываю весь файл
Прикрепленные файлы
Прикрепленный файл  gcrt1.rar ( 2.42 килобайт ) Кол-во скачиваний: 22
 
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 2 2009, 16:35
Сообщение #13


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(alex1979 @ Jul 2 2009, 15:31) *
остается вопрос - это правильно или как.


Да эта инструкция необходима, я дал развернутый ответ в посте #9

Анатолий.

Сообщение отредактировал aesok - Jul 2 2009, 16:35
Go to the top of the page
 
+Quote Post
alex1979
сообщение Jul 2 2009, 20:32
Сообщение #14


Участник
*

Группа: Участник
Сообщений: 26
Регистрация: 23-11-07
Из: Украина, Волынь
Пользователь №: 32 613



Цитата(aesok @ Jul 2 2009, 19:35) *
Да эта инструкция необходима, я дал развернутый ответ в посте #9

Анатолий.

задавая вопрос это правильно или как, я имел в виду директивы условной компиляции, которыми окружена команда обнуления регистра
Go to the top of the page
 
+Quote Post
aesok
сообщение Jul 2 2009, 21:56
Сообщение #15


Знающий
****

Группа: Участник
Сообщений: 596
Регистрация: 26-05-06
Из: Москва
Пользователь №: 17 484



Цитата(alex1979 @ Jul 3 2009, 00:32) *
задавая вопрос это правильно или как, я имел в виду директивы условной компиляции, которыми окружена команда обнуления регистра

Да правально, хотя лучшей читаемости кода было бы логично добавть в GCC макрос __AVR_HAVE_MORE_64K_RAM__ и использовать его здесь.

Анатолий.
Go to the top of the page
 
+Quote Post

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

 


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


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