jcxz 184 1 августа, 2021 Опубликовано 1 августа, 2021 · Жалоба 3 часа назад, 1113 сказал: первые три блока состоят из двух команд 0x000015C8 782C LDRB r4,[r5,#0x00] 0x000015CA B134 CBZ r4,0x000015DA первая исполняется 1 такт и загружает в R4 проверяемое значение, вторая исполняется 1 такт если "нет срабатывания" и код не выходит из цикла, и 2 такта, если "есть срабатывание" и код выходит из цикла Ну да - осталось только найти такой ARM, на котором эти LDRB будут выполняться за 1 такт. А то они так-то за 2 выполняются. Да и команды перехода, когда исполняется переход, выполняются не за 2 такта, а за 2...4 тактов. https://developer.arm.com/documentation/100166/0001/Programmers-Model/Instruction-set-summary/Table-of-processor-instructions?search=5eec6e71e24a5e02d07b259a Так что - пересчитывайте всё. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SII 0 3 августа, 2021 Опубликовано 3 августа, 2021 · Жалоба On 8/1/2021 at 4:07 PM, Forger said: А о каком компиляторе идет речь? Какая версия? ARMCLANG 6.16. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
KnightIgor 2 17 августа, 2021 Опубликовано 17 августа, 2021 · Жалоба On 8/3/2021 at 11:57 AM, SII said: ARMCLANG 6.16. Не пробовали задать вопрос непосредственно производителю (ARM/KEIL)? Там и форум есть https://community.arm.com/developer/tools-software/tools/f/keil-forum. Будет интересно услышать ответ, но я сомневаюсь, что ответят: вероятно, такого рода оптимизации являются know how или такими косяками, что признаться будет стыдно . Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться