Easyelectronics.ru

Электроника для всех
Текущее время: 23 янв 2021, 04:14

Часовой пояс: UTC + 5 часов



JLCPCB – Прототипы печатных плат за $2/5шт. два слоя. $5/5шт. четыре слоя
Крупнейший производитель печатных плат и прототипов. Более 600000 клиентов и свыше 10000 заказов в день!
Получите скидку на почтовую отправку при первом заказе в JLCPCB!

Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.
Автор Сообщение
 Заголовок сообщения: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 13:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Доброго времени суток.
Оказалось, что старый avr-libc не поддерживает 4х портовый EBI для xmega128a1u, поэтому затеял я переезд на свежий AVR тулчейн.
Но что-то, как всегда, пошло не так...
Проект собирается без ошибок и ворнингов, но после прошивки не работает (как буд-то код прошивки не выполняется).
Старые и новые версии пакетов из тулчейна (новая версия тулчейна - 3.6):
avr-gcc 4.9.2 -> 5.4.0
avr-libc 1.8.1 -> 2.0.0

Может кто сталкивался?

В списке изменений на новую версию avr_gcc ничего подходящего не нашёл.
Те же исходники, собранные старым тулчейном, работают нормально.
OS: Debian 10.0
Show Собираю проект так:


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 16:30 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Не являюсь поклонником Debian'а, но в то же время пользуюсь Dibian'oподобным дистрибутивом. Не уверен смогу-ли помочь... Но всё же...
Первый вопрос -- где взяли новый тулчейн?
В своём KDE Neon (Ubuntu) тулчейны для avr собираю сам (точнее собираю соответствующие deb-пакеты).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 16:58 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Сдается мне что собранный уже с сайта атмела брали, вот такой он там:
Код:
avr-gcc (AVR_8_bit_GNU_Toolchain_3.6.2_1759) 5.4.0


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 17:14 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Я всё из стандартного репозитория ставил, 5.4.0 (я не знаю, в репе атмеловская сборка или своя..).
Netzschlange, вы используете те же версии? Какие используете ключи для компиляции/линковки?

П.С. Я старым тулчейном пользовался на слаке, там из сырцов ставил с помощью sbo(пакетный менеджер). Всё было хорошо, но libc старый.
А тут мне стало лень ковыряться с обновлениями и я сначала в докере(ubuntu) всё это дело организовал - не заработало. Потом в полноценном дебиане - эффект тот же.


Последний раз редактировалось Lup 30 авг 2019, 17:27, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 17:26 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Попробуйте офф. тулчейн тогда: https://www.microchip.com/mplab/avr-sup ... -compilers
Просто скачать, распаковать и добавить в переменную PATH его каталог bin (export PATH=~/avr8-gnu-toolchain-linux_x86_64/bin:$PATH)


Последний раз редактировалось NStorm 30 авг 2019, 17:53, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 17:32 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
NStorm писал(а):
Попробуйте офф. тулчейн тогда: https://www.microchip.com/mplab/avr-sup ... -compilers
Просто скачать, распаковать и добавить в переменную PATH его (export PATH=~/avr8-gnu-toolchain-linux_x86_64:$PATH)

Вечером попробую, спасибо.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 17:53 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Да, само собой в PATH надо .../bin добавлять, поправил свой пост выше.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 30 авг 2019, 20:01 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Lup писал(а):
Netzschlange, вы используете те же версии?

avr-gcc версии 8.2.0 (раньше были 7.х.0, 6.х.0 и т.п.).
avr-libc версии 2.0.0.
Lup писал(а):
Какие используете ключи для компиляции/линковки?

Компиляции чего?
Если речь про тулчейн, то просто взял убунтовские (наверно дебиановские) сорцы deb-пакетов и чутка их подредактировал для сборки этих же пакетов, но с использованием свежих версий GCC и binutils.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 11:51 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
NStorm писал(а):
Да, само собой в PATH надо .../bin добавлять, поправил свой пост выше.


Попробовал последний офф тулчейн (версию компилятора проверил), но так же не работает прошивка.
Ещё пробовал добавить опцию компиляции -I<путь к avr/include нового тулчейна>, но тоже не помогло.
Если взять стрый тулчейн и использовать таим же образом, gcc сегфолтится.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 11:56 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Netzschlange писал(а):
Lup писал(а):
Netzschlange, вы используете те же версии?

avr-gcc версии 8.2.0 (раньше были 7.х.0, 6.х.0 и т.п.).

Разве это не версия gcc? (не avr-gcc)
Netzschlange писал(а):
Lup писал(а):
Какие используете ключи для компиляции/линковки?

