Я же написал что такая фигня происходила в других местах примеру вот тут было тоже самое.
не увидел, где вы такое писали, и не вижу общего в последнем и предпоследнем примерах вашего кода - что там за "та же фигня" происходит, мне непонятно.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
Ну вот он опять запись в ОЗУ обернул функцией и вынес из за этого запись флага вместо положенных 3 такта выполняется за 11
Код:
83: FLAG.flag.F_AC=1; //765765 +00000DB4: 91E00500 LDS R30,0x0500 Load direct from data space +00000DB6: 64E0 ORI R30,0x40 Logical OR with immediate +00000DB7: 940E134E CALL 0x0000134E Call subroutine 84: FLAG.flag.F_T1=1; +00000DB9: 61E0 ORI R30,0x10 Logical OR with immediate +00000DBA: 940E134E CALL 0x0000134E Call subroutine 85: FLAG.flag.F_I1=0; +00000DBC: 7FEB ANDI R30,0xFB Logical AND with immediate +00000DBD: 940E134E CALL 0x0000134E Call subroutine 86: FLAG.flag.F_I2=1; +00000DBF: 60E8 ORI R30,0x08 Logical OR with immediate +00000DC0: 93E00500 STS 0x0500,R30 Store direct to data space 87: FLAG.byte=0; +00000DC2: E0E0 LDI R30,0x00 Load immediate +00000DC3: 93E00500 STS 0x0500,R30 Store direct to data space
CALL 0x0000134E
Код:
0000134E: 93E00500 STS 0x0500,R30 Store direct to data space +00001350: 9508 RET Subroutine return
Я вот не могу въехать - что значит "обернул функцией"?
Код:
сделал +00000DBD: 940E134E CALL 0x0000134E Call subroutine .. 0000134E: 93E00500 STS 0x0500,R30 Store direct to data space +00001350: 9508 RET Subroutine return
Ну вот он опять запись в ОЗУ обернул функцией и вынес
у вас оптимизация вообще включена или нет? судя по листингу компилятор достаточно умный, чтобы делать ORI и ANDI над содержимым регистра, но при этом достаточно туп, так как постоянно осуществляет сохранение этого регистра в ячейке памяти... бред какой-то.
_________________ если рассматривать человека снизу, покажется, что мозг у него глубоко в жопе при взгляде на многих сверху ничего не меняется...
_________________ Купи два беляша и собери из них кошку Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви) Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Благодарю всех за помощь. Разобрался я из за чего всё это было как и писал ARV
ARV писал(а):
пытаться оптимизировать бессмысленный код - пустая трата времени. оптимизировать надо конкретные задачи, а не сферических коней.
Всё дело было в сферических конях =) для того что бы было проще было в ассемблерном листинге найти кусок кода я его вставлял в самое начало хотя использоваться он должен был в прерываниях. Ну а компилятор видимо по смотрел что код выполняется 1 раз по этому скорость не важна и запихал всё в функции. После того как запихал всё в прерывания не каких вызовов CALL не стало.
Panda_Y2K, Это если объявить как локальную переменную у меня примерно так же непонятно правда почему он SUBI вместо INC запихивает но да ладно по времени они одинаково выполняются.
У меня к стати переменная глобальная и код выполняется в функции майн один раз. версия cv 2.05.3 оптимизация по размеру.
_________________ Купи два беляша и собери из них кошку Labor est etiam ipse voluptas Труд уже сам по себе есть наслаждение (*Формула любви) Ave novie-nostra ales Если один человек построил - другой завсегда разобрать может....(*Формула Любви).
Подскажите пжлст! CVAVR не генерирует файлы прошивки! Открываю готовый проект вношу изменнения, некоторые файлы дату изменения меняют , а файлы *.hex *.cof не меняют. Пробовал их удалять, новые не генерируются, пути менял, папку с проектом переносил в корень, нажимаю и "rebuild all" и "build the project" эффекта ноль. Версия программы 2.05.3. Кто то уже сталкивался с таким?
Сейчас этот форум просматривают: Majestic-12 [Bot] и гости: 60
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения