Вероятно из-за приоритетов. В AVR ASM тоже рекомендуют не использовать breq, а вычленять бит регистра статуса, хотя по времени — одинаково (не помню где читал, но на англицком).
И в этом случае Вы получаете как минимум две операции на загрузку значения из памяти в регистр,
когда из массива регистров, это делается за 1 цикл на значение.
mov R16, R20 (21,22,23,24,25,26,27)
В Вашем случае, компилятор сделает загрузку из памяти во временный регистр, потом копирование в R16. А это еще расходы по коду и скорости.
Да Вы попробуйте, а потом расскажете ))
Я это уже прошел.
Вы невнимательны, массив в регистрах, память не используется.
120 — прирост кода при реализации обработки масок с чтением из массива.
То есть при загонах компилятора с присвоением значений через временные регистры и тп.
Так с любым ассемблером.
Я знаком с разными архитектурами под которые писал на ассемблере, но когда проект выходит за рамки нескольких сот байт, Си становится удобней.
А конкретно про эту задачу — да, в академических целях ее можно реализовать полностью на ассемблере и это будет удобней.
Здесь же я преследовал другую идею — получить быстрый ШИМ с заданной конфигурацией, и оставить место для реализации законченного проекта, который замечу, требует много ресурсов. Но это уже не суть данной статьи.
Я надеюсь, что те кому пригодится мой пример в их разработках, выберут для себя нужный режим, удалят комментарии,
правильно оформят нужное условие, и с пользой применят в своих разработках, доведя их до состояния завершенности.
При этом не испытывая трудностей в нехватке памяти и быстродействия.
А благодарностью мне, послужит полученное ими удовольствие.
дают один и тот же результат, на мой взгляд, спорное.
Приведенный Вами пример не соответствует тому примеру на который указал я.
При этом я не сторонник таких трюков, но иногда к ним прибегаю при необходимости.
И присоединяйтесь к обсуждению, оно чуть выше в комментариях :)
Он идентичен в обоих случаях по времени выполнения и размеру.
Загвоздка в том, что результаты обоих сравнений, одного типа.
Но вы уже близко к ответу. :)
Не правильно! Хоть вы и не учли мои требования, я Вам отвечу по поводу Вашего примера:
Результатом выражения в условии будет побитовая операция над результатами функций,
т.е. хоть порядок и не определен, результатом будет сложение, и в случае если результат отвечает моим требованиям (см предыдущий пост), то условие выполнится при любом результате этого сложения отличным от нуля (сложение побитовое конечно).
Когда при использовании ||, значение результата функции die(), для истинности условия не важно, при истинности результата connect().
То есть «1<<0»!=«1<<1»
Ниже читайте.
когда из массива регистров, это делается за 1 цикл на значение.
mov R16, R20 (21,22,23,24,25,26,27)
В Вашем случае, компилятор сделает загрузку из памяти во временный регистр, потом копирование в R16. А это еще расходы по коду и скорости.
Да Вы попробуйте, а потом расскажете ))
Я это уже прошел.
120 — прирост кода при реализации обработки масок с чтением из массива.
То есть при загонах компилятора с присвоением значений через временные регистры и тп.
в первом варианте:
010, 100,…
во втором:
001,010,100…
для:
а тут:
Результат типа int ;)
Подведете итог? Без точек следования, потому что с этим разобрались сразу — логика работает быстрее.
так что MaximChistov, абсолютно прав.
Я знаком с разными архитектурами под которые писал на ассемблере, но когда проект выходит за рамки нескольких сот байт, Си становится удобней.
А конкретно про эту задачу — да, в академических целях ее можно реализовать полностью на ассемблере и это будет удобней.
Здесь же я преследовал другую идею — получить быстрый ШИМ с заданной конфигурацией, и оставить место для реализации законченного проекта, который замечу, требует много ресурсов. Но это уже не суть данной статьи.
Я надеюсь, что те кому пригодится мой пример в их разработках, выберут для себя нужный режим, удалят комментарии,
правильно оформят нужное условие, и с пользой применят в своих разработках, доведя их до состояния завершенности.
При этом не испытывая трудностей в нехватке памяти и быстродействия.
А благодарностью мне, послужит полученное ими удовольствие.
Приведенный Вами пример не соответствует тому примеру на который указал я.
При этом я не сторонник таких трюков, но иногда к ним прибегаю при необходимости.
И присоединяйтесь к обсуждению, оно чуть выше в комментариях :)
Загвоздка в том, что результаты обоих сравнений, одного типа.
Но вы уже близко к ответу. :)
Предположу, что Вы допустили опечататку.
думаю так проще для понимания.
Результатом выражения в условии будет побитовая операция над результатами функций,
т.е. хоть порядок и не определен, результатом будет сложение, и в случае если результат отвечает моим требованиям (см предыдущий пост), то условие выполнится при любом результате этого сложения отличным от нуля (сложение побитовое конечно).
Когда при использовании ||, значение результата функции die(), для истинности условия не важно, при истинности результата connect().
Приведите хороший пример ;)