Компиляции чего?

Если речь про тулчейн, то просто взял убунтовские (наверно дебиановские) сорцы deb-пакетов и чутка их подредактировал для сборки этих же пакетов, но с использованием свежих версий GCC и binutils.

Если у Вас есть проект на avr, какие Вы используете опции компилятора для его сборки? Я к тому, что возможно появились какие-то опции, которые надо обязательно указывать при компиляции, а я о них не знаю и не указываю. Ну, к примеру, вдруг теперь надо обязательно указывать размер памяти мк или что-то в таком духе.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 12:21 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Lup писал(а):
Разве это не версия gcc? (не avr-gcc)

Это одно и тоже. Поддержка avr идет с gcc. Просто патчи последние для binutils были для версии 5.4.0, а сам gcc вполне идет с поддержкой avr.
Вон тут даже собранный архив можно скачать: http://blog.zakkemble.net/avr-gcc-builds/
А вот скрипты для самостоятельно сборки: https://github.com/igormiktor/build-avr-gcc
Но сдается мне, раз у вас даже с офф 5.4.0 не работает, проблема в коде. Где-то что-то используется наверное из avr-libc, что изменилось.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 13:54 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Я ещё заметил странную вещь.
Если включить оптимизацию, то поведение устройства слегка меняется.
Если включить оптимизацию в режим "s", то на переходнике USB<->USART (cp2102) загорается RXD. Он у меня подключен к USARTE1 (xmega128a1u)
Какая-то мистика.. Попробую сделать минимальный программный проект и собрать.

RXD тускло так горит, как буд-то очень быстро моргает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 17:17 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Написал простенькую программку. И тут самое интересное открылось!
Там в начале закоментированный кусок кода. Суть не в том, что этот код делает, он вообще никогда не вызывается.
Если он закоментирован - программа работает (нога PORTQ0 переключается),
а если не закоментирован - программа не работает!

Я не понимаю почему..
Show


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 17:39 
Старожил

Зарегистрирован: 10 фев 2016, 19:55
Сообщения: 351
Lup писал(а):
Разве это не версия gcc? (не avr-gcc)

Уже сказали, что это одно и то же. Качаю исходники binutils, gcc с оф.сайта gnu.org, ни каких дополнительных патчей не накладываю.
Lup писал(а):
Если у Вас есть проект на avr, какие Вы используете опции компилятора для его сборки? Я к тому, что возможно появились какие-то опции, которые надо обязательно указывать при компиляции, а я о них не знаю и не указываю. Ну, к примеру, вдруг теперь надо обязательно указывать размер памяти мк или что-то в таком духе.

Ключи сборки не менялись при смене версий компиляторов:
-Os - опитимизация по размеру
-fpack-struct - упаковка структур (экономит память)
-fshort-enums - использовать самый минимальный целый тип для перечислений (экономит память)
-ffunction-sections - для каждой функции своя секция (при линковке неиспользуемые функции не линкуются)
-fdata-sections - для данных своя секция (аналогично функциям)
-fno-threadsafe-statics - не генерировать дополнительный код статических переменных (для однопотоковых МК нет нужды -> меньше код)
необязательные:
-std=gnu99
-funsigned-char
-funsigned-bitfields

Ключи линковки:
-Wl,--gc-sections - не линковать неиспользуемые данные и функции (вместе с -ffunction-sections и -fdata-sections сокращает размер бинарника)


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 18:15 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Когда я добавляю хоть одну дополнительную функцию, кроме main, даже пустую, программа перестаёт работать. Может со стэком что-то..


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 31 авг 2019, 18:16 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Netzschlange писал(а):
Lup писал(а):
Разве это не версия gcc? (не avr-gcc)

Уже сказали, что это одно и то же. Качаю исходники binutils, gcc с оф.сайта gnu.org, ни каких дополнительных патчей не накладываю.
Lup писал(а):
Если у Вас есть проект на avr, какие Вы используете опции компилятора для его сборки? Я к тому, что возможно появились какие-то опции, которые надо обязательно указывать при компиляции, а я о них не знаю и не указываю. Ну, к примеру, вдруг теперь надо обязательно указывать размер памяти мк или что-то в таком духе.

Ключи сборки не менялись при смене версий компиляторов:
-Os - опитимизация по размеру
-fpack-struct - упаковка структур (экономит память)
-fshort-enums - использовать самый минимальный целый тип для перечислений (экономит память)
-ffunction-sections - для каждой функции своя секция (при линковке неиспользуемые функции не линкуются)
-fdata-sections - для данных своя секция (аналогично функциям)
-fno-threadsafe-statics - не генерировать дополнительный код статических переменных (для однопотоковых МК нет нужды -> меньше код)
необязательные:
-std=gnu99
-funsigned-char
-funsigned-bitfields

