Цитата
Видимо, компилятор рассчитывает на изначально нулевое значение переменной счётчика, что не так на стадии стартапа.
это какой-то плохой и злой компилятор.
В кодах от кейла если стоит
int a = 0;
то там в ассемблере явно есть регистр в который пихается 0, а потом используется на месте а. (без оптимизации)
Вроде бы нам как-то с первого курса долдонили что в не инициализированной памяти может быть что угодно, неужели это не долдонили тем кто пишет компиляторы? неверю....
Цитата
Не факт. Совсем не факт. Во первых, 32bit команда по количеству сделанного может первосходить 16 bit, так-что в "командах" считать не надо.
Не чтобы поспорить, а чтобы самому стать лучше.
Как я понял thumb2 добавил 16 битных команд, заменив ими 32 не уменьшая общего функционала. То есть порезали длину переходов, длину адресов и так далее, но что команда делала, то она и делает. Для тех команд что в 16 битах все таки не дотягиваются они добавили 32 битные команды. Возможно какие-то совсем редкие 32 битные заменили комбинацией 16 битных (бегло по табличке я таких не нашел, но может не прав).
Что thumb проигрывал ARM это известный факт, а вот про thumb2 они написали типа сохранили компактность thumb и производительность ARM, и я не думаю что они сильно лукавят....
Цитата
Но все-же 32 бита команда это зачастую очень эффективно.
и они частично остались, именно те что были очень эффективны...
Цитата
Второе, к чему мне куча команд зараз считанных из Flash, если у меня первая из команд это переход
ну это понятный факт, но все же большие куски линейного кода идут друг за другом, даже кейс с переходами пока идут проверки куда лететь - это цепочка команд с пропусками 2-3, в 32 битном варианте это каждая проверка с тормозом, а в 16 битном до следующей порции флеши по 2-3 проверки...
Цитата
осмотрите на результат и как вызывается одна и другая функция и подумайте о нативности char,
кстати один раз видел как 32 битная система стала тормозить когда ее переписали на 8 битные данные, ответ оказался очень простой, она так и считала в 32 битах, только добавила команду по отрезанию результата маской%).... Если все шины 32, регистры 32, и память 32. То конечно возвращать из функции 8 или 32 разницы по памяти нет. Все равно это либо в регистр либо в стек положат, также записанный за 1 такт, и имеющий все равно размер 32....
Цитата
Ну а как нехорошо, я тоже знаю, даже на своей шкуре, когда последние годы портирую со старенького ARM7 на M3
А поделитесь примером, самым простым, надеюсь не коммерческая тайна. Мне правда интересно...
у меня недавно был проект где проц должен был ровно раз в 10 мкСек что-то делать, причем максимально повторяемо, при этом он крутил ТСР стек, говорил по езернету и так далее. Я вынес эту работу в прерывание таймера, таймер запустил на 10 мкСек, и назначил наивысший приоритет. В результате где бы программа не находилась и чтобы она не делала, она прерывалась и четко работала. Без вложенности я даже не знаю как такое решить с гарантиями.