|
|
Кстати, Thumb - хороший пример, как малой кровью дать возможность программисту выбирать, когда ему нужно выжимать максимум производительности, а когда - минимальный объем кода.
По поводу AVR не согласен.
Конечно, можно сэкономить SBIW, но вот сделать вместо него EORI - затруднительно. Каждая такая команда, вроде SUBI, отжирает сразу 4096 из 65536 доступных кодов операции - проще говоря, для нее должна быть выделена уникальная старшая тетрада кода операции. Таких свободных тетрад больше не осталось, так что чем-то пришлось пожертвовать. EORI - не самый худший выбор.
Можно, конечно, было сделать смещение в LDD со знаком. За счет меньшего диапазона. Только я, например, довольно много писал на ассемблере AVR, и ни разу мне реально не понадобились отрицательные смещения в LDD. Отрицательные смещения могут понадобиться только при итерации сложной таблицы с конца, но в этом случае всегда можно декрементировать указатель перед обращением к строке таблицы.
В общем, мне система команд AVR нравится. То, что при работе с ней не возникает впечатление непродуманности - это совершенно определенно. Единственное, что мне реально нехватало - это команды копирования IO битов в T, например, и обратно. Возможно, это опять-таки связано с ограниченностью доступных кодов операции.
Некоторое время назад посмотрел внимательно на MSP, подумав о применении его для одного проекта - и понял, что при 3.3 В из 8 МГц ATMega я выжимаю большую производителность. Конечно, речь шла об эффективности критичного цикла прежде всего для некоторой коммуникационной задачи - и тем не менее. Ну, не понравилось мне очень сильно, что только операции типа регистр-регистр и операции с некоторыми константами (0, 1, 2, 4, 8, 0xffff) выполняются за 1 такт. push Rn занимает 3 такта, call по абсолютному адресу - 5. Безусловный переход по абсолютному адресу - 3 такта. Ret - те же 3 такта. РОН в итоге - только 12 штук, хоть и 16 битных. И толку-то, что в системе команд есть куча сложных редко используемых режимов адресации.
Впрочем, если писать только на С, система команд и производительность никому не интересны :)
Нет уж, MSP рядом с ARM и близко не валялся - идеология совершенно разная, и я не понимаю, как MSP при этом можно называть младшим братом ARM. С AVR, конечно, сравнивать можно - но для моей задачи при сравнении AVR некоторое время назад оказался лучше. Быстрее он с байтовыми данными управляется :).
E-mail: info@telesys.ru