Ключи линковки:
-Wl,--gc-sections - не линковать неиспользуемые данные и функции (вместе с -ffunction-sections и -fdata-sections сокращает размер бинарника)

Спасибо, я попробую сделать как у Вас, хотя не вижу чего-то критичного.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 15:50 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Я провожу тест на этом коде. Я проверяю работоспособность программы мультиметром на PORTQ0
Show код

В коде есть 2 строки:
Код:
void tmp(void);
void tmp(void) {}

Если они есть - программа не работает:
Show map файл

Если этот код закоментировать - программа работает:
Show map файл


Я приложил map файлы обоих случаев. Посмотрите пожалуйста, может вы увидите там причину такого поведения. Для меня они мало что говорят.
А вот разница двух map файлов:
Show diff 1.map 2.map


Последний раз редактировалось Lup 17 сен 2019, 16:56, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 16:16 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Вот такой хекс тоже работать не будет?
Show хекс

Это ваш пример без void tmp() собранный.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 16:51 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
NStorm писал(а):
Вот такой хекс тоже работать не будет?
Show хекс

Это ваш пример без void tmp() собранный.

Прошил Ваш хекс, он работает.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 16:55 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
Lup писал(а):
NStorm писал(а):
Вот такой хекс тоже работать не будет?
Show хекс

Это ваш пример без void tmp() собранный.

Прошил Ваш хекс, он работает.


Я прошу прощения! Не правильно написал, перепутал.
С void tmp() - не работает,
а без void tmp() - работает. Я поправлю предыдущий пост


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 16:56 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Ну тогда что-то вы не так собираете:
main.c:
Show main.c


Makefile:
Show Makefile


Выхлоп:
Show output log


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 16:57 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Цитата:
Я прошу прощения! Не правильно написал, перепутал.
С void tmp() - не работает,
а без void tmp() - работает. Я поправлю предыдущий пост

Это же в корне меняет дело )))
Тогда так, хекс с этими функциями:
Show Хекс с void tmp

Можете сами убедиться, что он одинаковый. С оптимизацией -Os. А то, что у вас компилятор не выкидывает пустую и неиспользуемую tmp(), говорит о том, что оптимизация у вас всё-таки отключена.


Последний раз редактировалось NStorm 17 сен 2019, 17:01, всего редактировалось 1 раз.

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 17:00 
Заглядывает иногда
Аватара пользователя

Зарегистрирован: 12 июл 2017, 17:51
Сообщения: 169
Откуда: Санкт-Петербург
NStorm писал(а):
Цитата:
Я прошу прощения! Не правильно написал, перепутал.
С void tmp() - не работает,
а без void tmp() - работает. Я поправлю предыдущий пост

Это же в корне меняет дело )))
Тогда так, хекс с этими функциями:
Show Хекс с void tmp

Можете сами убедиться, что он одинаковый. С оптимизацией -Os.

Работает!! Что Вы сделали? ))


Последний раз редактировалось Lup 17 сен 2019, 17:19, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 17:02 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Я использовал оптимизацию -Os и официальный avr-gcc. Опции и версия тулчейна я выше указал.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Переезд avr_gcc 4.9.2 -> 5.4.0
СообщениеДобавлено: 17 сен 2019, 17:07 
Старожил

Зарегистрирован: 08 авг 2013, 09:43
Сообщения: 3051
Вот без оптимизации (точнее с -Og):
Show


Разница в асмовском выходе только в том, что под void tmp() остается одна инструкция ret по адресу 0x220 откуда раньше main() начинался. Но ведь в системном ините выше время равно меняется call на новый адрес 0x222:
Код:
214:   0e 94 11 01     call    0x222   ; 0x222 <main>
218:   0c 94 32 01     jmp     0x264   ; 0x264 <_exit>

0000021c <__bad_interrupt>:
21c:   0c 94 00 00     jmp     0       ; 0x0 <__vectors>

00000220 <tmp>:
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

void tmp(void);
void tmp(void) {}
220:   08 95           ret

00000222 <main>:

int main(void) {
  OSC_CTRL = OSC_RC32MEN_bm;
222:   82 e0           ldi     r24, 0x02       ; 2
224:   80 93 50 00     sts     0x0050, r24     ; 0x800050 <__TEXT_REGION_LENGTH__+0x700050>


Неужели вот хекс выше не будет работать?


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 34 ]  На страницу 1, 2  След.


Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB