|
2 страниц
1 2 >
|
 |
Ответов
(1 - 14)
|
May 27 2014, 06:18
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(juvf @ May 27 2014, 12:18)  Есть проект. в нем один файл должен быть только с оптимизацией -О0 Это не очень хороший проект! При желании всегда можно избавиться от такого поведения. Могу помочь.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 28 2014, 10:45
|
Группа: Новичок
Сообщений: 2
Регистрация: 23-05-14
Пользователь №: 81 748

|
?
Сообщение отредактировал Евгений100 - May 28 2014, 10:45
|
|
|
|
|
May 28 2014, 11:54
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Цитата(ViKo @ May 27 2014, 14:34)  Задайте принудительно для фрагмента: #pragma push #pragma O0 ... #pragma pop Спасибо, то что нужно!!! Только у меня в компиляторе так #pragma optimize=none Цитата Это не очень хороший проект! А что в нём не хорошего? Для таких случаев придумали #pragma optimize, а не предлагают помощь в избавлении от такого поведения
|
|
|
|
|
May 29 2014, 23:17
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
Есть место в программе, например обработчик прерывания.... без оптимизации один си-оператор есть 6 асм команд. без оптимизации почти 90% времени уходит на обработчик. прога не работает. с макс ур оптимизации по скорости этого обработчика си-оператор есть 4, а то и 2 асм команды. в итоге в прерывании 40-50% времени. прога работает без сбоев. а то место, где optimize=none.... там используются дефайны регитров, библиотечные. можно канечно свои определить, обставить всё валатайлами.... в итоге асм получится 1в1 как с optimize=none. смысыл перелопачиать библиотечные дефайны и тратить время на "красивый код", если optimize=none решает проблему? Цитата Стоит решать проблему а не следствие. Проблема в том, что оптимизатор оптимизирует этот код. Отключить оптимизацию можно волотайлами или optimize=none. кому что милее
|
|
|
|
|
May 30 2014, 00:07
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(juvf @ May 30 2014, 07:27)  Есть место в программе, например обработчик прерывания.... без оптимизации один си-оператор есть 6 асм команд. без оптимизации почти 90% времени уходит на обработчик. прога не работает. с макс ур оптимизации по скорости этого обработчика си-оператор есть 4, а то и 2 асм команды. в итоге в прерывании 40-50% времени. прога работает без сбоев. Еще в деле увеличения производительности очень помогает выравнивание данных. Все 8-ми и 16-ти битные данные нужно заменить на 32-битные. Массивы копировать или очищать сразу по 32 бита. Ну и главный козырь - попробовать перенести рутину на аппаратные блоки (DMA, таймеры, SPI и т.п.) Как правило, чем жирнее обработчик (а это на самом деле должно насторожить), тем больше возможностей для оптимизации. Крошечный обработчик можно и ручками (читай на asm) написать. Вообще архитектура проекта должна быть заточена под эти "критические" обработчики. Если не считать выключенную оптимизацию, то разница между результатом для разных уровней оптимизации (при оптимальном на C-уровне коде) не значительна. Точне не 2 раза. Цитата(juvf @ May 30 2014, 07:27)  а то место, где optimize=none.... там используются дефайны регитров, библиотечные. можно канечно свои определить, обставить всё валатайлами.... в итоге асм получится 1в1 как с optimize=none. смысыл перелопачиать библиотечные дефайны и тратить время на "красивый код", если optimize=none решает проблему? Проблема в том, что оптимизатор оптимизирует этот код. Отключить оптимизацию можно волотайлами или optimize=none. кому что милее В данном случае отсутствие volatile у регистров преступление. Нужно править библиотеку. Насчет 1в1 не полностью верно, ведь кроме доступа к регистрам есть и другой код. Выключение оптимизации не решение, т.к. при обращении из разных кусков программы (в том числе и с включенной оптимизацией) поведение будет разным. Может, вместо "optimize=none"/"optimize=yes" при каждом обращении к переменной в критичном к скорости модуле легче в одном месте написать volatile и иметь рабочий код при любом уровне оптимизации?
|
|
|
|
|
May 30 2014, 04:07
|

неотягощённый злом
     
Группа: Свой
Сообщений: 2 746
Регистрация: 31-01-08
Из: Санкт-Петербург
Пользователь №: 34 643

|
Цитата(juvf @ May 28 2014, 20:04)  Вы рано или поздно с таким не системным подходом упрётесь в стену. Тем более, что проект с ваших слов - большой. Вы ведь себя программистом называете, не так-ли? А выёживаетесь как студент с несчастливым билетом на экзамене. Простите за прямоту. В конечном итоге вольному - воля, но я не хотел бы быть в числе тех кому достанется радость работать с вашим конечным продуктом.
--------------------
“Будьте внимательны к своим мыслям - они начало поступков” (Лао-Цзы)
|
|
|
|
|
May 31 2014, 00:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 261
Регистрация: 14-05-09
Из: Челябинск
Пользователь №: 49 045

|
stm32 cm3. про библы от производителя речи не было. 2demiurg_spb, вы со своим подходом смотрите не упритесь. Прочему прогеры такой народ? Если кто-то что-то делает не по их евангелию, то он не прав. Да ещё и не скупятся потролить. Почему именно ВАШ системный подход тру? Почему вы решаете, что иссус правильный бог. Почему не ЛММ? Когда такие ковбои-идеалисты сталкиваются с любым кодом, они сразу же начинают истерить и пытаться переписать всё с нуля по своим лекалам. Вы же не знаете и толики того ТЗ, что у меня. Не имеете представления об объеме, задачах, капризах заказчика, какие либы можно юзать, а какие нет. Я абстрагировался от всего тз и спросил конкретно про оптимизацию. Я не просил помощи в системном подходе. Проблема решена. Обязательно найдется идеолог который попытается "залезть в душу" и гавном кинуть. Цитата Если поведение программы зависит от уровня оптимизации, значит программа написана неверно. Ну ваша вера. Уважаю. Перевербовывать вас не собираюсь. Оскорблять "выёжывающимся студентом" и назвать ваш продукт гавном не намерен. Моя вера иная. Есть места в программе, где каждый тик на счету, жёсткий реал тайм. Грубо говоря тиком больше, тиком меньше - в итоге фронт импульса не в том месте. Улетели....
|
|
|
|
|
May 31 2014, 02:01
|
Гуру
     
Группа: Свой
Сообщений: 2 724
Регистрация: 14-05-07
Из: Ярославль, Россия
Пользователь №: 27 702

|
Цитата(demiurg_spb @ May 30 2014, 12:17)  Вы рано или поздно с таким не системным подходом упрётесь в стену. Тем более, что проект с ваших слов - большой. Вы ведь себя программистом называете, не так-ли? А выёживаетесь как студент с несчастливым билетом на экзамене. Простите за прямоту. В конечном итоге вольному - воля, но я не хотел бы быть в числе тех кому достанется радость работать с вашим конечным продуктом. Полностью согласен. Успех программиста МК, я считаю, заключается в многократном использовании кода. Когда одно отлаженное решение можно использовать в разных проектах (и даже на разных архитектурах). Скорость и качество разработки возрастает, функциональность тоже, т.к. часть отведенного на разработку времени отсвобождается за счет применения готовых решений, и можно уделить время доп. плюшкам. Поэтому я в лучших традициях "русские долго запрягают, зато потом быстро едут", очень скурпулезно делаю библиотеки. В рамках большого проекта остутствие библиотек или их кривизна смерти подобна. На форуме ТС реально помогает и неплохо ориентируется в вопосах RTOS, поэтому ярлык "студент" тут не подходит. Если есть такая возможность, то нужно посадить за выпрямление библиотек "настоящего студента", четко сформулировав для него задачу, - тот и полезное дело сделает и опыту поднаберется. Реальные разработчики должны думать над архитектурой) То, что в рамках STM32 на Cortex-M4 можно сделать очень сложные проекты полностью согласен. Хорошо, когда функционал известен заранее, хуже - когда добавляется в процессе разработки. Тогда и вылезают всякие "костыльные решения". Да, и не забываем про сопровождаемость кода. Сами откроете через год или другой разработкик возьмется за поддержку для галочки написанного приложения - времени и нервов будет потеряно немало.
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|