Например TDA7294

Форум РадиоКот • Просмотр темы - CUbeide 1.8 глючит.
Форум РадиоКот
Здесь можно немножко помяукать :)





Текущее время: Чт апр 18, 2024 05:17:31

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


ПРЯМО СЕЙЧАС:



Начать новую тему Ответить на тему  [ Сообщений: 121 ]    , 2, , , ...  
Автор Сообщение
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 08:42:23 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
Я тоже заметил, что чем свежей компилятор, тем больше размер прошивки. Странная какая-то мура. По-идее, наоборот должно быть: оптимизатор лучше, следовательно, и кода вряд ли больше будет.

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

Добавлено after 14 minutes 26 seconds:
VladislavS писал(а):
IAR, GCC и ARM v6 совершенно разные компиляторы со своими достоинствами и недостатками каждый и оценивать/сравнивать их по размеру прошивки - верх глупости.

Совершенно верно. Более того, есть даже рекомендации о стиле и программных конструкциях, которые лучше применять в программе в зависимости от используемого компилятора, чтобы получить максимально компактны и быстрый код. Местами разница в скорости и размере кода бывает внушительной, но, как обычно, выигрыш в одном оборачивается проигрышем в другом. Если уж так критичен каждый байт и такт, то, вне зависимости от используемого компилятора, придётся вдумчиво изучать рекомендации по повышению качества генерируемого кода конкретным компилятором. ИМХО, это проще и перспективнее, чем писать на ассемблере.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 09:41:37 
Мудрый кот

Карма: 20
Рейтинг сообщений: 145
Зарегистрирован: Вс дек 25, 2016 08:34:54
Сообщений: 1849
Рейтинг сообщения: -3
VladislavS писал(а):
оценивать/сравнивать их по размеру прошивки - верх глупости
Ну смотри, я скрин сохранил, еще раз высунешься с тупым сравнением ассемблерного кода, я тебе его приляпаю.

Это я в stm не знаю ассемблер, но знаю хорошо в avr, и я сравнил эффективность создаваемого кода трех компиляторов, cvavr gcc и то что выплевывает iar, iar лидирует во всем.
Я бы и сам перешел на iar, но 2 Гига мусора на жестком диске - это просто какой-то феномен, notepad и то куда лучше.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 09:50:30 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Ведь вполне логично (но не обязательно), что требования новых стандартов порождают генерацию дополнительного кода.

У тебя логика — прямо как деление на нуль!
С чего бы тот же самый код чего-то новое порождал? Новые стандарты лишь позволяют дополнительные конструкции использовать, скажем, массивы переменного размера на стеке. Но с чего бы вдруг жирел код, который написан в соответствии с c79?

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
PCBWay - всего $5 за 10 печатных плат, первый заказ для новых клиентов БЕСПЛАТЕН

Сборка печатных плат от $30 + БЕСПЛАТНАЯ доставка по всему миру + трафарет

Онлайн просмотровщик Gerber-файлов от PCBWay + Услуги 3D печати
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 10:14:27 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
VladislavS писал(а):
оценивать/сравнивать их по размеру прошивки - верх глупости
Ну смотри, я скрин сохранил, еще раз высунешься с тупым сравнением ассемблерного кода, я тебе его приляпаю.
Мальчик, ты дурак? Я показываю ассемблерные листинги конкретных кусочков С/С++ кода, во что он компилируется. Как разные конструкции С++ порождают более или менее эффективный код. Ничего общего с размером прошивки это не имеет.

Ещё, потому что частенько приходится показывать, что "портянки непонятного С++ когда" не занимают всю флэшь, а компилируются в более эффективный код по сравнению с "ясным и понятным".

Добавлено after 6 minutes 54 seconds:
Но с чего бы вдруг жирел код, который написан в соответствии с c79?
Могут быть внесены изменения в стандартные библиотеки. Какие-то UB-шки могут по другому обрабатываться. Да мало ли что ещё.


Вернуться наверх
 
Организация питания на основе надежных литиевых аккумуляторов EVE и микросхем азиатского производства

Качественное и безопасное устройство, работающее от аккумулятора, должно учитывать его физические и химические свойства, профили заряда и разряда, их изменение во времени и под влиянием различных условий, таких как температура и ток нагрузки. Мы расскажем о литий-ионных аккумуляторных батареях EVE и нескольких решениях от различных китайских компаний, рекомендуемых для разработок приложений с использованием этих АКБ. Представленные в статье китайские аналоги помогут заменить продукцию западных брендов с оптимизацией цены без потери качества.

Подробнее>>
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:05:38 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
я сравнил эффективность создаваемого кода трех компиляторов, cvavr gcc и то что выплевывает iar, iar лидирует во всем.
си-компилятор?
Странно... постоянно наблюдаю косяки его оптимизатора. Когда он даже не оптимизирует, а скорее наоборот - деоптимизирует(!) код, добавляя совершенно ненужные инструкции. Вобщем: отстойный оптимизатор у IAR for ARM.
Впрочем: IAR for STM8 ещё хуже оптимизирует. Да и IAR for MSP430 - не фонтан.

Добавлено after 3 minutes 16 seconds:
PS: Так что (имха): неоптимальность кода - как раз одна из главных слабых сторон IAR.


Последний раз редактировалось jcxz Вт янв 25, 2022 11:06:48, всего редактировалось 1 раз.

Вернуться наверх
 
Новый аккумулятор EVE серии PLM для GSM-трекеров, работающих в жёстких условиях (до -40°С)

Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре. Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.

Подробнее>>
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:05:40 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
Могут быть внесены изменения в стандартные библиотеки. Какие-то UB-шки могут по другому обрабатываться. Да мало ли что ещё.

Какие "стандартные библиотеки" у STM32? Я даже флаг специально ставлю nostdlibs, чтобы уж точно gcc не захотел что-нибудь к моему бинарнику прилинковать!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:08:00 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
Какие "стандартные библиотеки" у STM32?
Например memcpy(), memset(), sprintf() и т.п.

Я даже флаг специально ставлю nostdlibs, чтобы уж точно gcc не захотел что-нибудь к моему бинарнику прилинковать!
А зачем? :shock:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:10:08 
Собутыльник Кота
Аватар пользователя

Карма: -12
Рейтинг сообщений: -25
Зарегистрирован: Пт июл 12, 2019 22:52:01
Сообщений: 2525
Рейтинг сообщения: 0
jcxz, чтобы размер бинарника вменяемым был, вестимо.
А уж пихать printf в микроконтроллеры - вообще верх маразма!

_________________
Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда.
Я на гитхабе, в ЖЖ


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:13:40 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
jcxz, чтобы размер бинарника вменяемым был, вестимо.
Достаточно просто не использовать эти функции и они не добавятся в ваш бинарник.
Да и что такое "невменяемый размер" по вашему мнению? Такие функции весят десятки-сотни байт. Всего лишь. А если попытаетесь написать их аналоги, то результат будет скорее всего ещё хуже.

Добавлено after 1 minute 1 second:
А уж пихать printf в микроконтроллеры - вообще верх маразма!
Ну тогда я - маразматик. :)))


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:21:47 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
Когда он даже не оптимизирует, а скорее наоборот - деоптимизирует(!) код, добавляя совершенно ненужные инструкции.
Я тоже всегда удивлялся как можно проделать такую гору оптимизаций и вставить "вот это вот сюда". Но иногда у меня закрадываются сомнения, что это делается для учёта особенностей выполнения кода на конкретных ядрах. Ну просто я никогда не поверю, что он не может вот такое "оптимизировать"
Код:
  LDR.W    R4,??DataTable2
  MOVS     R0,#+2         
  STR      R0,[R4, #+0]   
  MOVS     R1,#+2         
  STR      R1,[R4, #+4]   


Добавлено after 2 minutes 29 seconds:
Достаточно просто не использовать эти функции и они не добавятся в ваш бинарник.
Эх, наивность :) Тот же memcpy gcc умеет сам вставлять, где паттерны копирования встречает. Давно пора смириться, с оптимизирующим компилятором ваша программа вам не принадлежит :)


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:38:39 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
Но иногда у меня закрадываются сомнения, что это делается для учёта особенностей выполнения кода на конкретных ядрах. Ну просто я никогда не поверю, что он не может вот такое "оптимизировать"
Код:
  LDR.W    R4,??DataTable2
  MOVS     R0,#+2         
  STR      R0,[R4, #+0]   
  MOVS     R1,#+2         
  STR      R1,[R4, #+4]   

Это сомнительно. Много раз наблюдал эту деоптимизацию (дублирование загрузок констант). И судя по контексту - явно это не подстройка под ядро. Это просто баг оптимизатора. Я даже в поддержу им как-то писал по этому поводу. Ответили что то типа: "Да, есть такое, но это маловажная особенность. Будет время - поправим. Но скорее всего его не будет".
Ещё другая распространённая деоптимизация IAR:
Код:
void Bug1(OsEvent *pe, u32 j)                           
{                                                       
  pe->waitMap &= ~j;                                   
        _Z4Bug1P7OsEventm: (+1)                         
 0x6802             LDR      R2,[R0, #+0]               
 0x43C9             MVNS     R1,R1                     
 0x400A             ANDS     R2,R1,R2                   
 0x6002             STR      R2,[R0, #+0]               
  os.rdyMap &= ~j;                                     
 0x.... 0x....      LDR.W    R0,??DataTable16_1         
 0x6842             LDR      R2,[R0, #+4]               
 0x4011             ANDS     R1,R1,R2                   
 0x6041             STR      R1,[R0, #+4]               
}                                                       
 0x4770             BX       LR               ;; return
На кой он тут впендюривает MVNS? Почему не использует BICS? :dont_know:
Заметил: если в функции встречается y &= ~x только один раз -> используется BIC. Если >1 раза: вычисляется промежуточная переменная ~x, для неё занимается дополнительный регистр и используется AND. На кой - непонятно.

IAR совершенно не использует LDM/STM. Создавая портянки из LDR/STR там где можно поставить одну LDM/STM.

Очень часто IAR использует более длинные (4-байтовые) инструкции совершенно неоправданно. Там где можно использовать 2-байтовые.
Есть и много других косяков оптимизатора. Постоянно наблюдаю.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:47:43 
Электрический кот

Карма: -4
Рейтинг сообщений: 70
Зарегистрирован: Вт ноя 19, 2019 06:10:18
Сообщений: 1054
Рейтинг сообщения: 0
И чё? Ну, вставил какой-то компилятор не самую короткую команду, чё случилось? Сделайте прогон вашей программы, собранной разными компиляторами и сравните время её выполнения и размер. Для вас эти 2-5% разнницы времени и размера так критичны? Вряд ли, ИМХО.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:50:14 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
Или такое например:
Код:
 if (!(i & OS_STAT_PEND_ANY | ptcb->dly)) { //задача готова исполняться?   
0xF002 0x0207      AND      R2,R2,#0x7                                     
0x6803             LDR      R3,[R0, #+0]                                   
0x431A             ORRS     R2,R3,R2                                       
0xD100             BNE.N    ??OsTaskResume_2                               
   os.rdyMap |= OS_TASK_PRIOMAP(ptcb->prio, ptcb->prioMap);                 
0x....             B.N      ?Subroutine2                                   
   EXIT_CRT_SECTION();                                                     
   OsSched();                                                               
 } else EXIT_CRT_SECTION();                                                 
       ??OsTaskResume_2: (+1)                                               
0x....             B.N      ?Subroutine0                                   
                                                                           
                                                                           
                   In section .text, align 2, keep-with-next               
       ?Subroutine2: (+1)                                                   
0x.... 0x....      LDR.W    R2,??DataTable16_1                             
0x6900             LDR      R0,[R0, #+16]                                   
0x6853             LDR      R3,[R2, #+4]                                   
0x4318             ORRS     R0,R0,R3                                       
0x6050             STR      R0,[R2, #+4]                                   
                   REQUIRE ??Subroutine7_0                                 
                   ;; // Fall through to label ??Subroutine7_0             
                                                                           
                   In section .text, align 2, keep-with-next               
       ??Subroutine7_0: (+1)                                               
0xF381 0x8810      MSR      PRIMASK,R1                                     
0x....             B.N      _Z7OsSchedv                                     
                                                                           
                   In section .text, align 2, keep-with-next               
       ?Subroutine0: (+1)                                                   
0xF381 0x8810      MSR      PRIMASK,R1                                     
0x4770             BX       LR               ;; return                     
Вот накой там 3 инструкции перехода подряд??? Там же достаточно было сделать сразу:
BNE ?Subroutine0 не создавая дополнительную метку OsTaskResume_2.
OsTaskResume_2 больше никем не используется (можно было бы подумать, что она используется для удлинения переходов из каких-то дальних точек, но нет - на неё есть только один переход).

Так что - когда слышу восторги по поводу IAR-овского оптимизатора, у меня складывается мнение, что авторы этих восторгов просто никогда не заглядывают в листинги. Там же полный бардак. :dont_know:


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:50:25 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
tonyk, не говорите нам что делать и (дальше сами знаете)...


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 11:53:29 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
И чё? Ну, вставил какой-то компилятор не самую короткую команду, чё случилось? Сделайте прогон вашей программы, собранной разными компиляторами и сравните время её выполнения и размер. Для вас эти 2-5% разнницы времени и размера так критичны? Вряд ли, ИМХО.
Ну вообще-то речь идёт об оптимальности кода. Если для вас это не важно - ну так это ваше дело.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 12:01:57 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
jcxz, Там какая-то возня с выравниванием.

Добавлено after 1 minute 49 seconds:
Там же полный бардак. :dont_know:
А где не бардак? При всём этом код из-под IAR таки быстрее.


Вернуться наверх
 
В сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 12:03:32 
Сверлит текстолит когтями

Карма: -10
Рейтинг сообщений: 93
Зарегистрирован: Вт авг 15, 2017 10:51:13
Сообщений: 1154
Рейтинг сообщения: 0
jcxz, Там какая-то возня с выравниванием.
Сомнительно. Потому как:
1) для выравнивания стандартно используется вставка NOP-ов, которые не выполняются к тому же; а не переходы, которые выполняются, да еще не один такт;
2) там лишние сразу 2 инструкции, а это полное 32-битное слово; т.е. - вставка этих двух переходов никак не влияет выравнивание на 4.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 12:26:58 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
Возможно в микрокоде инструкции выполняются не в такой последовательности.
  LDR.W    R4,??DataTable2
  MOVS     R0,#+2         
  STR      R0,[R4, #+0]   
  MOVS     R1,#+2         
  STR      R1,[R4, #+4]   
наблюдается шаг адр.регистра и шаг в памяти, может пишет за одно обращение


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 12:51:30 
Поставщик валерьянки для Кота
Аватар пользователя

Карма: 18
Рейтинг сообщений: 403
Зарегистрирован: Вт май 01, 2018 19:44:47
Сообщений: 2479
Рейтинг сообщения: 0
a797945, вы преувеличиваете возможности Cortex-M.
Код:
        LDR.W    R4,??DataTable2
        MOV      R0,#+256       
        STR      R0,[R4, #+0]   
        STR      R0,[R4, #+4]
Константу 256 уже дороже загружать и тут уже всё как ожидается.


Вернуться наверх
 
Не в сети
 Заголовок сообщения: Re: CUbeide 1.8 глючит.
СообщениеДобавлено: Вт янв 25, 2022 13:01:39 
Мучитель микросхем

Карма: 4
Рейтинг сообщений: 80
Зарегистрирован: Вс ноя 01, 2015 09:15:16
Сообщений: 445
Откуда: 69.Ржев
Рейтинг сообщения: 0
я предположил, поскольку чтение/запись блока регистров базовая "железка" в обслуживании прерываний


Вернуться наверх
 
Показать сообщения за:  Сортировать по:  Вернуться наверх
Начать новую тему Ответить на тему  [ Сообщений: 121 ]    , 2, , , ...  

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


Кто сейчас на форуме

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


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

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


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB
Extended by Karma MOD © 2007—2012 m157y
Extended by Topic Tags MOD © 2012 m157y