У меня ни гигабайтных браузеров, ни игр не получается. Я стараюсь использовать ресурсы экономно. А вот разработчики браузеров и всякой прочей жирноты - да, похоже вообще болт ложили на пользователей. Они, похоже, априори считают, что у всех мейнфрейм на 256 ядер по 2.5ГГц каждое, а оперативы минимум 1ПБ!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Если он хочет char отобразить как int, так пусть и вызывает printf("%d\n", c)
..и сядет в лужу, о чём я выше написал. Ты запрашиваешь %d, то есть тип int, который даже на восьмибитках имеет размер 16 бит, а передаёшь char, размером 8 бит. Понимаешь, что получится? Если МК загружен основной задачей на 90%, то нужно подумать об оптимизации преобразования для печати. А если же загрузка 10%, то используй то, что проще и удобней, лишь бы памяти хватило.
Ничего страшного не будет. Неявно char преобразуется в int, оба типа знаковые, так что косяков не будет.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Кхм, у меня char (символ без терминального нуля) - печатается не Hex коде. Потому как не ограничен в диапазоне видимых знаков. А вот когда это текст с закрывающем нулём - вот тогда велком.
Поведение на МК будет отличаться лишь при попытке вывести -15: на некоторых МК это будет 65521.
Ну и где здесь "нежданчик"?
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
В наборе инструкций есть wfe и wfi которые отключают процессор до ближайшего события или прерывания. А значит загрузка будет меньше 100%, т. к. часть времени процессор не работает.
Поведение на МК будет отличаться лишь при попытке вывести -15: на некоторых МК это будет 65521.
Еще 241 может быть, если char по умолчанию unsigned. В любом случае даже -15 - это обычно не то, что ожидается увидеть, т.к. скорее всего в char будут хранить не отрицательные числа, а символы которые могут превращаться в отрицательные числа, но коды то у символов положительные... По этой причине Clang-Tidy при преобразовании char в int советует сначала приводить к unsigned char и моя либа форматирования так и делает:
Код:
char x = 'Y', y = 'Я'; int8_t ix = 'Y', iy = 'Я'; unsigned char ux = 25, uy = -25; rtt.println(x, y, ix, iy, ux, uy); // Y, ?, 89, -33, 25, 231 rtt.print<"{}, {}, {d}, {d}">(x, y, x, y); // Y, ?, 89, 223
Если хочется явно беззнаковое использовать, то зачем вообще с char связываться? Просто сразу же и писать uint8_t.
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
О чем и речь, с char связываются когда хранят символы, а коды символов всегда положительны и трактовка хранимых в char значений должна быть соответствующей. Если нужно хранить 8-ми битный числа, то для этих целей есть int8_t/uint8_t.
ps. Помимо неопределенной знаковости char еще и char, signed char и unsigned char - три разных типа!
что-то я не вижу здесь ни каких волшебных инструкций
Откуда им взятся если вы не переводите МК в режим пониженного потребления? Из CMSIS
Код:
/** \brief Wait For Interrupt \details Wait For Interrupt is a hint instruction that suspends execution until one of a number of events occurs. */ #define __WFI() __ASM volatile ("wfi")
/** \brief Wait For Event \details Wait For Event is a hint instruction that permits the processor to enter a low-power state until one of a number of events occurs. */ #define __WFE() __ASM volatile ("wfe")
Следуя вашей логике, все без исключения процессоры всегда при работе загружены на 100%. Но это же не так.
именно так. Задача при выполнении всегда грузит процессор на 100%. Рассказывать мне про энергосберегающие алгоритмы не надо - разработать устройство со сроком работы от 5 лет и выше от батарейки я могу по щелчку пальцев.
Сдвиг, который на ARM вообще ничего не стоит - напрягает, а деление, которое раз в 15 медленнее - нет. Да ещё зачем-то 2 раза деление на одно и то же число. Видимо чтобы как можно больше замедлить выполнение. Иного объяснения не придумать. Да ещё куча лишних обращение к памяти (buf) совершенно не нужных. Да ещё и лишнее ветвление, без которого можно обойтись, и которое не факт что будет скомпилено в инструкцию условного выполнения. Сделали ну просто всё чтобы максимально затормозить функцию!
Для кого я писал оптимизированный вариант... Видимо, для себя. Откуда-то два деления придумали, "лишние" обращения, "лишние" ветвления. И все это в псевдокоде, написанном из головы. Впрочем, ладно: если уж взяли мой пример для произвольного основания, продемонстрируйте свой вариант, решающий эту задачу не хуже. Естественно, в качестве доказательства принимается количество тактов для среднего и худшего случаев в сравнении с тем, что на вашем компиляторе выдает мой "неоптимальный" код.
Да уж, ругаю всех за деление на F0, а в своем глазу бревна не вижу!
_________________ Linux rules! Windows must die. Здравомыслящий человек добровольно будет пользоваться мастдаем лишь в двух случаях: под дулом автомата или под влиянием анального зонда. Я на гитхабе, в ЖЖ
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 20
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения